Skip to content
Get started

API reference

Generated from the API's OpenAPI document — every endpoint, grouped by resource.

Agents

GET/v1/agents

List agent profiles

Responses

StatusDescription
200Agent profiles
401Error
POST/v1/agents

Create an agent profile (profile + version 1)

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
401Error
GET/v1/agents/{id}

Get an agent profile, including its current version config

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Agent profile
404Error
GET/v1/agents/{id}/evals

List this agent's eval run batches, newest first

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Eval runs
404Error
POST/v1/agents/{id}/evals

Run every eval case for this agent through the kernel (as an evals.run job)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Queued
404Error
409Error
GET/v1/agents/{id}/evals/{runId}

Get one eval run batch's per-case detail

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
runIdpathstring (uuid)Yes

Responses

StatusDescription
200Eval run
404Error
GET/v1/agents/{id}/proposals

List this agent's improvement proposals, newest first

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Proposals
404Error
POST/v1/agents/{id}/proposals

Manually create an improvement proposal (proposedConfig + rationale)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
404Error
409Error
POST/v1/agents/{id}/proposals/{pid}/accept

Accept a proposal — creates a new immutable version (base ⊕ diff) and makes it current

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
pidpathstring (uuid)Yes

Responses

StatusDescription
200Accepted
404Error
409Error
POST/v1/agents/{id}/proposals/{pid}/reject

Reject a proposal

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
pidpathstring (uuid)Yes

Responses

StatusDescription
200Rejected
404Error
409Error
POST/v1/agents/{id}/proposals/suggest

Enqueue improvements.suggest on demand, from the agent's most recent failing eval cases

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
202Queued
404Error
409Error
GET/v1/agents/{id}/versions

List an agent profile's versions, newest first

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Versions
404Error
POST/v1/agents/{id}/versions

Create a new immutable profile version (becomes current)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
404Error
GET/v1/agents/{id}/versions/{a}/diff/{b}

JSON diff between two profile versions' configs, per docs/specs/phase-3.md §3.5

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
apathintegerYes
bpathintegerYes

Responses

StatusDescription
200Diff
404Error
GET/v1/agents/{id}/versions/{version}

Get one specific agent profile version

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
versionpathintegerYes

Responses

StatusDescription
200Agent profile version
404Error
POST/v1/agents/{id}/versions/{version}/activate

Make an already-existing version current again (rollback/forward), per docs/specs/phase-3.md §3.5

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
versionpathintegerYes

Responses

StatusDescription
200Activated
404Error

Api Keys

GET/v1/api-keys

List API keys

Responses

StatusDescription
200API keys
POST/v1/api-keys

Create an API key (plaintext key returned once)

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
PATCH/v1/api-keys/{id}

Set or clear an API key's monthly spend cap

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Updated
400Error
404Error
DELETE/v1/api-keys/{id}

Revoke an API key

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Revoked
404Error

App Templates

GET/v1/app-templates

List the static published-app template gallery (drop_and_extract, quote_request), per docs/plan/phase-6-ux-checklist.md §6.6

Responses

StatusDescription
200App templates
401Error

Apps

GET/v1/apps

List published apps

Responses

StatusDescription
200Published apps
401Error
POST/v1/apps

Create a published app from an agent profile

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
404Error
409Error
GET/v1/apps/{id}

Get a published app

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Published app
404Error
PATCH/v1/apps/{id}

Update a published app's template/slug/theme/access/caps

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Updated
400Error
404Error
409Error
DELETE/v1/apps/{id}

Delete a published app

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error
POST/v1/apps/{id}/domain

Set a custom domain, returning the TXT record to publish for verification

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Domain set
400Error
404Error
409Error
POST/v1/apps/{id}/domain/verify

Verify the custom domain's TXT record

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Verified
404Error
409Error
422Error
POST/v1/apps/{id}/pause

Pause a live app (status -> paused)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Paused
404Error
POST/v1/apps/{id}/publish

Publish a draft/paused app (status -> live)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Published
404Error
GET/v1/apps/{id}/usage

Today's and recent daily usage against this app's caps

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Usage
404Error
GET/v1/apps/slug-availability

Check whether a slug is free to use for a new/renamed published app (global, not workspace-scoped)

Parameters

NameInTypeRequired
slugquerystringYes

Responses

StatusDescription
200Availability
401Error

Builder

POST/v1/builder/sessions

Start a conversational agent-builder session, per docs/plan/phase-6-ux-checklist.md §6.5

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
401Error
GET/v1/builder/sessions/{id}

Get a builder session, including its transcript and current draft config

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Builder session
404Error
POST/v1/builder/sessions/{id}/cancel

Abandon a builder session without creating an agent (idempotent; 409 if already completed)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Builder session
404Error
409Error
POST/v1/builder/sessions/{id}/create

Validate the session's draft config and create the agent profile + version 1 from it

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
201Created
400Error
404Error
409Error
POST/v1/builder/sessions/{id}/messages

Send a message in a builder session; the control model replies and may update the draft config

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Builder session
400Error
404Error
409Error

Calendar

GET/v1/calendar

The built-in booking calendar's settings, plus appointments within an optional [from, to) range

Parameters

NameInTypeRequired
fromquerystring (date)No
toquerystring (date)No

Responses

StatusDescription
200Calendar
401Error
PATCH/v1/calendar

Update the built-in booking calendar's timezone and/or opening hours

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Updated
400Error
401Error
403Error

Connections

GET/v1/connections

List save-output delivery connections (email/webhook/s3/gdrive/sharepoint)

Responses

StatusDescription
200Connections
POST/v1/connections

Create a connection — secret config fields are sealed at rest, never returned

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
501Error
DELETE/v1/connections/{id}

Delete a connection

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error
POST/v1/connections/{id}/test

Non-destructive connectivity/credential check for one connection

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Test result
404Error

Console

GET/v1/console/auth/me

Current session user + workspaces

Responses

StatusDescription
200Current user
401Error
POST/v1/console/auth/password/forgot

Email a password-reset token, if the address has an account (enumeration-safe)

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
204Sent (or a no-op)
400Error
429Error
POST/v1/console/auth/password/reset

Redeem a password-reset token, set a new password, and revoke every session

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
204Reset
400Error
429Error
POST/v1/console/auth/sign-in

Sign in and start a session

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Signed in
401Error
POST/v1/console/auth/sign-out

End the current session

Responses

StatusDescription
204Signed out
POST/v1/console/auth/sign-up

Create an account (user + organization + workspace) and start a session

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
409Error
POST/v1/console/auth/verify

Redeem an email-verification token

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
204Verified
400Error
429Error
POST/v1/console/auth/verify/request

Email the signed-in user a verification token

Responses

StatusDescription
204Sent
401Error
429Error
GET/v1/console/billing

Balance, plan, entitlements, credit packs, and recent ledger rows

Responses

StatusDescription
200Billing
401Error
POST/v1/console/billing/checkout

Create a Stripe Checkout session for a credit pack (owner only)

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Checkout session
400Error
403Error
503Error
POST/v1/console/invitations/accept

Redeem a workspace invitation token for the signed-in user, granting membership

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Membership granted
400Error
401Error
403Error
409Error
429Error
GET/v1/console/members

List the workspace's organisation's members and roles

Responses

StatusDescription
200Members
401Error
DELETE/v1/console/members/{userId}

Remove a member from this workspace's organisation (owner/admin only)

Parameters

NameInTypeRequired
userIdpathstring (uuid)Yes

Responses

StatusDescription
204Removed
403Error
404Error
409Error
POST/v1/console/members/invite

Create a pending invitation (by email) into this workspace's organisation and email the invitee a token (owner/admin only) — see POST /v1/console/invitations/accept

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Invitation created
400Error
403Error
404Error
409Error
GET/v1/console/outbox

Dev-only: lists this workspace's outbound_messages (what DevEmailSender "sent") — 404s outside development

Responses

StatusDescription
200Outbox
401Error
404Error
GET/v1/console/request-logs

Paginated, filterable request log for this workspace

Parameters

NameInTypeRequired
fromquerystring (date-time)No
toquerystring (date-time)No
pathquerystringNo
statusqueryintegerNo
cursorquerystringNo
limitqueryintegerNo

Responses

StatusDescription
200Request logs
401Error
GET/v1/console/workspace

Get the current workspace's name and settings (allowed data regions, retention days, brand colour)

Responses

StatusDescription
200Workspace
401Error
404Error
PATCH/v1/console/workspace

Update workspace name / allowed data regions / retention days / brand colour

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Updated
400Error
401Error
403Error
404Error

Files

POST/v1/files

Upload a file (multipart or raw body + X-Filename)

Request body

Content typeSchema
multipart/form-dataobject
application/octet-streamstring (binary)

Responses

StatusDescription
201Stored
413Error
415Error

Finance

GET/v1/finance/categories

This workspace's effective finance category taxonomy (platform defaults, workspace overrides win by key)

Responses

StatusDescription
200Categories
401Error
GET/v1/finance/export

Streams bank transactions as CSV over an optional [from, to] range (400 on a malformed from/to) and the same category/anomaly/uncategorised/q filters GET /v1/finance/transactions supports — ?format=journal (default) or ?format=datev (behind AFB_FEATURE_DATEV, 404 otherwise)

Parameters

NameInTypeRequired
fromquerystring (date)No
toquerystring (date)No
categoryquerystringNo
anomalyqueryenum(true | false)No
uncategorisedqueryenum(true | false)No
qquerystringNo
formatqueryenum(journal | datev)No

Responses

StatusDescription
200CSV
400Error
404Error
GET/v1/finance/imports

List this workspace's bank CSV imports, newest first

Responses

StatusDescription
200Bank imports
401Error
POST/v1/finance/imports

Upload a bank CSV export and create a finance/categorisation run (202, Idempotency-Key supported)

Parameters

NameInTypeRequired
Idempotency-KeyheaderstringNo
accountLabelquerystringNo

Request body

Content typeSchema
multipart/form-dataobject
text/csvstring
application/octet-streamstring (binary)

Responses

StatusDescription
202Queued
400Error
402Error
413Error
POST/v1/finance/reconciliation

Create a finance/reconciliation run matching open invoices against transactions over {from, to}

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Queued
400Error
402Error
403Error
POST/v1/finance/reports

Create a finance/cashflow-report run over {from, to} (optional template)

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Queued
400Error
402Error
403Error
GET/v1/finance/rules

List this workspace's transaction_rules (created via PATCH /v1/finance/transactions/:id's own makeRule)

Responses

StatusDescription
200Rules
401Error
DELETE/v1/finance/rules/{id}

Delete one of this workspace's transaction_rules

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
401Error
403Error
404Error
GET/v1/finance/summary

By-month and by-category totals, plus anomaly/uncategorised counts, over an optional [from, to] range

Parameters

NameInTypeRequired
fromquerystring (date)No
toquerystring (date)No

Responses

StatusDescription
200Summary
401Error
GET/v1/finance/transactions

List/filter this workspace's imported bank transactions (cursor-paginated)

Parameters

NameInTypeRequired
fromquerystring (date)No
toquerystring (date)No
categoryquerystringNo
anomalyqueryenum(true | false)No
uncategorisedqueryenum(true | false)No
qquerystringNo
cursorquerystringNo
limitqueryintegerNo

Responses

StatusDescription
200Transactions
401Error
PATCH/v1/finance/transactions/{id}

Correct one transaction's category (source becomes human), optionally creating a categorisation rule

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Updated
400Error
403Error
404Error

Health

GET/v1/health

Health check

Responses

StatusDescription
200OK

Knowledge

GET/v1/knowledge

List this workspace's knowledge documents

Responses

StatusDescription
200Knowledge documents
POST/v1/knowledge

Upload a knowledge document (txt/csv/md/pdf); indexed asynchronously via a knowledge.index job

Request body

Content typeSchema
multipart/form-dataobject
application/octet-streamstring (binary)

Responses

StatusDescription
201Stored
413Error
415Error
DELETE/v1/knowledge/{id}

Delete a knowledge document (and its indexed chunks)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error
POST/v1/knowledge/search

Search this workspace's indexed knowledge chunks

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Search results
400Error

Misc

GET/docs

HTML API reference viewer

Responses

StatusDescription
200HTML

Models

GET/v1/models

List the model catalogue, filtered by the workspace's allowed data regions

Responses

StatusDescription
200Models
401Error

Openapi.json

GET/v1/openapi.json

This OpenAPI document

Responses

StatusDescription
200OpenAPI document

Phone

GET/v1/phone/agents

List phone agents

Responses

StatusDescription
200Phone agents
401Error
POST/v1/phone/agents

Create a phone agent from a phone preset — compiles and pushes it to the configured VoiceProvider

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
401Error
403Error
GET/v1/phone/agents/{id}

Get a phone agent, including its current version config

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Phone agent
404Error
PATCH/v1/phone/agents/{id}

Create a new profile version and recompile + push the update to the VoiceProvider

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Updated
400Error
404Error
DELETE/v1/phone/agents/{id}

Delete a phone agent from the VoiceProvider and this workspace

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error
POST/v1/phone/agents/{id}/rotate-secrets

Rotates this phone agent's tool + webhook secrets, recompiles, and pushes the update to the VoiceProvider (the response never echoes the new secret values)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Rotated
401Error
403Error
404Error
GET/v1/phone/calls

List calls (paginated), filterable by agentId/direction/status

Parameters

NameInTypeRequired
agentIdquerystringNo
directionqueryenum(inbound | outbound)No
statusqueryenum(live | completed | failed)No
cursorquerystringNo
limitqueryintegerNo

Responses

StatusDescription
200Calls
401Error
GET/v1/phone/calls/{id}

Get a call: transcript, summary, collected data, actions, audio link, run id

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Call
404Error
POST/v1/phone/calls/outbound

Start an outbound call, or (for a requiresApproval preset) create a needs_approval run — approve via the existing POST /v1/runs/{id}/approve

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Call started
202Needs approval
400Error
404Error
GET/v1/phone/numbers

List imported Twilio phone numbers

Responses

StatusDescription
200Phone numbers
401Error
POST/v1/phone/numbers

Import a Twilio phone number (from a sealed "twilio" connection) and optionally assign it to an agent

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
404Error
DELETE/v1/phone/numbers/{id}

Delete an imported phone number

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error
POST/v1/phone/simulate

Dev-only: simulates an inbound call end-to-end via FakeVoiceProvider (404 outside development)

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Simulated
400Error
404Error
409Error
POST/v1/phone/tools/{tool}

Live, mid-call server-tool endpoint called by the voice provider (bearer tool secret)

Parameters

NameInTypeRequired
toolpathstringYes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Tool result
401Error
404Error
POST/v1/phone/webhooks/elevenlabs

Post-call webhook (HMAC-signed) — completes the call and enqueues phone.postcall

Parameters

NameInTypeRequired
ElevenLabs-SignatureheaderstringYes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Received
401Error
404Error

Presets

GET/v1/presets

List presets available from the registry

Responses

StatusDescription
200Presets

Price Lists

GET/v1/price-lists

List this workspace's price lists

Responses

StatusDescription
200Price lists
POST/v1/price-lists

Import a price list from CSV (columns sku,description,unit,unit_price,category,labor_minutes); all-or-nothing with a row-level validation report

Parameters

NameInTypeRequired
namequerystringNo
currencyquerystringNo

Request body

Content typeSchema
multipart/form-dataobject
text/csvstring
application/octet-streamstring (binary)

Responses

StatusDescription
201Imported
400Error
413Error
DELETE/v1/price-lists/{id}

Delete a price list (cascades its items)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error
GET/v1/price-lists/{id}/items

Search a price list's items by a simple token index

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
qquerystringNo
limitqueryintegerNo

Responses

StatusDescription
200Price list items
404Error

Pricing Rules

GET/v1/pricing-rules

Get the effective pricing rules (a profile's own override, else the workspace default)

Parameters

NameInTypeRequired
profileIdquerystring (uuid)No

Responses

StatusDescription
200Pricing rules
404Error
PUT/v1/pricing-rules

Replace the workspace default pricing rules, or a per-profile override when ?profileId= is given

Parameters

NameInTypeRequired
profileIdquerystring (uuid)No

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Pricing rules
400Error

Projects

GET/v1/projects

List projects in the workspace, each with its member count

Responses

StatusDescription
200Projects
401Error
POST/v1/projects

Create a project (name + optional monthly spend cap)

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
401Error
GET/v1/projects/{id}

Get one project

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Project
404Error
PATCH/v1/projects/{id}

Update a project's name and/or spend cap

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Updated
400Error
404Error
DELETE/v1/projects/{id}

Delete a project (refuses the default project or one that still owns rows)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error
409Error
GET/v1/projects/{id}/members

List a project's members

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Members
404Error
POST/v1/projects/{id}/members

Add a member to a project (or update their role)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Added
400Error
404Error
DELETE/v1/projects/{id}/members/{userId}

Remove a member from a project

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
userIdpathstring (uuid)Yes

Responses

StatusDescription
204Removed
404Error

Public

GET/v1/public/apps/{slug}

Public app metadata: name, theme, template, access mode, locale, inputSpec, owner, caps, settings (e.g. quote_request's showPricesToEndUser), dataInfo

Parameters

NameInTypeRequired
slugpathstringYes

Responses

StatusDescription
200Public app
404Error
429Error
POST/v1/public/apps/{slug}/files

Upload a file for a public-app run (requires an app session)

Parameters

NameInTypeRequired
slugpathstringYes

Request body

Content typeSchema
multipart/form-dataobject
application/octet-streamstring (binary)

Responses

StatusDescription
201Stored
401Error
404Error
413Error
415Error
422Error
429Error
POST/v1/public/apps/{slug}/runs

Create a run in the app owner's workspace (requires an app session). For quote_request apps, input.fields.customer.{name,email} are required and validated, and at least one file (the drawing).

Parameters

NameInTypeRequired
slugpathstringYes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Queued
400Error
401Error
404Error
429Error
503Error
GET/v1/public/apps/{slug}/runs/{id}

Get a public-app run (only visible to the app session that created it). For quote_request apps, returns a reduced shape: status, stage (preparing|awaiting_approval|sent|failed), sentTo (masked email), and quote only when the app's settings.showPricesToEndUser is on.

Parameters

NameInTypeRequired
slugpathstringYes
idpathstring (uuid)Yes

Responses

StatusDescription
200Run
401Error
404Error
429Error
GET/v1/public/apps/{slug}/runs/{id}/events

Live public-app run events (SSE) — same semantics as the workspace-scoped run events endpoint

Parameters

NameInTypeRequired
slugpathstringYes
idpathstring (uuid)Yes
Last-Event-IDheaderstringNo

Responses

StatusDescription
200text/event-stream
401Error
404Error
429Error
GET/v1/public/apps/{slug}/runs/{id}/output

Get a public-app run's output (JSON, or CSV via ?format=csv)

Parameters

NameInTypeRequired
slugpathstringYes
idpathstring (uuid)Yes
formatqueryenum(csv)No

Responses

StatusDescription
200Output
401Error
404Error
409Error
429Error
POST/v1/public/apps/{slug}/session

Start a public-app session (public/link/password immediately; magic_link emails a token)

Parameters

NameInTypeRequired
slugpathstringYes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Session
202Magic link sent
400Error
401Error
404Error
429Error
POST/v1/public/apps/{slug}/session/verify

Redeem a magic-link token, starting a session

Parameters

NameInTypeRequired
slugpathstringYes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Session
400Error
401Error
404Error
429Error
GET/v1/public/apps/by-host

Resolve a verified custom domain's Host header to its app's slug

Parameters

NameInTypeRequired
hostquerystringYes

Responses

StatusDescription
200Slug
404Error
429Error

Runs

GET/v1/runs

List runs (paginated)

Parameters

NameInTypeRequired
cursorquerystringNo
limitqueryintegerNo
statusquerystringNo
agentIdquerystringNo

Responses

StatusDescription
200Runs
POST/v1/runs

Create (queue) a run

Parameters

NameInTypeRequired
Idempotency-KeyheaderstringNo

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Queued
400Error
402Error
GET/v1/runs/{id}

Get a run

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Run
404Error
POST/v1/runs/{id}/approve

Approve or reject a needs_approval run and resume it

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Resuming
404Error
409Error
GET/v1/runs/{id}/artifacts/{artifactId}

Download a run artifact

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
artifactIdpathstring (uuid)Yes

Responses

StatusDescription
200File bytes
404Error
POST/v1/runs/{id}/cancel

Cancel a queued/paused run

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
200Cancelled
404Error
409Error
GET/v1/runs/{id}/events

Live run events (SSE): replays stored events (from Last-Event-ID), then streams live; heartbeats; ends on terminal status

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
Last-Event-IDheaderstringNo

Responses

StatusDescription
200text/event-stream
404Error
POST/v1/runs/{id}/feedback

Submit feedback on a run

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
404Error
POST/v1/runs/{id}/input

Answer a needs_input run and resume it

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Resuming
404Error
409Error
GET/v1/runs/{id}/output

Get a run's final output (JSON, or CSV via ?format=csv)

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
formatqueryenum(csv)No

Responses

StatusDescription
200Output
404Error
409Error
POST/v1/runs/{id}/review

Accept or reject a needs_review run and resume it

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
202Resuming
404Error
409Error
GET/v1/runs/{id}/steps

Get a run's ordered steps

Parameters

NameInTypeRequired
idpathstring (uuid)Yes
includequeryenum(io)No

Responses

StatusDescription
200Steps
404Error

Stripe

POST/v1/stripe/webhook

Stripe webhook receiver (signature-verified)

Parameters

NameInTypeRequired
Stripe-SignatureheaderstringYes

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
200Handled
400Error
503Error

Tools

GET/v1/tools

List the tool catalogue (name, description, safety) an agent's config may enable, per docs/plan/16 §1

Responses

StatusDescription
200Tools
401Error

Usage

GET/v1/usage

Usage totals and current balance

Parameters

NameInTypeRequired
fromquerystring (date-time)No
toquerystring (date-time)No

Responses

StatusDescription
200Usage

Webhooks

GET/v1/webhooks

List webhook subscriptions

Responses

StatusDescription
200Webhooks
POST/v1/webhooks

Create a webhook subscription

Request body

Content typeSchema
application/jsonobject

Responses

StatusDescription
201Created
400Error
DELETE/v1/webhooks/{id}

Delete a webhook subscription

Parameters

NameInTypeRequired
idpathstring (uuid)Yes

Responses

StatusDescription
204Deleted
404Error