Assistants
Create, update, clone, delete, and manage AI voice assistants through the Talkturo REST API — configure prompts, voices, models, and telephony settings.
curl -X POST "https://api.talkturo.com/api/assistants" \
-H "Authorization: Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8" \
-H "Content-Type: application/json" \
-d '{
"accountSlug": "acme-sales",
"name": "Inbound Sales Assistant"
}'
{
"success": true,
"assistant": {
"id": "7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a",
"name": "Inbound Sales Assistant"
}
}
curl -X POST "https://api.talkturo.com/api/assistants" \
-H "Authorization: Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8" \
-H "Content-Type: application/json" \
-d '{
"accountSlug": "acme-sales",
"name": "Inbound Sales Assistant",
"templateId": "tmpl_sales_inbound_v1"
}'
const response = await fetch("https://api.talkturo.com/api/assistants", {
method: "POST",
headers: {
"Authorization": "Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8",
"Content-Type": "application/json"
},
body: JSON.stringify({
accountSlug: "acme-sales",
name: "Inbound Sales Assistant",
templateId: "tmpl_sales_inbound_v1"
})
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
"https://api.talkturo.com/api/assistants",
headers={
"Authorization": "Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8",
"Content-Type": "application/json"
},
json={
"accountSlug": "acme-sales",
"name": "Inbound Sales Assistant",
"templateId": "tmpl_sales_inbound_v1"
}
)
print(response.json())
{
"success": true,
"assistant": {
"id": "7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a",
"account_slug": "acme-sales",
"name": "Inbound Sales Assistant",
"type": "sales",
"created_at": "2025-02-18T14:22:31.114Z",
"updated_at": "2025-02-18T14:22:31.114Z"
}
}
curl -X PATCH "https://api.talkturo.com/api/assistants/7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a" \
-H "Authorization: Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8" \
-H "Content-Type: application/json" \
-d '{
"accountSlug": "acme-sales",
"name": "Inbound Sales Assistant v2",
"voice": "alloy",
"model": "gpt-4o-realtime"
}'
const response = await fetch(
"https://api.talkturo.com/api/assistants/7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a",
{
method: "PATCH",
headers: {
"Authorization": "Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8",
"Content-Type": "application/json"
},
body: JSON.stringify({
accountSlug: "acme-sales",
name: "Inbound Sales Assistant v2",
voice: "alloy",
model: "gpt-4o-realtime"
})
}
);
const data = await response.json();
console.log(data);
{
"success": true,
"assistant": {
"id": "7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a",
"name": "Inbound Sales Assistant v2",
"voice": "alloy",
"model": "gpt-4o-realtime",
"updated_at": "2025-02-18T14:31:09.027Z"
}
}
curl -X DELETE "https://api.talkturo.com/api/assistants/7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a" \
-H "Authorization: Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8"
{
"success": true,
"message": "Assistant deleted successfully"
}
curl -X POST "https://api.talkturo.com/api/assistants/7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a/clone" \
-H "Authorization: Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8"
const response = await fetch(
"https://api.talkturo.com/api/assistants/7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a/clone",
{
method: "POST",
headers: {
"Authorization": "Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8"
}
}
);
const data = await response.json();
console.log(data);
{
"success": true,
"assistant": {
"id": "0f3f8bc6-5e95-4344-88d2-8e5660ec9bf1",
"name": "Inbound Sales Assistant (Copy)",
"created_at": "2025-02-18T14:39:12.442Z",
"updated_at": "2025-02-18T14:39:12.442Z"
}
}
curl -X GET "https://api.talkturo.com/api/assistants/7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a/usage-stats?accountId=9a6e7d1c-3fd1-4af6-a3ab-b0e9d3ac4a71" \
-H "Authorization: Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8"
const response = await fetch(
"https://api.talkturo.com/api/assistants/7f5a4d6e-1d1b-4f76-9b03-2e9f48d09f6a/usage-stats?accountId=9a6e7d1c-3fd1-4af6-a3ab-b0e9d3ac4a71",
{
method: "GET",
headers: {
"Authorization": "Bearer tk_live_example_9xmk7q2r4f8n6p1s3d5h7j9k2m4q6w8"
}
}
);
const data = await response.json();
console.log(data);
{
"totalCalls": 148,
"totalMinutes": 912.0,
"avgDurationMinutes": 6.2,
"completedCallsWithDuration": 145,
"successRatePercent": 87.5,
"successEvaluatedCount": 130,
"timeline": {
"today": 5,
"last7Days": 45,
"last30Days": 148,
"last365Days": 148
},
"dailySeries": [
{ "date": "2025-02-18", "count": 6 },
{ "date": "2025-02-17", "count": 4 }
]
}
Manage assistants
Create assistants, update their configuration, clone existing setups, delete assistants you no longer need, and retrieve usage data for reporting or operational checks.
All assistant endpoints support dual authentication through withApiAuth. Authenticate with either a Talkturo API key or an authenticated session cookie.
Base path
All endpoints on this page are rooted at /api/assistants.
Authentication
Send your API key in the Authorization header as a bearer token.
If you use session-based auth from the Talkturo app, the browser sends the session cookie automatically. External integrations usually use API keys.
Create an assistant
Create a new assistant under an account by sending the account slug and assistant name. If you provide a template ID, Talkturo sets the assistant type from that template.
Endpoint
POST /api/assistants
Body parameters
The account slug that owns the assistant.
The assistant name.
An optional template identifier. When present, Talkturo sets the assistant type from the template.
Response fields
Returns true when the assistant is created successfully.
The newly created assistant record.
The assistant UUID.
The assistant name stored by Talkturo.
The assistant type derived from the template when templateId is provided.
Talkturo creates the assistant with default or null values for fields you do not provide at creation time. Update the assistant afterward to configure prompts, voices, models, or telephony settings.
Update an assistant
Update an existing assistant by assistant ID. The update endpoint accepts accountSlug and any assistant fields supported by the backend.
Endpoint
PATCH /api/assistants/{assistantId}
Path parameters
The assistant UUID.
Body parameters
The owning account slug. Include it when your integration scopes updates to a specific account context.
Any assistant fields accepted by the backend. Use this endpoint to update configuration such as prompts, voices, models, and telephony-related settings.
Response fields
Returns true when the assistant is updated successfully.
The updated assistant record.
If you send transcriptor_options, Talkturo validates those options against the selected provider and model before saving the update.
When the update succeeds, the response includes the saved assistant object. Use that object as the source of truth for the assistant's latest configuration.
Delete an assistant
Delete an assistant permanently by ID. Talkturo checks ownership before removing the record.
Endpoint
DELETE /api/assistants/{assistantId}
Path parameters
The assistant UUID to delete.
Response fields
Returns true when the assistant is deleted successfully.
A confirmation message. The value is Assistant deleted successfully.
Deleting an assistant is irreversible. Remove it only after you confirm that no active workflows, phone numbers, or operational processes still depend on it.
Clone an assistant
Clone an existing assistant to duplicate its configuration into a new assistant record. Use cloning when you want a starting point for a variant instead of rebuilding settings manually.
Endpoint
POST /api/assistants/{assistantId}/clone
Path parameters
The assistant UUID to clone.
Body parameters
The account slug for the workspace where the clone should be created. If omitted, the API key's associated account is used.
Response fields
Returns true when the assistant is cloned successfully.
The cloned assistant record.
The UUID assigned to the cloned assistant.
After cloning, update the new assistant if you need to change the name, prompts, or telephony configuration before using it in production.
Retrieve usage statistics
Fetch usage data for a single assistant. Use this endpoint for monitoring, dashboards, or account-level reporting workflows.
Endpoint
GET /api/assistants/{assistantId}/usage-stats
Path parameters
The assistant UUID whose usage statistics you want to retrieve.
Query parameters
The account UUID that owns the assistant. Returns 400 if omitted.
Response fields
Total number of calls handled by the assistant.
Total call duration in minutes, rounded to one decimal place.
Average call duration in minutes. Returns null when no calls have both a start and end time recorded.
Number of calls that have both started_at and ended_at timestamps, used to compute the average.
Percentage of calls that were successful, rounded to one decimal. Returns null when no calls could be scored.
Number of calls that could be evaluated for success scoring.
Call counts grouped by time range: today, last7Days, last30Days, and last365Days.
Array of daily call counts for the trailing 30 days. Each entry contains a date in YYYY-MM-DD UTC format and a count.
Tool configurations
Tool configs let you attach third-party tools such as Cal.com scheduling, Zapier, or custom webhooks to an assistant.
All tool configuration endpoints require session authentication.
| Method | Path | Purpose |
|---|---|---|
GET | /api/assistants/{assistantId}/tool-configs | List all enabled tool configs |
GET | /api/assistants/{assistantId}/tool-configs/{toolType} | Get configs for a specific tool type |
POST | /api/assistants/{assistantId}/tool-configs/{toolType} | Create or update a tool config |
DELETE | /api/assistants/{assistantId}/tool-configs/{toolType} | Delete tool config(s) |
Get tool configs by type
Use this endpoint to retrieve one config, or all configs, for a specific tool type.
Endpoint
GET /api/assistants/{assistantId}/tool-configs/{toolType}
Path parameters
The assistant UUID.
The tool type to retrieve.
cal_comzapiercal_com_schedulecal_com_get_bookingscal_com_cancelQuery parameters
Optional config UUID to retrieve a specific configuration.
Set to true to return all configs of this type.
Create or update a tool config
Use this endpoint to create a new tool config or update an existing one for the selected tool type.
Endpoint
POST /api/assistants/{assistantId}/tool-configs/{toolType}
Path parameters
The assistant UUID.
The tool type to create or update.
cal_comzapiercal_com_schedulecal_com_get_bookingscal_com_cancelQuery parameters
Optional config UUID. When provided, the request updates that existing configuration.
Body parameters
Free-form configuration for the tool.
Whether the tool config is enabled. Defaults to true.
Delete tool configs
Delete one config by ID, or remove all configs for a tool type.
Endpoint
DELETE /api/assistants/{assistantId}/tool-configs/{toolType}
Path parameters
The assistant UUID.
The tool type to delete.
cal_comzapiercal_com_schedulecal_com_get_bookingscal_com_cancelQuery parameters
Deletes a specific config when provided. Omit it to delete all configs of this type.
Billing estimate
Fetch an estimated credits-per-minute cost based on the assistant's provider settings and the active cost catalog.
Endpoint
GET /api/assistants/{assistantId}/billing/estimate
Path parameters
The assistant UUID.
Query parameters
Account UUID.
Override the LLM provider for live preview.
Override the LLM model for live preview.
Override the STT provider for live preview.
Override the STT model for live preview.
Override the TTS provider for live preview.
Override the TTS model for live preview.
Set to true or 1 to estimate realtime mode.
Response fields
Active cost catalog used for the estimate. Includes id and name.
Assumptions used to convert provider rates into per-minute estimates. Includes chars_per_minute, prompt_tokens_per_minute, and completion_tokens_per_minute.
Assistant provider and model information used for the estimate, including STT, LLM, and TTS settings.
Resolved provider rates used to build the estimate, including per-minute and per-1k rates.
Estimated credits-per-minute contribution from STT, TTS, LLM, and telephony components.
Total estimated credits per minute.
Knowledge base attachments
Manage knowledge-base files attached to an assistant. Attach existing files from the account library. These endpoints do not upload new files. See Knowledge Base for file upload and management.
| Method | Path | Purpose | Auth | Scope |
|---|---|---|---|---|
GET | /api/assistants/{assistantId}/knowledge-base | List attached knowledge-base files | API key or session | kb:read |
POST | /api/assistants/{assistantId}/knowledge-base | Attach an existing file | API key or session | kb:write |
DELETE | /api/assistants/{assistantId}/knowledge-base/{fileId} | Detach a file | API key or session | kb:write |
List knowledge-base files
Retrieve all knowledge-base files attached to the assistant. Results are ordered by attachment creation time, newest first.
Endpoint
GET /api/assistants/{assistantId}/knowledge-base
Path parameters
The assistant UUID.
Response fields
Returns true when the request succeeds.
Array of attached knowledge-base file objects. Each object includes id, filename, mime_type, size_bytes, status, status_error, char_count, chunk_count, created_at, and updated_at.
Attach a knowledge-base file
Attach an existing knowledge-base file from the account library to the assistant. The file must already exist and belong to the same account as the assistant. This operation is idempotent. Attaching a file that is already attached returns success without creating a duplicate.
Endpoint
POST /api/assistants/{assistantId}/knowledge-base
Path parameters
The assistant UUID.
Body parameters
UUID of the knowledge-base file to attach. The file must already exist in the account library.
Response fields
Returns true when the file is attached or was already attached.
Returns true when the file was already attached and no new attachment was created.
Detach a knowledge-base file
Remove a knowledge-base file from an assistant. This only removes the attachment. The underlying file remains in the account library. Detaching a non-existent attachment still returns success.
Endpoint
DELETE /api/assistants/{assistantId}/knowledge-base/{fileId}
Path parameters
The assistant UUID.
UUID of the knowledge-base file to detach.
Response fields
Returns true when the file is detached or was not attached.
Telephony management
Manage inbound and outbound telephony for an assistant. These endpoints provision and configure LiveKit trunks, assign phone numbers, and start test calls.
Most telephony management endpoints require session authentication and do not support API key authentication. Only the phone-numbers list endpoint supports API keys.
| Method | Path | Purpose | Auth |
|---|---|---|---|
GET | /api/assistants/{assistantId}/telephony/phone-numbers | List phone numbers assigned to the assistant | API key or session |
PATCH | /api/assistants/{assistantId}/telephony/phone-numbers | Assign phone numbers to the assistant | API key or session |
POST | /api/assistants/{assistantId}/telephony/inbound | Enable or disable inbound calling | Session only |
POST | /api/assistants/{assistantId}/telephony/outbound | Enable or disable outbound calling | Session only |
POST | /api/assistants/{assistantId}/telephony/settings | Update telephony settings (phone numbers, voicemail, compliance) | Session only |
POST | /api/assistants/{assistantId}/telephony/test-call | Start a test call | Session only |
GET | /api/assistants/{assistantId}/telephony/assign-phone-numbers | List phone numbers available for assignment | Session only |
GET | /api/assistants/{assistantId}/telephony/compliance-templates | List compliance templates | Session only |
List assigned phone numbers
Retrieve active, non-deleted phone numbers assigned to the assistant. Results include numbers that are unassigned or assigned to this assistant, sorted by phone number ascending.
Endpoint
GET /api/assistants/{assistantId}/telephony/phone-numbers
Path parameters
The assistant UUID.
Query parameters
Account slug to resolve the workspace.
Response fields
Returns true when the request succeeds.
Array of phone number objects. Each object includes id, phone_number, status, is_trial, trial_expires_at, assistant_id, provider, ownership_type, country_code, provider_account_id, provider_account_sid, and account label fields.
Assign phone numbers (PATCH)
Assign phone numbers to the assistant. All existing assignments are removed first, then the supplied IDs are assigned. LiveKit routing is resynchronized for affected assistants.
Endpoint
PATCH /api/assistants/{assistantId}/telephony/phone-numbers
Body parameters
Account slug for workspace resolution.
Array of phone number UUIDs to assign.
Response fields
Returns true when phone numbers are assigned successfully.
Confirmation message.
Enable or disable inbound calling
Toggle inbound calling for the assistant. Enabling requires at least one active, non-deleted phone number assigned to the assistant. Talkturo provisions or updates the LiveKit inbound trunk and dispatch rule when enabling, and removes them when disabling.
Endpoint
POST /api/assistants/{assistantId}/telephony/inbound
Body parameters
Account slug for workspace resolution.
Set to true to enable inbound calling, or false to disable it.
Response fields
Returns true when the operation succeeds.
Updated assistant telephony state including id, inbound_enabled, outbound_enabled, livekit_inbound_trunk_id, and livekit_dispatch_rule_id.
Enable or disable outbound calling
Toggle outbound calling for the assistant. Enabling requires at least one active assigned phone number. Talkturo provisions or updates the LiveKit outbound trunk when enabling, and removes it when disabling.
Endpoint
POST /api/assistants/{assistantId}/telephony/outbound
Body parameters
Account slug for workspace resolution.
Set to true to enable outbound calling, or false to disable it.
Response fields
Returns true when the operation succeeds.
Updated assistant telephony state including id, inbound_enabled, outbound_enabled, and livekit_outbound_trunk_id.
Update telephony settings
Configure phone number assignments, voicemail, compliance, and destination country in a single request. This endpoint handles LiveKit provisioning, voicemail detection, and compliance consent flows.
Endpoint
POST /api/assistants/{assistantId}/telephony/settings
Body parameters
Account slug for workspace resolution.
Array of phone number UUIDs to assign. IDs are deduplicated automatically.
Whether to enable inbound calling.
Whether to enable outbound calling.
Telnyx connection credential ID. An empty string is converted to null.
Destination country code for outbound routing. Set to null for automatic region routing. Valid values: ae, au, br, ch, de, fr, gb, il, in, jp, sa, sg, us, za.
Voicemail detection settings. Includes detectionEnabled (boolean), action (string, maximum 40 characters), and message (string, maximum 2000 characters).
Compliance consent settings. Includes enabled (boolean), templateId (string, UUID when non-null), briefingText (string, maximum 2000 characters), language (string, maximum 20 characters), requireAck (boolean), fallbackPolicy (retry, block, or continue), and ackTimeoutSeconds (integer, 3 to 60). When compliance.enabled is true, either templateId or non-blank briefingText is required.
Response fields
Returns true when telephony settings are updated successfully.
Updated assistant telephony state.
Number of active phone numbers assigned after the update.
Telephony settings are applied atomically. If LiveKit provisioning fails, the route rolls back all enabled flags and trunk IDs to their previous state.
Start a test call
Initiate a test call using the assistant's telephony configuration. Requires sufficient account credits and outbound calling to be enabled.
Endpoint
POST /api/assistants/{assistantId}/telephony/test-call
Body parameters
Account slug for workspace resolution.
The from phone number. Must be assigned to the assistant, active, and non-deleted.
The destination phone number. Normalized to E.164 format automatically.
Response fields
Returns true when the test call is initiated.
The LiveKit room name created for the test call.
The SIP call ID if the call was created successfully.
Confirmation message with the destination number.
Test calls require sufficient account credits. If the balance is too low, the API returns HTTP 402 with the current balance and minimum required credits.
List phone numbers available for assignment
Retrieve phone numbers that are available for assignment to the assistant, including unassigned numbers and numbers already assigned to this assistant.
Endpoint
GET /api/assistants/{assistantId}/telephony/assign-phone-numbers
Path parameters
The assistant UUID.
Query parameters
Account slug for workspace resolution.
Response fields
Returns true when the request succeeds.
Phone numbers available for assignment, including unassigned numbers and those already assigned to this assistant.
List compliance templates
Retrieve compliance templates available for the assistant's telephony configuration.
Endpoint
GET /api/assistants/{assistantId}/telephony/compliance-templates
Path parameters
The assistant UUID.
Response fields
Returns true when the request succeeds.
Compliance templates available for the assistant's account.
Create or refresh a test link
Generate or refresh a test link for an assistant. The test link provides a URL that opens a browser-based test call with the assistant.
Endpoint
POST /api/assistants/{assistantId}/test-link
Path parameters
The assistant UUID.
Response fields
Returns true when the test link is created or refreshed.
The test link token.
The full test link URL.
CRM group assignment
Assign a CRM group to an assistant. The CRM group determines which contacts the assistant can access during calls. The group must belong to the same account as the assistant.
Endpoint
POST /api/assistants/{assistantId}/crm-group
Path parameters
The assistant UUID.
Body parameters
Account slug for workspace resolution.
UUID of the CRM group to assign. The group must belong to the same account.
Response fields
Returns true when the CRM group is assigned successfully.
Updated assistant record including id and group_id.
Returned when the database assignment succeeds but LiveKit resynchronization fails. The assignment is still saved.
Webhook testing
Send a test webhook event to verify that the assistant's webhook configuration is working. The endpoint generates a synthetic call.ended event and queues it for delivery. It does not make a real call or synchronously invoke the webhook.
The assistant must have webhooks enabled with both a URL and secret configured before testing.
Endpoint
POST /api/assistants/{assistantId}/webhooks/test
Path parameters
The assistant UUID.
Response fields
Returns true when the test event is queued.
UUID of the queued webhook delivery.
Confirmation message. Value is Test event queued.
Prompt version history
Track and restore previous versions of an assistant's system prompt. Each time the prompt changes, Talkturo saves a versioned snapshot. Use these endpoints to browse the history, save a new version, restore an old prompt, or delete a version you no longer need.
All prompt-version endpoints use withApiAuth and support both API key and session cookie authentication. API-key requests use the account bound to the key. Session-token requests require accountSlug in the query string. Cookie-session requests require teamId or accountSlug in the query string or request body.
| Method | Path | Purpose |
|---|---|---|
GET | /api/assistants/{assistantId}/prompt-versions | List prompt versions |
POST | /api/assistants/{assistantId}/prompt-versions | Save the current prompt as a new version |
DELETE | /api/assistants/{assistantId}/prompt-versions/{versionId} | Delete a prompt version |
POST | /api/assistants/{assistantId}/prompt-versions/{versionId}/restore | Restore a previous prompt version |
List prompt versions
Retrieve a paginated list of prompt versions, newest first.
Endpoint
GET /api/assistants/{assistantId}/prompt-versions
Path parameters
The assistant UUID.
Query parameters
Maximum number of versions to return. Clamped to the range 1 through 50. Defaults to 10.
Return versions with a version number less than this value. Use this for cursor-based pagination.
Account slug. Required for bearer session-token authentication.
Team ID. Required for cookie-session authentication when accountSlug is not provided.
Response fields
Prompt versions, newest first. Each version includes id, assistant_id, version, system_prompt, created_by, created_at, last_used_at, and author_name.
UUID of the currently active prompt version, or null when no version is active.
Indicates whether more versions are available beyond the current page.
Save a prompt version
Save the assistant's current system prompt as a new version. If the prompt has not changed since the last version, the endpoint returns unchanged: true and does not create a new version.
Endpoint
POST /api/assistants/{assistantId}/prompt-versions
Body parameters
The prompt to save. If omitted, the assistant's current system_prompt is snapshotted.
Response fields
Returns true when the version is saved.
Returns true when the prompt matches the current version and no new version was created.
The saved or current prompt version, including id, assistant_id, version, and system_prompt.
An empty prompt cannot be saved as a version. The endpoint returns 400 with the error Cannot save an empty AI Script as a version.
Delete a prompt version
Delete a prompt version by ID. The currently active version cannot be deleted.
Endpoint
DELETE /api/assistants/{assistantId}/prompt-versions/{versionId}
Path parameters
The assistant UUID.
The prompt version UUID to delete.
Response fields
Returns true when the version is deleted.
Deleting the currently active version returns 409 with the error Cannot delete the version the assistant is using.
Restore a prompt version
Restore a previous prompt version by copying its system_prompt onto the assistant. This updates the assistant's current prompt and version pointer but does not create a new version.
Endpoint
POST /api/assistants/{assistantId}/prompt-versions/{versionId}/restore
Path parameters
The assistant UUID.
The prompt version UUID to restore.
Response fields
Returns true when the prompt is restored.
The restored system prompt text.
UUID of the restored version, now the active version.
Version number of the restored version.
Workflow tool attachment
Attach a published TurboFlow workflow to an assistant as a callable tool. The assistant can invoke the workflow during calls. The workflow's name, description, and parameters are resolved from the published flow version at call time.
Endpoint
POST /api/assistants/{assistantId}/tools/workflow
Path parameters
The assistant UUID.
Body parameters
UUID of the published workflow to attach.
Response fields
The inserted assistant_tool_configs row including id, assistant_id, account_id, tool_type (set to workflow), config (containing flow_id), and is_enabled.
Attaching the same workflow twice to the same assistant returns HTTP 409 with error workflow_already_attached.
Detach a workflow tool
Remove a workflow tool from an assistant by configuration ID.
Endpoint
DELETE /api/assistants/{assistantId}/tools/workflow?config_id={configId}
Query parameters
The tool configuration UUID to remove.
Response fields
Returns true when the workflow tool is detached.
Common response shape
All mutation endpoints on this page return a top-level success field. Depending on the operation, the response also includes either an assistant object or a message.
Success fields
Indicates whether the request completed successfully.
Returned by the create, update, and clone endpoints.
Returned by the delete endpoint.
Endpoint summary
| Method | Path | Purpose |
|---|---|---|
POST | /api/assistants | Create an assistant |
PATCH | /api/assistants/{assistantId} | Update an assistant |
DELETE | /api/assistants/{assistantId} | Delete an assistant |
POST | /api/assistants/{assistantId}/clone | Clone an assistant |
GET | /api/assistants/{assistantId}/usage-stats | Retrieve usage statistics |
GET | /api/assistants/{assistantId}/tool-configs | List tool configurations |
GET | /api/assistants/{assistantId}/tool-configs/{toolType} | Get a specific tool configuration |
POST | /api/assistants/{assistantId}/tool-configs/{toolType} | Create or update a tool configuration |
DELETE | /api/assistants/{assistantId}/tool-configs/{toolType} | Delete tool configuration(s) |
GET | /api/assistants/{assistantId}/billing/estimate | Estimate credits per minute |
GET | /api/assistants/{assistantId}/knowledge-base | List attached knowledge-base files |
POST | /api/assistants/{assistantId}/knowledge-base | Attach a knowledge-base file |
DELETE | /api/assistants/{assistantId}/knowledge-base/{fileId} | Detach a knowledge-base file |
GET | /api/assistants/{assistantId}/telephony/phone-numbers | List assigned phone numbers |
PATCH | /api/assistants/{assistantId}/telephony/phone-numbers | Assign phone numbers |
POST | /api/assistants/{assistantId}/telephony/inbound | Enable or disable inbound calling |
POST | /api/assistants/{assistantId}/telephony/outbound | Enable or disable outbound calling |
POST | /api/assistants/{assistantId}/telephony/settings | Update telephony settings |
POST | /api/assistants/{assistantId}/telephony/test-call | Start a test call |
GET | /api/assistants/{assistantId}/telephony/assign-phone-numbers | List phone numbers available for assignment |
GET | /api/assistants/{assistantId}/telephony/compliance-templates | List compliance templates |
POST | /api/assistants/{assistantId}/test-link | Create or refresh a test link |
POST | /api/assistants/{assistantId}/crm-group | Assign a CRM group |
POST | /api/assistants/{assistantId}/webhooks/test | Queue a test webhook event |
GET | /api/assistants/{assistantId}/prompt-versions | List prompt versions |
POST | /api/assistants/{assistantId}/prompt-versions | Save a prompt version |
DELETE | /api/assistants/{assistantId}/prompt-versions/{versionId} | Delete a prompt version |
POST | /api/assistants/{assistantId}/prompt-versions/{versionId}/restore | Restore a prompt version |
POST | /api/assistants/{assistantId}/tools/workflow | Attach a workflow tool |
DELETE | /api/assistants/{assistantId}/tools/workflow | Detach a workflow tool |