Your callers
Each sends the same POST to the same deployment. Nothing about the workflow reaches your code.
Theme
Palette
Your own colour
Saved for this browser, on every page.
Your product calls a deployment on a versioned API. The workflow behind it can improve release by release while the request your code sends stays the same.
curl -X POST \
https://vendor.sh/api/v1/workflows/inbound-email/runs \
-H "Authorization: Bearer $VENDOR_KEY" \
-H "Idempotency-Key: ticket-48213" \
-d '{"input": {"subject": "Charged twice"}}'
{
"data": {
"id": "01J8ZQ4K7T2M9V3XB0RHYWCE5F",
"status": "pending",
"mode": "async",
"deployment": { "slug": "inbound-email", "environment": "production" },
"release": { "number": 3 },
"usage": { "cost": "0.0000", "tokens": 0, "duration_ms": null }
}
}
event: run.started
data: {"run_id":"01J8ZQ4K7T2M9V3XB0RHYWCE5F"}
event: node.succeeded
data: {"node":"support-triage","duration_ms":520}
event: run.succeeded
data: {"status":"succeeded"}
The shape of it
Each sends the same POST to the same deployment. Nothing about the workflow reaches your code.
The key decides what the caller may start and which deployments it may reach.
The deployment points at one immutable release, and you move it forward on purpose.
What your code can rely on
Everything lives under /api/v1, so a change of shape arrives as a new version.
Published at /openapi.json. Generate a client or read it directly.
Send one per intent. A retried request never starts a second run.
Follow each step as it runs instead of polling for the end.
Long work is queued and answered at once with a run you can follow. A sync run answers 200.
Limited abilities, a deployment allowlist, an expiry and revocation.
Connect a backend
Limit it to one project, the abilities it needs and the deployments it may call.
POST to the deployment with an Idempotency-Key for each intent.
Read the event stream or fetch the run until its status is final.
Use the structured output, and the usage record that came with it.
One POST, an Idempotency-Key, and a run you can follow to the end.