Skip to main content
An agent is the configuration that drives every ThunderPhone call — the product tier, the voice, the languages, the system prompt, the acknowledgement behavior, silence/voicemail handling, the attached tools and knowledge, and whether the agent is reachable from the web widget. Phone numbers assign an inbound and/or outbound agent; outbound calls and mic sessions can target an agent directly. Agents use a draft / deploy workflow: edits made via PATCH/PUT are saved as a draft and do not affect production calls until you POST /deploy. Test calls and mic sessions run against the draft (when one exists) so you can try changes before shipping them.

Endpoints

Related agent-scoped surfaces documented on their own pages: test scenarios & suites, split testing (A/B variants).

Agent object

Deployed fields

Draft fields

Every configurable field above has a draft_* mirror in the response (draft_name, draft_prompt, draft_voice, draft_primary_language, draft_additional_languages, draft_product, draft_background_track, draft_thinking_level, draft_acknowledgement_prompt_mode, draft_acknowledgement_prompt, draft_acknowledgement_feedback_mode, draft_inbound_speak_order, draft_outbound_speak_order, draft_voicemail_action, draft_voicemail_message, draft_silence_interval_seconds, draft_silence_max_checkins, draft_silence_checkins_enabled, draft_connect_tone_enabled, draft_audio_context_mode, draft_watchdog_enabled, draft_widget_enabled, draft_split_testing_enabled), plus draft id lists for attachments (draft_integration_ids, draft_knowledge_base_ids, draft_knowledge_document_ids, draft_mcp_server_ids) and two read-only markers: Production call paths (inbound, outbound, widget) always read the deployed fields. Mic sessions and simulations read the draft with fallback to the deployed value.

Product tiers at a glance


List agents

Returns an array of Agent objects, sorted by created_at descending.

Create an agent

Returns 201 Created with the new Agent object. A create deploys immediately (there is no draft yet) and records revision 1 in the version history.
max_hold_seconds (outbound hold timeout, default 900 s) and inline tools exist on the underlying model but are not writable through this API — tool configuration is managed via Integrations, App connections, and MCP servers.

Retrieve an agent

Returns 200 OK with an Agent object, or 404 if not found.

Update an agent (writes the draft)

PATCH and PUT do not modify the deployed configuration. Every field you send is staged into the corresponding draft_* column; production calls keep using the deployed values until you deploy. Sending a value identical to the deployed value clears that field’s draft (so manually reverting an edit removes the pending change).
Accepts the same fields as create, including the integration_ids / knowledge_base_ids / knowledge_document_ids / mcp_server_ids lists (staged as draft attachment lists). Returns 200 OK with the Agent object — inspect the draft_* fields and has_draft to see what is pending.

Optimistic concurrency

To safely make edits from a UI, include if_updated_at (or updated_at) with the last updated_at you observed:
If the server-side updated_at differs, the API returns 409 Conflict with {"detail": "Agent was modified by another user. Please refresh and try again."} so you can refresh and retry.

Deploy the draft

Promotes every pending draft_* value to the deployed configuration, clears the draft, and records a new revision in the version history.
Returns 200 OK with the updated Agent object (has_draft is now false). Deploying with no pending draft is a no-op that still returns 200 with the current agent.

Discard the draft

Clears every pending draft field, reverting the editor state to the deployed configuration.
Returns 200 OK with the Agent object.

Delete an agent

Returns 204 No Content. Phone numbers that reference the deleted agent have their inbound/outbound assignment cleared.

Duplicate an agent

Creates a new agent in the same org with the same deployed configuration: name (overridable), prompt, voice, languages, product, thinking level, background track, acknowledgement settings, speak orders, voicemail settings, silence settings, connect tone, audio context mode, watchdog, widget flag, and the attached integrations, knowledge bases/documents, and MCP servers. Pending drafts and split-testing variants are not copied.
Returns 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. For mode="move", admin+ role is required on both orgs.
Returns 201 Created for copy / 200 OK for move:
Org-scoped attachments (integrations, knowledge, MCP servers) cannot cross the org boundary — the transferred agent keeps only attachments that already belong to the target org, which in practice means it starts with empty attachment lists.

Version history

Deploys (and creates/duplicates/transfers) record an AgentConfigVersion snapshot of the deployed configuration. Draft autosaves are not versioned — the history reflects what actually shipped to production.
Response:

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 voices and languages — or browse the voice gallery with playable samples:
Response
The name is what you set on an agent’s voice field.

Phone Numbers

Assign agents to inbound/outbound directions on phone numbers.

Knowledge bases

Ground the agent in your documents.

Split testing

A/B test prompt and voice variants on live traffic.

Test scenarios

Regression-test the agent before deploying.