Skip to content
Ironflow is pre-1.0: APIs can change between releases. Pin a version. What is ready →

SDK Parity Matrix

This is the canonical Ironflow capability catalog and the exhaustive companion to the SDK Comparison page. Its schema and exposure boundaries are recorded in ADR 0065 after the implementation-evidence audit of 2026-08-26. Where the comparison page answers “which SDK should I use”, this matrix answers “exactly how is this capability exposed, and how sure are we”.

Statuses: full (verified end to end), partial (works with a documented limit), indirect (delivered through a different mechanism than the named endpoint), missing (implemented on the server, no exposure here), intentionally-excluded (a deliberate product or trust boundary), not-applicable, unverified (support could not be proved from source — treat as unknown, not as ❌). Tests/Docs record the audited state per capability, and Classification names the dominant gap class for the row (none means no gap).

Readiness rates the capability itself: Ready, Evolving or Experimental. Ironflow is pre-1.0, so “Ready” means ready within a pre-1.0 product. See Readiness for the meanings.

Each table is wider than the page. Scroll it sideways to see all columns. A glow at the right edge shows that more columns are hidden.

The ironflow serve command wires NATS, PubSub, the NATS-backed secrets manager, and an engine with a worker manager. Embedded servers can omit those dependencies, which changes the routes that are actually mounted:

SurfaceRequired dependencyBehavior when dependency is absent
PubSubService (ConnectRPC)PubSub bridge and consumer managerService is not mounted.
Pub/sub subscriptions (WebSocket)PubSub managerUpgrade succeeds; subscribe requests return PubSub not configured.
KV and config (REST and WebSocket watch)NATS providerRoutes are not mounted.
Secrets (REST)Secrets managerRoutes are not mounted. The standard CLI manager is NATS-backed.
WorkerService (ConnectRPC)Engine with a worker managerService is not mounted.
Pull-worker polling (REST)REST worker handlerRoutes are not mounted.

The REST route manifest is the immutable SDK-generation catalog, so it still lists optional REST routes that an embedded instance did not mount. The ConnectRPC portion is built from that instance’s mounted-service snapshot.

Nine capability rows cover server push and live delivery. This is a capability inventory, not a count of wire endpoints: Pub/sub subscription has both a ConnectRPC stream and the generic WebSocket transport.

Capability IDServer transport
exec-push-serveEngine HTTP POST to the SDK-owned serve() endpoint
exec-streaming-workerWorkerService/Connect bidirectional stream
proj-stream-eventsProjectionService/StreamProjectionEvents server stream
proj-catchupProjectionService/WaitProjectionCatchupStream server stream
pubsub-subscribePubSubService/Subscribe server stream and GET /ws
pubsub-subscribe-bidiPubSubService/SubscribeBidirectional bidirectional stream (consumer groups)
pubsub-cg-joinPubSubService/JoinConsumerGroup server stream
kv-watchGET /api/v1/kv/buckets/{bucket}/watch WebSocket upgrade
config-watchGET /api/v1/config/{name}/watch WebSocket upgrade

The KV and config watch routes are present in sdk-parity.yaml and measured in sdk-coverage.json. The generic GET /ws transport is deliberately skipped by the endpoint ledger and represented by the pubsub-subscribe capability row.

IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
event-emitEmit/trigger eventnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
event-emit-syncSynchronous triggernoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
event-emit-batchBatch triggernoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
event-listList eventsnoAPI key/JWTfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
event-namesList event namesnoAPI key/JWTfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
event-getGet event by IDnoAPI key/JWTfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
event-explain-matchExplain current event routingnoAPI key/JWT; CLI and MCP and dashboardnot-applicablefullnot-applicablemissingmissingmissingfullnot-applicabletesteddocumentedknown gapEvolving
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
function-registerRegister functionyesAPI keynot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
function-listList functionsnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
function-getGet function detailnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
function-invokeDirect invoke by IDnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
function-invoke-asyncDirect invoke by ID without waitingnoAPI key/JWTnot-applicablefullnot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
function-statusEnable/disable functionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
function-deleteDelete functionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
function-historyFunction version historynoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
function-at-versionGet function at versionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
function-rollbackRollback function versionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
deployment-registerRegister executable deploymentnoAPI key/JWT; functions:registernot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
deployment-readRead deployments and execution routingnoAPI key/JWT; functions:readnot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
run-listList runsnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-getGet runnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-stepsRun step listnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-cancelCancel runnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-deleteDelete terminal runsnoAPI key/JWT; runs:delete (admin)not-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
payload-redactRedact stored payloadsnoAPI key/JWT; events:redact (admin)not-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
run-resumeResume runnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-pausePause runnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-paused-stateGet paused-run statenoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-auditPer-run audit trailnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
run-streamsEntity streams touched by runnoAPI key/JWTfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
step-patchLive patching of step outputnononenot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
step-inject-outputInject step output into paused runnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
tt-run-state-atRun state at timestampnoRPC-onlynot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
tt-run-timelineRun mutation timelinenoRPC-onlynot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
tt-step-output-atHistorical step outputnoRPC-onlynot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
step-run-memoizedstep.run memoizationyesTier-1 SDKs only (Go, Node, Python)not-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
step-sleepDurable sleep/sleepUntilyesTier-1 SDKs only (Go, Node, Python)not-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
step-wait-for-eventwaitForEvent yieldyesTier-1 SDKs only (Go, Node, Python)not-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
step-invokestep.invoke / invokeAsyncyesTier-1 SDKs only; ADR 0010not-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
step-parallelParallel branchesyesTier-1 SDKs only; client-side executionnot-applicablenot-applicableindirectfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
step-compensateSaga compensationyesTier-1 SDKs only (Go, Node, Python)not-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
exec-push-servePush mode serve()yesPushTimeout budget; optional HMAC signaturenot-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
exec-pull-workerPull worker protocol (register/heartbeat/poll/ack/update)yesREST routes always mount; engine required for dispatch; parity-manifest excludedfullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
exec-workers-listList connected workersnoAPI key/JWTfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
exec-streaming-workerStreaming worker (bidi)yesopt-in; Connect service mounts only when the engine has a worker managernot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
sdk-trace-continuation-nodeJavaScript job trace continuationyesNode only; optional @opentelemetry/api peer; application configures tracingnot-applicablenot-applicablefullnot-applicablefullnot-applicablenot-applicablenot-applicabletesteddocumentednoneEvolving
sdk-python-execution-tracingPython execution trace continuationyesOptional tracing extra; application configures OTel providernot-applicablenot-applicablefullnot-applicablenot-applicablenot-applicablefullnot-applicabletesteddocumentedintentional product boundaryReady
sdk-python-correlated-loggingPython callback log correlationyesPython only; native logging; application-owned optional OTel LoggingHandler; no engine log collectionnot-applicablenot-applicablefullnot-applicablenot-applicablenot-applicablefullnot-applicabletesteddocumentedintentional product boundaryEvolving
sdk-correlated-logging-nodeJavaScript correlated application loggingyesNode only; app-owned native or explicit OTel Logs sink; no Ironflow collectionnot-applicablenot-applicablefullnot-applicablefullnot-applicablenot-applicablenot-applicabletesteddocumentedintentional product boundaryEvolving
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
stream-appendAppend entity eventnooptimistic concurrencynot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
stream-readRead stream eventsnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
stream-infoStream infonoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
stream-listList entity streamsnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
stream-historyUnified entity historynoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
snapshot-createCreate snapshotnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
snapshot-getGet snapshotnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
stream-deleteDelete entity streamnoAPI key/JWT; streams:delete (admin)not-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
proj-registerRegister projection (external runner)yesworker-SDK surfacenot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
proj-unregisterUnregister projectionyesworker-SDK surfacenot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
proj-runner-transportRunner transport (poll/save-state/ack)yesRPC_SKIP transport plumbingnot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
proj-runner-leaseRunner lease (acquire/renew/release)yesRPC_SKIP transport plumbingnot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
proj-stream-eventsStream projection eventsyesserver-streamnot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
proj-getGet projectionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
proj-listList projectionsnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
proj-statusProjection status/lagnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
proj-partitionsPartition listingnoAPI key/JWT; browser operator boundaryfullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-rebuildRebuild projectionnoAPI key/JWT; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-rebuild-statusRebuild job statusnoAPI key/JWT; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-rebuild-cancelCancel rebuildnoAPI key/JWT; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-pausePause projectionnoAPI key/JWT; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-resumeResume projectionnoAPI key/JWT; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-deleteDelete projectionnoAPI key/JWT; browser operator boundaryfullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-sql-createCreate managed SQL projectionnoGo uses raw SQL; browser operator boundarynot-applicablefullnot-applicableintentionally-excludedfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-sql-queryQuery SQL projectionnoAPI key/JWTnot-applicablefullnot-applicableintentionally-excludedfullfullfullnot-applicabletesteddocumentednoneReady
proj-catchupWait for projection catchupno#473; stream variant existsnot-applicablefullfullfullfullfullfullnot-applicabletesteddocumentednoneReady
proj-catchup-batchBatch catchup waitnoAPI key/JWT; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
proj-wait-for-eventWait for event appliednoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
worker-projection-managedManaged (pure reducer) projection handleryesTier-1 SDKs only (Go, Node, Python)not-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
worker-projection-externalExternal (side-effect) projection handleryesTier-1 SDKs only (Go, Node, Python)not-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
event-upcastersClient-side upcaster registryyesruntime registration Tier-1 only (Go/Node/Python workers); Browser has no worker runtime; server dry-run separatenot-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
proj-historyList definition historynoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
proj-revisionGet archived definitionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
pubsub-publishPublish to topicnoNATS required; REST and Connect return 503 without a bridgenot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
pubsub-subscribeSubscribe replay+livenoNATS required; Connect service is late-mounted; WebSocket subscribe errors without a managernot-applicablefullfullfullfullfullfullnot-applicabletesteddocumentednoneReady
run-event-versionRun frame version (drop a stale status)noRun and step frames carry committed row versions and rank independently by full identity; lower positive versions drop and ties or unknown versions pass; deletion blocks late run and step frames including unknown versions while remembered in the shared bounded cache; filters are opt-in except browser agents.subscribe and CLI subscribenot-applicablenot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneEvolving
pubsub-subscribe-bidiBidirectional subscribenoConsumer groups only; API key/JWT events:subscribe; No Python client yet; Python composes join_consumer_group and ack_event. Browser cannot stream both waysnot-applicablefullnot-applicablefullfullintentionally-excludedindirectnot-applicabletesteddocumentedSDK transport gapEvolving
pubsub-cg-manageConsumer group CRUDnoNATS required; Connect service is late-mountednot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
pubsub-cg-joinJoin consumer groupnoNATS required; Connect service is late-mountednot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
pubsub-cg-ackAcknowledge consumer group eventnoNATS required; MANUAL consumer groups onlynot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
pubsub-topicsList topicsnoNATS required; Connect service is late-mounted; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
pubsub-topic-statsTopic statsnoNATS required; Connect service is late-mounted; browser operator boundarynot-applicablefullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
kv-bucketsKV bucket CRUDnoNATS required; REST routes are absent without a providerfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
kv-keysKV key CRUD + listnoNATS required; REST routes absent without a provider; Python exposes conditional headers as generated kwargsfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
kv-watchWatch KV bucketnoNATS required; REST watch route is absent without a providerfullnot-applicablefullfullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
config-readGet/list confignoNATS required; REST routes are absent without a providerfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
config-writeSet/patch/delete confignoNATS required; REST routes are absent without a provider; server-onlyfullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
config-watchWatch confignoNATS required; REST watch route is absent without a provider; browser uses a WebSocket topic insteadfullnot-applicablefullfullfullindirectfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
secret-crudSecrets CRUD (values write-only)noSecrets manager required; REST routes are absent without one; browser-excluded by designfullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
schema-registerRegister schema versionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
schema-readList/get schemasnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
schema-check-enforcementCheck schema enforcementnoAPI key/JWT; Python RPC facade and the CLI onlynot-applicablefullnot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
schema-deleteDelete schema versionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
schema-test-upcastDry-run upcaster chainnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
schema-historyList definition historynoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
schema-revisionGet archived definitionnoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
webhook-ingestInbound provider webhooknoifwh_ token waiver (ADR 0048); not SDK-callablefullnot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicabletesteddocumentedintentional product boundaryReady
webhook-source-crudWebhook source managementnosnake_case codec (ADR 0023)not-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
webhook-secret-opsRotate/expire secrets + ingest tokennoreturns minted secrets to caller incl. browsernot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
webhook-verify-testTest verification confignorequest carries signing secret; dashboard diagnosticnot-applicablefullnot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
webhook-deliveriesDelivery lognoAPI key/JWTnot-applicablefullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
agent-tool-registerRegister agent toolyesURL guard on callbacksnot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
agent-tool-invokeInvoke agent toolyesserver-driven HMAC dispatchnot-applicablefullnot-applicableindirectindirectnot-applicablefullnot-applicabletesteddocumentednoneReady
agent-tool-unregisterUnregister agent toolyesworker-SDK surfacenot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
agent-tool-listList agent toolsnoAPI key/JWTnot-applicablefullnot-applicablefullfullnot-applicablefullnot-applicabletesteddocumentednoneReady
agent-authoringAgent authoring runtime (agent/defineTool/exposeMcp/llm/memory/spawn/approve)yesTier-1 SDKs onlynot-applicablenot-applicablefullfullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
agent-client-invokeInvoke agent + read memory (client composition)noInvokeFunctionSync for invoke; projection composition for readMemoryindirectindirectnot-applicableindirectindirectfullindirectnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
langgraph-checkpointerLangGraph checkpointer (IronflowSaver)nocheckpointer-only product scope; list() without thread_id throwsindirectindirectnot-applicablenot-applicablenot-applicablenot-applicablenot-applicablefulltesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
browser-offline-queueOffline write queue (IndexedDB + multitab lock)noADR 0053; browser-onlynot-applicablenot-applicablenot-applicablenot-applicablenot-applicablefullnot-applicablenot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
circuit-breaker-manageCircuit breakers list/resetnoCLI ironflow circuit-breaker is the supported route; ADR 0037fullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
capacity-viewsCapacity observabilitynoread-only ops surfacefullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
debounce-manageDebounce list/cancelnoops surfacefullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
dead-letter-listStored dead-letter row listingnoevents:subscribe and explicit environment; REST CLI and MCP onlyfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedintentionally-excludednot-applicabletesteddocumentedintentional product boundaryReady
outbox-dlqOutbox DLQ list/requeue/discardnoCLI ironflow outbox dlq is the supported routefullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
flow-edgesFlow map edges (emit/stream/topic/invoke/wait/webhook)nodashboard surface (#1262)fullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
sql-executeRaw SQL querynoAPI key/JWTnot-applicablefullnot-applicablefullintentionally-excludedfullfullnot-applicabletesteddocumentednoneReady
audit-env-wideEnvironment-wide auditnoruns:read RBACfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
audit-settings-readAudit settings viewnoruns:read RBAC; operator view of the effective audit policyfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
audit-exportFiltered Audit Log JSONL exportnoruns:read RBAC; dashboard download and direct HTTP streamfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedintentionally-excludednot-applicabletesteddocumentedintentional product boundaryReady
auth-auditAuthentication and authorization auditnoruns:read RBAC; generated Python onlynot-applicablefullnot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
project-crudProject CRUDnoserver-side surfacefullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
env-crudEnvironment CRUDnoEnvironmentService mounted; hand-written SDK methods remain REST-backed per ADR 0065fullfullnot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentednoneReady
env-rotate-apikeyRotate environment API keynorotates by key id over REST (apikey-rotate’s route); compatibility RPC rejects ambiguous multi-key admin rotationindirectfullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
apikey-crudAPI key CRUDnoifkey_/ifplatform_ prefixesfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
apikey-rotateRotate API keynominted secret returned to callerfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
apikey-rolesReplace key rolesnoadmin RBAC; generated Python onlyfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
org-crudOrganization CRUDnoRBAC + IsPlatform; SDK create calls POST /api/v1/platform/orgs; tenant POST /orgs returns 403fullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
org-exportNDJSON customer-data exportnoauthenticated administrators; no SDK wrapper; per-node single-flight (#774)fullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedintentionally-excludednot-applicabletesteddocumentedintentional product boundaryReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
role-crudRole CRUDnoadmin RBACfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
policy-setRego policy set (get, put, validate, dry-run, versions, rollback)noenterprise-only; admin RBAC; PUT and rollback need If-Matchfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
user-crudUser CRUDnoserver-onlyfullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
user-passwordChange user passwordnoself-only session route (users:password: every built-in role); server-only browser boundaryfullnot-applicablenot-applicablefullfullintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
tenant-provisionProvision tenantnobootstrap-org admin (instance-scoped)fullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
tenant-listList tenantsnobootstrap-org admin (instance-scoped)fullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
platform-authPlatform login + bootstrapnologin public; bootstrap needs tenant admin keyfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
platform-adminPlatform users/roles/tenants/auditnoRequirePlatform(); ifplatform_ keyfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
platform-policy-setPlatform Rego policy set (get, put, validate, dry-run, versions, rollback, break-glass monitor)noenterprise-only; RequirePlatform(); ifplatform_ key; PUT and rollback need If-Matchfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
instance-adminInstance barrier and conservative drain administrationnoplatform actionsfullfullnot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryExperimental
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
auth-dashboard-sessionDashboard login/validate/desktop-sessionnoexcluded from SDK parity by designfullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedintentionally-excludednot-applicabletesteddocumentedintentional product boundaryReady
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
cluster-opsCluster health + rotate-tokennometa control plane; not tenant-callablefullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
health-readyLiveness/readinessnopublic pathsfullfullnot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
metrics-endpointPrometheus metricsnoconditional on metrics enabledfullnot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicabletesteddocumentednoneReady
capabilities-discoveryServer capability discoverynopublic; SDK transport detectionfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady
openapi-specOpenAPI 3.1 specnoREST-only contract; WS surfaces absent from artifactfullnot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicabletesteddocumentednoneReady
server-introspectionOverview/routes/debug/SPA/pprofnoparity-excluded tooling surfacesfullnot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicabletesteddocumentednoneReady
server-infoServer infonoCLI ironflow server info; RPC_SKIP transport metadata; no SDK wrappernot-applicablefullnot-applicablenot-applicablenot-applicablenot-applicablenot-applicablenot-applicabletesteddocumentedintentional product boundaryReady
cluster-log-levelTemporary cluster log levelnoinstance admin; explicit shared JWT in multi-node modefullnot-applicablenot-applicableintentionally-excludedintentionally-excludedintentionally-excludedfullnot-applicabletesteddocumentedintentional product boundaryReady
go-sdk-trace-continuationGo SDK W3C trace continuationyesApplication-configured OTel provider; Go only (#3438)not-applicablenot-applicablenot-applicablefullnot-applicablenot-applicablenot-applicablenot-applicabletesteddocumentednoneEvolving
go-sdk-correlated-loggingGo SDK correlated function loggingyesApplication-owned slog handler and optional OTel Logs bridge; Go only (#3444)not-applicablenot-applicablenot-applicablefullnot-applicablenot-applicablenot-applicablenot-applicabletesteddocumentednoneEvolving
IDCapabilityWorkerRestrictionsRESTConnectRPCOtherGoNodeBrowserPythonLangGraphTestsDocsClassificationReadiness
files-storageFile storage: buckets, files, signed URLsnoBlob backend required (always present; filesystem by default); signed routes are public, token is the credentialfullnot-applicablenot-applicablefullfullfullfullnot-applicabletesteddocumentednoneReady