Endpoints
| Method | Path | Description |
|---|---|---|
GET | /v1/agents | List agents |
POST | /v1/agents | Create an agent |
GET | /v1/agents/{agent_id} | Retrieve a single agent |
PUT / PATCH | /v1/agents/{agent_id} | Replace / partially update |
DELETE | /v1/agents/{agent_id} | Delete an agent |
POST | /v1/agents/{agent_id}/duplicate | Duplicate an agent |
POST | /v1/agents/{agent_id}/transfer | Copy or move an agent to another org |
GET | /v1/agents/{agent_id}/versions | List prior configuration revisions |
POST | /v1/agents/prompt-language-check | Detect the language of a prompt |
POST | /v1/agents/translate-prompt | Translate a prompt into another locale |
POST | /v1/agents/generate-acknowledgement-prompt | Auto-generate a Storm-mode acknowledgement prompt |
Agent object
| Field | Type | Description |
|---|---|---|
id | integer | Server-assigned agent id |
name | string | Human-readable name. 1–255 chars |
prompt | string | The system prompt that governs agent behavior |
voice | string | Voice id from GET /v1/voices — e.g. en-US-James1 |
product | string | Product tier. One of: spark, bolt, storm-base, storm-base-with-ack, storm-extra, storm-extra-with-ack |
thinking_level | string | base or extra. Derived from product for Storm tiers |
background_track | string | null | Ambient audio id to play during calls, or null for silence |
acknowledgement_prompt_mode | string | auto (we generate the ack prompt) or manual (you supply it) |
acknowledgement_prompt | string | Used when acknowledgement_prompt_mode="manual". Storm-tier only |
inbound_speak_order | string | Who talks first on inbound calls. agent_first or caller_first |
outbound_speak_order | string | Who talks first on outbound calls |
integrations | array | Linked Integration objects |
widget_enabled | boolean | Whether the agent is reachable via the embeddable web widget |
created_at, updated_at | timestamp | ISO 8601 UTC |
The underlying
Agent model also stores max_hold_seconds (per-agent
hold timeout) and tools (inline function-tool schemas). These are
written through create/update payloads and used by the call
runtime, but they are not currently included in GET responses — use
Integrations as the canonical
location for tool config.Product tiers at a glance
| Product | Latency | Reasoning | Acknowledgement |
|---|---|---|---|
spark | Lowest | Basic | — |
bolt | Low | Improved | — |
storm-base | Medium | Strong | — |
storm-base-with-ack | Medium | Strong | Automatic filler while thinking |
storm-extra | Higher | Deep | — |
storm-extra-with-ack | Higher | Deep | Automatic filler while thinking |
List agents
created_at descending.
Create an agent
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | 1–255 chars |
prompt | string | yes | System prompt |
voice | string | yes | Voice id from /v1/voices |
product | string | no | Defaults to spark |
thinking_level | string | no | Ignored for Storm tiers (derived from product) |
background_track | string | null | no | |
acknowledgement_prompt_mode | string | no | auto or manual. Only meaningful for Storm-with-ack products |
acknowledgement_prompt | string | no | Required if acknowledgement_prompt_mode="manual" |
inbound_speak_order | string | no | Defaults to agent_first |
outbound_speak_order | string | no | Defaults to caller_first |
max_hold_seconds | integer | null | no | Positive integer or null |
tools | array | no | Inline function-tool schemas |
integration_ids | array of UUID | no | Link reusable integrations by id |
widget_enabled | boolean | no | Defaults to true |
201 Created with the new Agent object.
Retrieve an agent
200 OK with an Agent object, or 404 if not found.
Update an agent
PATCH updates only the fields you include. PUT replaces the full
object — you must send every required field.
Optimistic concurrency
To safely make edits from a UI, includeif_updated_at with the last
updated_at you observed:
updated_at differs, the API returns 409 Conflict
with code: "conflict" so you can refresh and retry.
Returns 200 OK with the updated Agent object.
Delete an agent
204 No Content. Phone numbers that reference the deleted agent
have their inbound/outbound assignment cleared.
Duplicate an agent
Creates a new agent with the same core configuration in the same org. The duplicate copies: name (overridable), prompt, voice, product, thinking level, background track, acknowledgement prompt mode and content, widget enabled, and linked integrations. Speak-order,max_hold_seconds, and inline tools are not copied — if you
rely on those, re-apply them on the duplicate via PATCH.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | no | Defaults to "<original name> (copy)" |
201 Created with the new Agent object.
Transfer an agent to another org
Copy or move an agent to a different organization you’re also a member of.admin+ role is required on the target org for both modes, and for
the source org when mode="move".
| Field | Type | Required | Description |
|---|---|---|---|
target_org_id | integer | yes | Must differ from the source org id |
mode | string | yes | copy (keep source intact) or move (delete source after copy) |
name | string | no | Override the new agent’s name |
201 Created for copy / 200 OK for move:
Linked integrations are not transferred. The new agent starts with
an empty integration list.
Version history
EveryPUT, PATCH, or create operation records an
AgentConfigVersion snapshot so you can see (and eventually restore)
prior configurations. This endpoint lists recent revisions:
| Query param | Default | Description |
|---|---|---|
limit | 20 | Max results (1–100) |
Prompt helpers
These three endpoints are convenience wrappers that call the same underlying models we use in the dashboard. All three take and return JSON; none change any persisted resource.Detect prompt language
Response
Translate prompt
Response
Generate acknowledgement prompt
Produces a short “filler while thinking” phrase appropriate for Storm-with-ack products.Response
Voices
List the supported voice ids:{id, name, locale, tier, sample_url} objects. The
id is what you set on an agent’s voice field.
Related
Phone Numbers
Assign agents to inbound/outbound directions on phone numbers.
Integrations
Reusable HTTP integrations an agent can call mid-conversation.
Outbound Calls
Trigger an outbound call using a configured agent.
Calls
Inspect call history once your agent is running.