developer · v2
API contract
Streamsyncs is delivered as a drop-in UI. Swap the transport for a real REST + WS backend and the UI is unchanged. All resource bodies validate against JSON Schemas exposed at /v1/schemas/{kind}.
REST · resource lifecycle
GET
/v1/pipelinesList all pipelinesGET
/v1/pipelines/{id}Read pipeline definitionPUT
/v1/pipelines/{id}Create or update a pipeline (creates new revision)POST
/v1/pipelines/{id}:validateValidate a draft against JSON SchemaPOST
/v1/pipelines/{id}:dryRunCompute deployment plan, no side effectsPOST
/v1/pipelines/{id}:rollbackRollback to a prior revision (?ts=...)GET
/v1/pipelines/{id}/historyList revisions, who/when/diffPOST
/v1/pipelines/{id}:runTrigger a manual runPOST
/v1/pipelines/{id}:pausePause workersPOST
/v1/pipelines/{id}:resumeResume workersPOST
/v1/pipelines/{id}:replayReplay from LSN/checkpoint (body: { lsn })POST
/v1/pipelines/{id}:throttleSet max rps (body: { maxRps })GET
/v1/sources, /v1/targets, /v1/schemas, /v1/transforms, /v1/schedulesSame shape as pipelinesGET
/v1/runsRun history (?pipeline=&limit=)GET
/v1/team, /v1/tokens, /v1/settingsWorkspace administrationPOST
/v1/auth/loginMint a session (body: { email, password|sso_token })POST
/v1/auth/logoutRevoke sessionWS topics · server → client
WS
pipelines.{id}.node.metricsPer-node throughput, lag, CPU, memoryWS
pipelines.{id}.node.stateNode lifecycle: running / paused / failed / retrying / doneWS
pipelines.{id}.edge.flowRows traversing each DAG edge per tickWS
pipelines.{id}.log.linePer-node log lines (level, msg)WS
pipelines.{id}.runrun.started / run.completed / run.failed / heartbeatWS
pipelines.{id}.alertalert.fired / alert.clearedWS
pipelines.{id}.schemaschema.drift detected on a fieldWS
pipelines.{id}.checkpointcheckpoint.committed (LSN advance)WS
workspace.notificationsWorkspace-wide info / warn / success notificationsWS
workspace.ctrlUI → backend control channel (mirrored back for replay)WS
workspace.authlogin / logout transitionsCommands · client → server (over WS)
CMD
pipeline.pause { id }Pause all workers for a pipelineCMD
pipeline.resume { id }Resume paused workersCMD
pipeline.run { id, trigger }Trigger a manual runCMD
pipeline.cancel { id }Cancel the active runCMD
pipeline.throttle { id, maxRps }Cap throughputCMD
pipeline.replay { id, lsn }Rewind checkpoint and replayCMD
node.pause { pipeline, node }Pause a single DAG nodeCMD
node.resume { pipeline, node }Resume a single DAG nodeCMD
run.skip { id }Skip the current batchIntegration seam
// 1. Single client module — swap the transport, keep the UI:
window.SsyncClient = {
rest: { list, get, put, validate, dryRun, rollback, history },
on(topic, cb) // subscribe to WS events
cmd(kind, args) // send control cmd
auth: { login, logout, switchWorkspace }
}
// 2. Per-resource React hooks — backed by an injectable transport:
const [doc, ops] = useResource('pipelines', 'p_orders_lake');
const events = useStream('pipelines.p_orders_lake.node.metrics', cb);
const buffer = useEventBuffer();
const user = useUser();
const note = useNotifications();
// 3. JSON Schemas live at runtime for any kind:
window.SsyncSchemas.pipelines // ← drop into Ajv, monaco-yaml, etc.Mock backend controls
DEV
SsyncClient.resetSeed()Wipe localStorage and re-seed. Also a button on the Debug drawer.DEV
SsyncClient.setEventRate(rps)Throttle the simulated event firehose (default 62/s).