Schemas
The 63 objects the API accepts and returns. *Resource shapes are what you receive; Store*/Update* shapes are what you send. An Update* schema has the same fields as its Store* counterpart with nothing required — a PATCH changes only what it names.
ApiKeyResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
type | string | yes | |
display | string | yes | |
public_key | string | null | yes | |
scopes | object | yes | |
allowed_origins | object | yes | |
allowed_assistant_ids | object | yes | |
allowed_ips | object | yes | |
expires_at | string | null | yes | |
last_used_at | string | null | yes | |
last_used_ip | string | null | yes | |
revoked_at | string | null | yes | |
rotated_from_id | string | null | yes | |
usable | boolean | yes | |
created_at | string | null | yes |
AssistantFirstMessageMode
String enum. Accepted values:
assistant_speaks_first · assistant_speaks_first_with_model_generated_message · assistant_waits_for_user
AssistantMode
§29. A realtime (speech-to-speech) assistant has no separate transcriber or voice stage, so the builder hides those tabs and the resolver omits them.
String enum. Accepted values:
pipeline · realtime
AssistantResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
description | string | null | yes | |
status | string | yes | |
is_published | boolean | yes | |
version | integer | yes | |
current_version_id | string | null | yes | |
published_version_id | string | null | yes | |
has_unpublished_changes | boolean | yes | |
mode | string | yes | |
language | string | null | yes | |
additional_languages | object | yes | |
first_message | string | null | yes | |
first_message_mode | string | null | yes | |
system_prompt | string | null | yes | |
silence_timeout_seconds | integer | yes | |
max_duration_seconds | integer | yes | |
template_strictness | string | null | yes | |
transcriber | object | null | yes | |
model | object | null | yes | |
voice | object | null | yes | |
speech_to_speech_model | object | null | yes | |
start_speaking_plan | object | null | yes | |
stop_speaking_plan | object | null | yes | |
artifact_plan | object | null | yes | |
analysis_plan | object | null | yes | |
observability_plan | object | null | yes | |
message_plan | object | null | yes | |
keypad_input_plan | object | null | yes | |
recording_consent_plan | object | null | yes | |
voicemail_detection_plan | object | null | yes | |
transfer_plan | object | null | yes | |
compliance_plan | object | null | yes | |
background_sound | object | null | yes | |
background_speech_denoising | object | null | yes | |
end_call_phrases | object | yes | |
idle_messages | object | yes | |
background_messages | object | yes | |
pronunciations | object | yes | |
custom_keywords | object | yes | |
voice_formatting | object | null | yes | |
server | object | null | yes | |
hooks | object | null | yes | |
fallbacks | object | null | yes | |
variables | object | yes | |
variable_values | object | yes | |
knowledge_only | boolean | yes | |
knowledge_only_plan | object | null | yes | |
metadata | object | yes | |
tools | ToolAttachmentResource[] | — | |
knowledge_bases | KnowledgeBaseResource[] | — | |
created_at | string | null | yes | |
updated_at | string | null | yes | |
last_published_at | string | null | yes |
AssistantTemplateStrictness
§128. An undefined variable silently rendering as an empty string is how a prompt becomes "Hello , your appointment on is confirmed" in production. The tenant chooses which failure they prefer. | | |---| | lenient <br/> Render an empty string. Fast, and wrong quietly. | | warn <br/> Render the placeholder untouched and log a warning — the default. | | strict <br/> Throw. The call setup fails loudly instead of shipping a broken prompt. |
String enum. Accepted values:
lenient · warn · strict
AssistantVersionResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
assistant_id | string | yes | |
version | integer | yes | |
label | any | yes | |
change_summary | string | null | yes | |
config_hash | string | yes | |
config | object | — | The full snapshot is large; it is returned only when the caller asked for this specific version, not in a listing. |
tool_refs | object | yes | |
knowledge_base_refs | object | yes | |
published_at | string | null | yes |
CustomerResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
display_name | string | null | yes | |
name | string | null | yes | |
first_name | string | null | yes | |
last_name | string | null | yes | |
company | string | null | yes | |
locale | string | null | yes | |
timezone | string | null | yes | |
source | string | yes | §126: which system owns this record. |
external_id | string | null | yes | |
externally_owned | boolean | yes | |
do_not_contact | boolean | yes | |
conversation_count | integer | yes | |
first_seen_at | string | null | yes | |
last_seen_at | string | null | yes | |
merged_into_customer_id | string | null | yes | |
metadata | object | null | yes | |
notes | string | null | yes | |
created_at | string | null | yes | |
identifiers | object[] | — | |
attributes | string | integer | number | boolean | object[] | — | |
conversations | object[] | — |
InboundRoute
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
name | string | yes | |
description | string | null | yes | |
enabled | boolean | yes | |
priority | integer | yes | |
phone_number_id | string | null | yes | |
sip_trunk_id | string | null | yes | |
did_pattern | string | null | yes | |
did_match_type | string | yes | |
caller_pattern | string | null | yes | |
caller_match_type | string | yes | |
source_ip_acl | object | null | yes | |
time_condition_id | string | null | yes | |
destination_type | assistant · squad · queue · ivr · ring_group · extension … | yes | Where an inbound call goes once the tenant has been resolved (§10, §66). Deliberately a string enum plus a nullable ULID rather than a real polymorphic relation: the target tables (assistants, queues, ivrs, ring_groups, extensions) are owned by four different agents and land in four different migration ranges, so a hard foreign key here would force a build order that does not exist. |
destination_id | string | null | yes | |
destination_value | string | null | yes | |
fallback_destination_type | assistant · squad · queue · ivr · ring_group · extension … | null | yes | |
fallback_destination_id | string | null | yes | |
fallback_destination_value | string | null | yes | |
recording_mode | disabled · mono · dual_channel · inherit | yes | §51. dual_channel is what makes speaker-attributed transcripts and accurate talk-over metrics possible, so it is preferred wherever the carrier offers it. |
ring_timeout_seconds | integer | yes | |
screen_caller | boolean | yes | |
set_variables | object | null | yes | |
metadata | object | null | yes | |
created_at | string | null | yes | date-time |
updated_at | string | null | yes | date-time |
deleted_at | string | null | yes | date-time |
IntegrationConnectionResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
integration | string | yes | |
name | string | yes | |
status | string | yes | |
active | boolean | yes | |
config | object | null | yes | Config is non-secret by construction; secrets live in the credential row. |
granted_capabilities | object | yes | |
auth | oauth2 · api_key · none | yes | |
connected_at | string | null | yes | |
last_tested_at | string | null | yes | |
last_test_status | string | null | yes | |
last_synced_at | string | null | yes | |
last_error | string | null | yes | |
created_at | string | null | yes |
KnowledgeBaseResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
description | string | null | yes | |
provider | string | null | yes | |
namespace | string | null | yes | |
embedding | object | yes | |
embedding.provider | string | yes | |
embedding.model | string | yes | |
embedding.dimensions | integer | yes | |
chunk_size | integer | yes | |
chunk_overlap | integer | yes | |
retrieval | object | yes | |
custom_provider | object | null | yes | |
knowledge_only | boolean | yes | |
knowledge_only_plan | object | null | yes | |
status | string | yes | |
document_count | integer | yes | |
chunk_count | integer | yes | |
total_bytes | integer | yes | |
metadata | object | yes | |
documents | KnowledgeDocumentResource[] | — | |
created_at | string | null | yes | |
updated_at | string | null | yes |
KnowledgeDocumentResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
knowledge_base_id | string | yes | |
title | string | yes | |
source_type | string | null | yes | |
source_url | string | null | yes | |
mime_type | string | null | yes | |
extension | string | null | yes | |
size_bytes | integer | yes | |
status | string | null | yes | |
progress | integer | yes | |
failure_code | string | null | yes | |
failure_reason | string | null | yes | |
extracted_chars | integer | yes | |
chunk_count | integer | yes | |
token_count | integer | yes | |
language | string | null | yes | |
metadata | object | yes | |
ingested_at | string | null | yes | |
created_at | string | null | yes |
KnowledgeProvider
§41. pgvector is the only one implemented; the rest exist so the retriever interface is shaped for them and the UI can say "coming soon" honestly instead of silently doing nothing (§188).
String enum. Accepted values:
pgvector · custom · qdrant · pinecone · weaviate
KnowledgeQueryRequest
| Field | Type | Required | Notes |
|---|---|---|---|
query | string | yes | max 4000 chars. min 1 chars |
top_k | integer | null | — | min 1. max 50 |
threshold | number | null | — | min 0. max 1 |
namespace | string | null | — | max 255 chars |
metadata_filters | string[] | null | — |
McpCachedToolResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
mcp_server_id | string | yes | |
name | string | yes | |
title | string | null | yes | |
description | string | null | yes | |
input_schema | object | null | yes | |
output_schema | object | null | yes | |
annotations | object | yes | |
risk_level | string | null | yes | |
requires_confirmation | boolean | yes | |
enabled | boolean | yes | |
disabled_reason | string | null | yes | |
discovered_at | string | null | yes | |
expires_at | string | null | yes |
McpConfirmationPolicy
§37. Optional confirmation before a tool call actually executes.
String enum. Accepted values:
never · destructive · always
McpRiskLevel
§37. Ordered by blast radius — atLeast() is what the confirmation policy and the per-organization block list are expressed in.
String enum. Accepted values:
read · write · destructive · financial · privileged
McpServerResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
description | string | null | yes | |
url | string | null | yes | |
transport | string | null | yes | |
auth_type | string | yes | |
headers | object | yes | |
secret_keys | object | yes | |
provider_credential_id | string | null | yes | |
oauth_connection_id | string | null | yes | |
tool_policy | string | null | yes | |
allowed_tools | object | yes | |
denied_tools | object | yes | |
tool_risk_overrides | object | yes | |
blocked_risk_levels | object | yes | |
default_risk_level | string | null | yes | |
confirmation_policy | string | null | yes | |
timeout_seconds | integer | yes | |
cache_ttl_seconds | integer | yes | |
active | boolean | yes | |
status | string | null | yes | |
status_message | string | null | yes | |
protocol_version | string | null | yes | |
server_info | object | null | yes | |
capabilities | object | null | yes | |
tool_count | integer | yes | |
last_discovery_at | string | null | yes | |
last_health_check_at | string | null | yes | |
tools | McpCachedToolResource[] | — | |
created_at | string | null | yes |
McpToolPolicy
§37.
String enum. Accepted values:
allow_all · allow_selected · deny_selected
McpTransport
String enum. Accepted values:
streamable_http · sse · stdio
OutboundRoute
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
name | string | yes | |
description | string | null | yes | |
enabled | boolean | yes | |
priority | integer | yes | |
destination_pattern | string | null | yes | |
match_type | string | yes | |
countries | object | null | yes | |
min_digits | integer | null | yes | |
max_digits | integer | null | yes | |
emergency | boolean | yes | |
sip_trunk_id | string | null | yes | |
phone_number_id | string | null | yes | |
failover_sip_trunk_id | string | null | yes | |
strip_digits | integer | yes | |
prepend_digits | string | null | yes | |
caller_id_number | string | null | yes | |
caller_id_name | string | null | yes | |
blocked | boolean | yes | |
block_reason | string | null | yes | |
max_call_seconds | integer | null | yes | |
rate_per_minute | string | null | yes | |
high_cost | boolean | yes | |
set_variables | object | null | yes | |
metadata | object | null | yes | |
created_at | string | null | yes | date-time |
updated_at | string | null | yes | date-time |
deleted_at | string | null | yes | date-time |
PhoneNumber
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
number | string | yes | |
friendly_name | string | null | yes | |
provider | twilio · telnyx · didww · plivo · zadarma · didlogic … | yes | §8.1. The telephony providers CallAgent can terminate or originate through. The value is what is stored in phone_numbers.provider, sip_trunks.provider and provider_credentials.provider — keep them stable, they are persisted. |
telephony_account_id | string | null | yes | |
provider_credential_id | string | null | yes | |
provider_number_sid | string | null | yes | |
provider_account_sid | string | null | yes | |
provider_metadata | object | null | yes | |
capabilities | object | null | yes | |
country | string | null | yes | |
region | string | null | yes | |
locality | string | null | yes | |
number_type | string | null | yes | |
address_requirement | string | null | yes | |
destination_type | assistant · squad · queue · ivr · ring_group · extension … | null | yes | |
destination_id | string | null | yes | |
destination_value | string | null | yes | |
fallback_destination_id | string | null | yes | |
fallback_destination_type | assistant · squad · queue · ivr · ring_group · extension … | null | yes | |
assistant_id | string | null | yes | |
squad_id | string | null | yes | |
hook_enabled | boolean | yes | |
hook_url | string | null | yes | |
hook_timeout_ms | integer | yes | |
hook_headers | object | null | yes | |
hook_fallback | string | yes | |
hook_last_success_at | string | null | yes | date-time |
hook_last_failure_at | string | null | yes | date-time |
hook_last_error | string | null | yes | |
outbound_enabled | boolean | yes | |
outbound_caller_id_number | string | null | yes | |
outbound_caller_id_name | string | null | yes | |
sip_trunk_id | string | null | yes | |
caller_id_policy_id | string | null | yes | |
sms_enabled | boolean | yes | |
sms_assistant_id | string | null | yes | |
sms_webhook_url | string | null | yes | |
messaging_service_sid | string | null | yes | |
recording_mode | disabled · mono · dual_channel · inherit | yes | §51. dual_channel is what makes speaker-attributed transcripts and accurate talk-over metrics possible, so it is preferred wherever the carrier offers it. |
recording_consent_required | boolean | yes | |
voice_webhook_url | string | null | yes | |
status_webhook_url | string | null | yes | |
webhooks_configured_at | string | null | yes | date-time |
webhooks_in_sync | boolean | yes | |
max_concurrent_calls | integer | null | yes | |
status | pending · active · suspended · released · error | yes | |
inbound_enabled | boolean | yes | |
imported_at | string | null | yes | date-time |
purchased_at | string | null | yes | date-time |
released_at | string | null | yes | date-time |
last_inbound_at | string | null | yes | date-time |
last_outbound_at | string | null | yes | date-time |
monthly_cost | string | null | yes | |
setup_cost | string | null | yes | |
currency | string | yes | |
notes | string | null | yes | |
settings | object | null | yes | |
metadata | object | null | yes | |
created_at | string | null | yes | date-time |
updated_at | string | null | yes | date-time |
deleted_at | string | null | yes | date-time |
phone_number_hook_id | string | null | yes |
PhoneNumberStatus
String enum. Accepted values:
pending · active · suspended · released · error
ProviderCredentialResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
class | string | yes | |
provider | string | yes | |
name | string | yes | |
description | string | null | yes | |
config | object | null | yes | |
secret_keys | object | yes | |
is_default | boolean | yes | |
active | boolean | yes | |
validation_status | string | yes | |
validated_at | string | null | yes | |
validation_error | string | null | yes | |
capabilities | object | null | yes | |
expires_at | string | null | yes | |
rotated_at | string | null | yes | |
created_at | string | null | yes |
SipAuthMode
String enum. Accepted values:
credentials · ip · both
SipDiagnostic
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
sip_trunk_id | string | null | yes | |
sip_trunk_gateway_id | string | null | yes | |
kind | string | yes | |
outcome | string | yes | |
response_code | integer | null | yes | |
response_reason | string | null | yes | |
latency_ms | integer | null | yes | |
target | string | null | yes | |
request_trace | string | null | yes | |
response_trace | string | null | yes | |
message | string | null | yes | |
context | object | null | yes | |
triggered_by_user_id | string | null | yes | |
created_at | string | yes | date-time |
SipDid
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
sip_trunk_id | string | yes | |
number | string | null | yes | |
pattern | string | null | yes | |
match_type | string | yes | |
priority | integer | yes | |
label | string | null | yes | |
country | string | null | yes | |
phone_number_id | string | null | yes | |
destination_type | assistant · squad · queue · ivr · ring_group · extension … | null | yes | |
destination_id | string | null | yes | |
destination_value | string | null | yes | |
enabled | boolean | yes | |
metadata | object | null | yes | |
created_at | string | null | yes | date-time |
updated_at | string | null | yes | date-time |
SipDtmfMode
§49. rfc2833 (a.k.a. RFC 4733) is the default because it survives transcoding; inband breaks under any lossy codec; info is a signalling-path fallback for carriers that strip telephone-event.
String enum. Accepted values:
rfc2833 · inband · info
SipLeadingPlus
§8.4 "leading plus behavior". Carriers disagree violently about whether an outbound Request-URI user should be +4917612345678, 4917612345678 or 004917612345678, and getting it wrong is the single most common reason a new trunk returns 404 on every call.
String enum. Accepted values:
keep · strip · add · international_prefix
SipSrtpPolicy
String enum. Accepted values:
disabled · optional · required
SipTransport
String enum. Accepted values:
udp · tcp · tls
SipTrunk
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
name | string | yes | |
slug | string | yes | |
description | string | null | yes | |
provider | twilio · telnyx · didww · plivo · zadarma · didlogic … | yes | §8.1. The telephony providers CallAgent can terminate or originate through. The value is what is stored in phone_numbers.provider, sip_trunks.provider and provider_credentials.provider — keep them stable, they are persisted. |
telephony_account_id | string | null | yes | |
provider_credential_id | string | null | yes | |
direction | inbound · outbound · both | yes | |
enabled | boolean | yes | |
auth_mode | credentials · ip · both | yes | |
username | string | null | yes | |
auth_username | string | null | yes | |
realm | string | null | yes | |
from_user | string | null | yes | |
from_domain | string | null | yes | |
proxy | string | null | yes | |
outbound_proxy | string | null | yes | |
contact_host | string | null | yes | |
register | boolean | yes | |
register_expiry_seconds | integer | yes | |
register_transport | udp · tcp · tls | null | yes | |
register_proxy | string | null | yes | |
register_on_startup | boolean | yes | |
retry_seconds | integer | yes | |
registered_at | string | null | yes | date-time |
registration_expires_at | string | null | yes | date-time |
transport | udp · tcp · tls | yes | |
srtp_policy | disabled · optional · required | yes | |
verify_tls_peer | boolean | yes | |
tls_sni | string | null | yes | |
tls_version | string | null | yes | |
codecs | object | null | yes | |
dtmf_mode | rfc2833 · inband · info | yes | §49. rfc2833 (a.k.a. RFC 4733) is the default because it survives transcoding; inband breaks under any lossy codec; info is a signalling-path fallback for carriers that strip telephone-event. |
dtmf_duration_ms | integer | yes | |
inter_digit_delay_ms | integer | yes | |
ptime_ms | integer | null | yes | |
bypass_media | boolean | yes | |
late_negotiation | boolean | yes | |
comfort_noise | boolean | yes | |
options_ping_enabled | boolean | yes | |
options_ping_seconds | integer | yes | |
keepalive_seconds | integer | yes | |
nat_keepalive | boolean | yes | |
status | unknown · up · down · registering · failed · disabled | yes | |
status_checked_at | string | null | yes | date-time |
last_response_code | integer | null | yes | |
last_latency_ms | integer | null | yes | |
last_error | string | null | yes | |
consecutive_failures | integer | yes | |
inbound_source_acl | object | null | yes | |
inbound_require_acl | boolean | yes | |
inbound_did_source | string | yes | |
inbound_did_header | string | null | yes | |
inbound_caller_id_source | string | yes | |
inbound_strip_plus | boolean | yes | |
inbound_number_prefix | string | null | yes | |
inbound_strip_digits | integer | yes | |
inbound_destination_type | assistant · squad · queue · ivr · ring_group · extension … | null | yes | |
inbound_destination_id | string | null | yes | |
inbound_destination_value | string | null | yes | |
outbound_caller_id_number | string | null | yes | |
outbound_caller_id_name | string | null | yes | |
outbound_caller_id_privacy | boolean | yes | |
leading_plus | keep · strip · add · international_prefix | yes | §8.4 "leading plus behavior". Carriers disagree violently about whether an outbound Request-URI user should be +4917612345678, 4917612345678 or 004917612345678, and getting it wrong is the single most common reason a new trunk returns 404 on every call. |
international_prefix | string | yes | |
outbound_prefix | string | null | yes | |
outbound_strip_digits | integer | yes | |
sip_uri_template | string | null | yes | |
allow_sip_uri_dialing | boolean | yes | |
custom_sip_headers | object | null | yes | |
outbound_channel_variables | object | null | yes | |
supports_refer | boolean | yes | |
supports_sip_info | boolean | yes | |
supports_sip_message | boolean | yes | |
supports_sip_notify | boolean | yes | |
follow_302_redirects | boolean | yes | |
send_pai | boolean | yes | |
send_rpid | boolean | yes | |
send_diversion_on_transfer | boolean | yes | |
max_concurrent_calls | integer | null | yes | |
max_calls_per_second | integer | null | yes | |
sofia_profile | string | yes | |
gateway_name | string | null | yes | |
generated_config | string | null | yes | |
generated_config_hash | string | null | yes | |
config_applied_at | string | null | yes | date-time |
settings | object | null | yes | |
metadata | object | null | yes | |
created_at | string | null | yes | date-time |
updated_at | string | null | yes | date-time |
deleted_at | string | null | yes | date-time |
SipTrunkDirection
String enum. Accepted values:
inbound · outbound · both
SipTrunkGateway
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
sip_trunk_id | string | yes | |
name | string | yes | |
host | string | yes | |
port | integer | yes | |
transport | udp · tcp · tls | null | yes | |
priority | integer | yes | |
weight | integer | yes | |
enabled | boolean | yes | |
failover_only | boolean | yes | |
max_concurrent_calls | integer | null | yes | |
username | string | null | yes | |
realm | string | null | yes | |
outbound_proxy | string | null | yes | |
register | boolean | yes | |
status | unknown · up · down · registering · failed · disabled | yes | |
status_checked_at | string | null | yes | date-time |
last_response_code | integer | null | yes | |
last_latency_ms | integer | null | yes | |
last_error | string | null | yes | |
consecutive_failures | integer | yes | |
metadata | object | null | yes | |
created_at | string | null | yes | date-time |
updated_at | string | null | yes | date-time |
SipTrunkStatus
String enum. Accepted values:
unknown · up · down · registering · failed · disabled
SquadDestinationType
§45.
String enum. Accepted values:
assistant · squad · human_queue · dynamic · end
SquadHandoffContextMode
§46. How much of the conversation the receiving assistant inherits.
String enum. Accepted values:
all_messages · last_n · user_only · user_assistant · summary · none
SquadResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
description | string | null | yes | |
status | string | null | yes | |
is_published | boolean | yes | |
version | integer | yes | |
current_version_id | string | null | yes | |
entry_assistant_id | string | null | yes | |
handoff_context_mode | string | null | yes | |
handoff_context_size | integer | yes | |
handoff_extract_variables | object | yes | |
silent_handoff | boolean | yes | |
handoff_message | string | null | yes | |
metadata | object | yes | |
members | object[] | — | |
routes | object[] | — | |
created_at | string | null | yes | |
updated_at | string | null | yes |
SquadRouteTrigger
§45.
String enum. Accepted values:
tool · intent · variable · condition · always
StoreAssistantRequest
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | max 255 chars |
description | string | null | — | max 255 chars |
mode | pipeline · realtime | null | — | |
language | string | null | — | max 16 chars |
additional_languages | string[] | null | — | |
first_message | string | null | — | max 5000 chars |
first_message_mode | assistant_speaks_first · assistant_speaks_first_with_model_generated_message · assistant_waits_for_user | null | — | |
system_prompt | string | null | — | max 100000 chars |
template_strictness | lenient · warn · strict | null | — | |
silence_timeout_seconds | integer | null | — | min 1. max 600 |
max_duration_seconds | integer | null | — | min 10. max 3600 |
transcriber | object | — | |
transcriber.provider | string | null | — | max 48 chars |
model | object | — | |
model.provider | string | null | — | max 48 chars |
model.model | string | null | — | max 96 chars |
voice | object | — | |
voice.provider | string | null | — | max 48 chars |
speech_to_speech_model | string[] | null | — | |
start_speaking_plan | string[] | null | — | |
stop_speaking_plan | string[] | null | — | |
artifact_plan | string[] | null | — | |
analysis_plan | string[] | null | — | |
observability_plan | string[] | null | — | |
message_plan | string[] | null | — | |
keypad_input_plan | string[] | null | — | |
recording_consent_plan | string[] | null | — | |
voicemail_detection_plan | string[] | null | — | |
transfer_plan | string[] | null | — | |
compliance_plan | string[] | null | — | |
background_sound | string[] | null | — | |
background_speech_denoising | string[] | null | — | |
server | object | — | |
server.url | string | null | — | uri. max 2048 chars |
hooks | string[] | null | — | |
fallbacks | string[] | null | — | |
end_call_phrases | string[] | null | — | |
idle_messages | string[] | null | — | |
background_messages | string[] | null | — | |
pronunciations | string[] | null | — | |
custom_keywords | string[] | null | — | |
voice_formatting | string[] | null | — | |
variables | object[] | null | — | |
variable_values | string[] | null | — | |
knowledge_only | boolean | null | — | |
knowledge_only_plan | string[] | null | — | |
metadata | string[] | null | — | |
tools | object[] | null | — | Tenancy: exists is scoped by hand because the global Eloquent scope does not apply to the validator's own query. |
tool_ids | string[] | null | — | |
knowledge_base_ids | string[] | null | — | |
structured_output_ids | string[] | null | — |
StoreKnowledgeBaseRequest
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | max 255 chars |
description | string | null | — | max 255 chars |
provider | pgvector · custom · qdrant · pinecone · weaviate | null | — | |
namespace | string | null | — | max 255 chars |
embedding_provider | string | null | — | max 48 chars |
embedding_model | string | null | — | max 96 chars |
chunk_size | integer | null | — | min 64. max 4000 |
chunk_overlap | integer | null | — | min 0. max 2000 |
retrieval | object | — | |
retrieval.top_k | integer | null | — | min 1. max 50 |
retrieval.threshold | number | null | — | min 0. max 1 |
retrieval.vector_weight | number | null | — | min 0. max 1 |
retrieval.lexical_weight | number | null | — | min 0. max 1 |
retrieval.max_context_chars | integer | null | — | min 200. max 100000 |
retrieval.citations | inline · footnote · none · null | null | — | |
retrieval.metadata_filters | string[] | null | — | |
custom_provider | object | — | |
custom_provider.url | string | null | — | uri. max 2048 chars |
custom_provider.headers | string[] | null | — | |
custom_provider.timeout_seconds | integer | null | — | min 1. max 60 |
knowledge_only | boolean | null | — | |
knowledge_only_plan | string[] | null | — | |
metadata | string[] | null | — |
StoreKnowledgeDocumentRequest
| Field | Type | Required | Notes |
|---|---|---|---|
source_type | file · url · text | yes | |
title | string | null | — | max 255 chars |
file | string | — | The extension list is the one the extractor genuinely handles — accepting a PDF we cannot parse would be a silent ingestion of nothing (§188).. binary |
url | string | null | — | uri. max 2048 chars |
text | string | null | — | max 2000000 chars |
metadata | string[] | null | — |
StoreMcpServerRequest
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | max 255 chars |
description | string | null | — | max 255 chars |
transport | streamable_http · sse · stdio | yes | |
url | string | null | — | uri. max 2048 chars |
stdio_config | string[] | null | — | |
auth_type | none · static_headers · bearer · oauth · credential · null | null | — | |
headers | string[] | null | — | |
bearer_token | string | null | — | Secrets arrive as their own field and are encrypted before storage; they are never echoed back by the resource.. max 4096 chars |
provider_credential_id | string | null | — | |
oauth_connection_id | string | null | — | |
tool_policy | allow_all · allow_selected · deny_selected | null | — | |
allowed_tools | string[] | null | — | |
denied_tools | string[] | null | — | |
tool_risk_overrides | string[] | null | — | |
blocked_risk_levels | read · write · destructive · financial · privileged[] | null | — | |
default_risk_level | read · write · destructive · financial · privileged | null | — | |
confirmation_policy | never · destructive · always | null | — | |
timeout_seconds | integer | null | — | min 1. max 120 |
cache_ttl_seconds | integer | null | — | min 60. max 86400 |
active | boolean | null | — | |
metadata | string[] | null | — |
StoreSquadRequest
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | max 255 chars |
description | string | null | — | max 255 chars |
entry_assistant_id | string | null | — | |
handoff_context_mode | all_messages · last_n · user_only · user_assistant · summary · none | null | — | |
handoff_context_size | integer | null | — | min 1. max 200 |
handoff_extract_variables | string[] | null | — | |
silent_handoff | boolean | null | — | |
handoff_message | string | null | — | max 2000 chars |
metadata | string[] | null | — | |
members | object[] | null | — | |
routes | object[] | null | — |
StoreStructuredOutputRequest
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | max 255 chars |
key | string | null | — | max 96 chars |
description | string | null | — | max 2000 chars |
template | summary · sentiment · success · follow_up · lead_qualification · customer_fields … | null | — | |
target | call · chat · both · null | null | — | |
schema | string[] | yes | min 1 items |
prompt | string | null | — | max 20000 chars |
model | string[] | null | — | |
enabled | boolean | null | — | |
metadata | string[] | null | — |
StoreToolRequest
| Field | Type | Required | Notes |
|---|---|---|---|
name | string | yes | max 255 chars |
key | string | null | — | max 96 chars. pattern ^[a-zA-Z_][a-zA-Z0-9_]*$ |
description | string | yes | max 2000 chars |
type | api_request · function · transfer_call · handoff · end_call · sms … | yes | §32. The type drives everything downstream: which form fields the builder shows, which validator runs, and whether the Voice Gateway executes the tool in-process, over HTTP, or in an isolated sandbox worker. |
parameters_schema | string[] | null | — | |
config | string[] | null | — | |
messages | string[] | null | — | |
rejection_plan | string[] | null | — | |
server | string[] | null | — | |
is_async | boolean | null | — | |
timeout_seconds | integer | null | — | min 1. max 120 |
requires_confirmation | boolean | null | — | |
risk_level | read · write · destructive · financial · privileged | null | — | |
metadata | string[] | null | — |
StructuredOutputResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
key | string | yes | |
description | string | null | yes | |
template | string | null | yes | |
target | string | yes | |
schema | object | yes | |
prompt | string | null | yes | |
model | object | null | yes | |
status | string | null | yes | |
is_published | boolean | yes | |
version | integer | yes | |
current_version_id | string | null | yes | |
enabled | boolean | yes | |
metadata | object | yes | |
created_at | string | null | yes | |
updated_at | string | null | yes |
TelephonyAccount
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
organization_id | string | yes | |
provider | twilio · telnyx · didww · plivo · zadarma · didlogic … | yes | §8.1. The telephony providers CallAgent can terminate or originate through. The value is what is stored in phone_numbers.provider, sip_trunks.provider and provider_credentials.provider — keep them stable, they are persisted. |
name | string | yes | |
description | string | null | yes | |
provider_credential_id | string | null | yes | |
external_account_id | string | null | yes | |
external_account_label | string | null | yes | |
is_subaccount | boolean | yes | |
parent_external_account_id | string | null | yes | |
voice_webhook_url | string | null | yes | |
status_webhook_url | string | null | yes | |
sms_webhook_url | string | null | yes | |
is_default | boolean | yes | |
active | boolean | yes | |
health_status | string | yes | |
health_checked_at | string | null | yes | date-time |
health_message | string | null | yes | |
numbers_synced_at | string | null | yes | date-time |
numbers_count | integer | yes | |
capabilities | object | null | yes | |
settings | object | null | yes | |
metadata | object | null | yes | |
created_at | string | null | yes | date-time |
updated_at | string | null | yes | date-time |
deleted_at | string | null | yes | date-time |
TelephonyDestinationType
Where an inbound call goes once the tenant has been resolved (§10, §66). Deliberately a string enum plus a nullable ULID rather than a real polymorphic relation: the target tables (assistants, queues, ivrs, ring_groups, extensions) are owned by four different agents and land in four different migration ranges, so a hard foreign key here would force a build order that does not exist.
String enum. Accepted values:
assistant · squad · queue · ivr · ring_group · extension · voicemail · external · sip_uri · hook
TelephonyProviderId
§8.1. The telephony providers CallAgent can terminate or originate through. The value is what is stored in phone_numbers.provider, sip_trunks.provider and provider_credentials.provider — keep them stable, they are persisted.
String enum. Accepted values:
twilio · telnyx · didww · plivo · zadarma · didlogic · chime · byo_sip · custom_sip
TelephonyRecordingMode
§51. dual_channel is what makes speaker-attributed transcripts and accurate talk-over metrics possible, so it is preferred wherever the carrier offers it.
String enum. Accepted values:
disabled · mono · dual_channel · inherit
ToolAttachmentResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
name | string | yes | |
key | string | yes | |
type | string | null | yes | |
pin_mode | string | null | yes | |
tool_version_id | string | null | yes | |
alias | string | null | yes | |
enabled | boolean | yes | |
sort_order | integer | null | yes |
ToolPinMode
§109. "latest" resolves at publish time, not at call time — otherwise editing a tool would silently change the behaviour of an already-published assistant.
String enum. Accepted values:
latest · pinned
ToolResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
key | string | yes | |
description | string | null | yes | |
type | string | null | yes | |
status | string | null | yes | |
is_published | boolean | yes | |
version | integer | yes | |
current_version_id | string | null | yes | |
parameters_schema | object | null | yes | |
config | object | null | yes | |
messages | object | null | yes | |
rejection_plan | object | null | yes | |
server | object | null | yes | |
is_async | boolean | yes | |
timeout_seconds | integer | yes | |
requires_confirmation | boolean | yes | |
risk_level | string | null | yes | |
mcp_server_id | string | null | yes | |
mcp_tool_name | string | null | yes | |
metadata | object | yes | |
created_at | string | null | yes | |
updated_at | string | null | yes |
ToolType
§32. The type drives everything downstream: which form fields the builder shows, which validator runs, and whether the Voice Gateway executes the tool in-process, over HTTP, or in an isolated sandbox worker.
String enum. Accepted values:
api_request · function · transfer_call · handoff · end_call · sms · dtmf · voicemail · sip_request · query · knowledge_base · mcp · google_calendar_create_event · google_calendar_availability · google_sheets_append_row · slack_send_message · gohighlevel_availability · gohighlevel_event_create · gohighlevel_contact_create · gohighlevel_contact_get · bash · computer · text_editor · client_side · custom_provider
ToolVersionResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
tool_id | string | yes | |
version | integer | yes | |
name | string | yes | |
key | string | yes | |
type | string | null | yes | |
description | string | null | yes | |
parameters_schema | object | null | yes | |
config | object | null | yes | |
config_hash | string | yes | |
change_summary | string | null | yes | |
published_at | string | null | yes |
UpdateAssistantRequest
| Field | Type | Notes |
|---|---|---|
name | string | max 255 chars |
description | string | null | max 255 chars |
mode | pipeline · realtime | null | |
language | string | null | max 16 chars |
additional_languages | string[] | null | |
first_message | string | null | max 5000 chars |
first_message_mode | assistant_speaks_first · assistant_speaks_first_with_model_generated_message · assistant_waits_for_user | null | |
system_prompt | string | null | max 100000 chars |
template_strictness | lenient · warn · strict | null | |
silence_timeout_seconds | integer | null | min 1. max 600 |
max_duration_seconds | integer | null | min 10. max 3600 |
transcriber | object | |
transcriber.provider | string | null | max 48 chars |
model | object | |
model.provider | string | null | max 48 chars |
model.model | string | null | max 96 chars |
voice | object | |
voice.provider | string | null | max 48 chars |
speech_to_speech_model | string[] | null | |
start_speaking_plan | string[] | null | |
stop_speaking_plan | string[] | null | |
artifact_plan | string[] | null | |
analysis_plan | string[] | null | |
observability_plan | string[] | null | |
message_plan | string[] | null | |
keypad_input_plan | string[] | null | |
recording_consent_plan | string[] | null | |
voicemail_detection_plan | string[] | null | |
transfer_plan | string[] | null | |
compliance_plan | string[] | null | |
background_sound | string[] | null | |
background_speech_denoising | string[] | null | |
server | object | |
server.url | string | null | uri. max 2048 chars |
hooks | string[] | null | |
fallbacks | string[] | null | |
end_call_phrases | string[] | null | |
idle_messages | string[] | null | |
background_messages | string[] | null | |
pronunciations | string[] | null | |
custom_keywords | string[] | null | |
voice_formatting | string[] | null | |
variables | object[] | null | |
variable_values | string[] | null | |
knowledge_only | boolean | null | |
knowledge_only_plan | string[] | null | |
metadata | string[] | null | |
tools | object[] | null | Tenancy: exists is scoped by hand because the global Eloquent scope does not apply to the validator's own query. |
tool_ids | string[] | null | |
knowledge_base_ids | string[] | null | |
structured_output_ids | string[] | null |
UpdateKnowledgeBaseRequest
| Field | Type | Notes |
|---|---|---|
name | string | max 255 chars |
description | string | null | max 255 chars |
provider | pgvector · custom · qdrant · pinecone · weaviate | null | |
namespace | string | null | max 255 chars |
embedding_provider | string | null | max 48 chars |
embedding_model | string | null | max 96 chars |
chunk_size | integer | null | min 64. max 4000 |
chunk_overlap | integer | null | min 0. max 2000 |
retrieval | object | |
retrieval.top_k | integer | null | min 1. max 50 |
retrieval.threshold | number | null | min 0. max 1 |
retrieval.vector_weight | number | null | min 0. max 1 |
retrieval.lexical_weight | number | null | min 0. max 1 |
retrieval.max_context_chars | integer | null | min 200. max 100000 |
retrieval.citations | inline · footnote · none · null | null | |
retrieval.metadata_filters | string[] | null | |
custom_provider | object | |
custom_provider.url | string | null | uri. max 2048 chars |
custom_provider.headers | string[] | null | |
custom_provider.timeout_seconds | integer | null | min 1. max 60 |
knowledge_only | boolean | null | |
knowledge_only_plan | string[] | null | |
metadata | string[] | null |
UpdateMcpServerRequest
| Field | Type | Notes |
|---|---|---|
name | string | max 255 chars |
description | string | null | max 255 chars |
transport | streamable_http · sse · stdio | |
url | string | null | uri. max 2048 chars |
stdio_config | string[] | null | |
auth_type | none · static_headers · bearer · oauth · credential · null | null | |
headers | string[] | null | |
bearer_token | string | null | Secrets arrive as their own field and are encrypted before storage; they are never echoed back by the resource.. max 4096 chars |
provider_credential_id | string | null | |
oauth_connection_id | string | null | |
tool_policy | allow_all · allow_selected · deny_selected | null | |
allowed_tools | string[] | null | |
denied_tools | string[] | null | |
tool_risk_overrides | string[] | null | |
blocked_risk_levels | read · write · destructive · financial · privileged[] | null | |
default_risk_level | read · write · destructive · financial · privileged | null | |
confirmation_policy | never · destructive · always | null | |
timeout_seconds | integer | null | min 1. max 120 |
cache_ttl_seconds | integer | null | min 60. max 86400 |
active | boolean | null | |
metadata | string[] | null |
UpdateSquadRequest
| Field | Type | Notes |
|---|---|---|
name | string | max 255 chars |
description | string | null | max 255 chars |
entry_assistant_id | string | null | |
handoff_context_mode | all_messages · last_n · user_only · user_assistant · summary · none | null | |
handoff_context_size | integer | null | min 1. max 200 |
handoff_extract_variables | string[] | null | |
silent_handoff | boolean | null | |
handoff_message | string | null | max 2000 chars |
metadata | string[] | null | |
members | object[] | null | |
routes | object[] | null |
UpdateStructuredOutputRequest
| Field | Type | Notes |
|---|---|---|
name | string | max 255 chars |
key | string | null | max 96 chars |
description | string | null | max 2000 chars |
template | summary · sentiment · success · follow_up · lead_qualification · customer_fields … | null | |
target | call · chat · both · null | null | |
schema | string[] | |
prompt | string | null | max 20000 chars |
model | string[] | null | |
enabled | boolean | null | |
metadata | string[] | null |
UpdateToolRequest
| Field | Type | Notes |
|---|---|---|
name | string | max 255 chars |
key | string | null | max 96 chars. pattern ^[a-zA-Z_][a-zA-Z0-9_]*$ |
description | string | max 2000 chars |
type | api_request · function · transfer_call · handoff · end_call · sms … | §32. The type drives everything downstream: which form fields the builder shows, which validator runs, and whether the Voice Gateway executes the tool in-process, over HTTP, or in an isolated sandbox worker. |
parameters_schema | string[] | null | |
config | string[] | null | |
messages | string[] | null | |
rejection_plan | string[] | null | |
server | string[] | null | |
is_async | boolean | null | |
timeout_seconds | integer | null | min 1. max 120 |
requires_confirmation | boolean | null | |
risk_level | read · write · destructive · financial · privileged | null | |
metadata | string[] | null |
WebhookDeliveryResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
webhook_endpoint_id | string | yes | |
event_id | string | yes | |
event_type | string | yes | |
status | string | yes | |
attempts | integer | yes | |
max_attempts | integer | yes | |
response_status | integer | null | yes | |
duration_ms | integer | null | yes | |
error | string | null | yes | |
call_id | string | null | yes | |
assistant_id | string | null | yes | |
next_attempt_at | string | null | yes | |
delivered_at | string | null | yes | |
failed_at | string | null | yes | |
redelivery_of_id | string | null | yes | |
created_at | string | null | yes | |
payload | object | yes | The captured exchange is already redacted at write time; this is the §65 delivery log the customer inspects. |
request_headers | object | null | yes | |
response_headers | object | null | yes | |
response_body | string | null | yes | |
attempt_log | object[] | — |
WebhookEndpointResource
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | |
object | string | yes | |
name | string | yes | |
url | string | yes | |
description | string | null | yes | |
events | object | yes | |
assistant_ids | object | yes | |
headers | object | null | yes | |
active | boolean | yes | |
status | string | yes | |
consecutive_failures | integer | yes | |
max_attempts | integer | yes | |
timeout_seconds | integer | yes | |
api_version | string | yes | |
secret_rotated_at | string | null | yes | |
secret_overlap_until | string | null | yes | |
last_success_at | string | null | yes | |
last_failure_at | string | null | yes | |
disabled_reason | string | null | yes | |
created_at | string | null | yes | |
updated_at | string | null | yes |