API reference

LLM

BYOK Anthropic/OpenAI route + completion endpoint.

Upsert route

PUT/v1/llm-routes

Request body

FieldTypeNotes
phone_number_idstring
len 1..∞
providerrequired"anthropic" | "openai"
modelrequiredstring
len 1..∞
api_keyrequiredstring
len 10..∞
system_promptrequiredstring
len 40..∞
max_tokensinteger
range 1..4096
temperaturenumber
range 0..2
daily_cost_cap_brlstring
pattern: ^\d+(\.\d{1,2})?$
handoff_phrasesstring[]
blocked_topicsobject[]
blocked_topic_fallback_responsestring
len 1..1000
max_context_messagesinteger
range 1..100
max_context_age_secondsinteger | null
memory_persistence"disabled" | "opt_in" | "opt_out"
enabledboolean

Response

FieldTypeNotes
idrequiredstring
objectrequired"llm_route"
phone_number_idrequiredstring | null
providerrequired"anthropic" | "openai"
modelrequiredstring
environmentrequired"sandbox" | "production"
system_promptrequiredstring
current_prompt_versionrequiredinteger
range -∞..9007199254740991
max_tokensrequiredinteger
range -∞..9007199254740991
temperaturerequiredstring
daily_cost_cap_brlrequiredstring | null
handoff_phrasesrequiredstring[]
blocked_topicsrequiredobject[]
blocked_topic_fallback_responserequiredstring
max_context_messagesrequiredinteger
range -∞..9007199254740991
max_context_age_secondsrequiredinteger | null
memory_persistencerequired"disabled" | "opt_in" | "opt_out"
enabledrequiredboolean
api_key_suffixrequiredstring
created_atrequiredstring<ISO-8601>
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
updated_atrequiredstring<ISO-8601>
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$

Get route

GET/v1/llm-routes

Response

FieldTypeNotes
idrequiredstring
objectrequired"llm_route"
phone_number_idrequiredstring | null
providerrequired"anthropic" | "openai"
modelrequiredstring
environmentrequired"sandbox" | "production"
system_promptrequiredstring
current_prompt_versionrequiredinteger
range -∞..9007199254740991
max_tokensrequiredinteger
range -∞..9007199254740991
temperaturerequiredstring
daily_cost_cap_brlrequiredstring | null
handoff_phrasesrequiredstring[]
blocked_topicsrequiredobject[]
blocked_topic_fallback_responserequiredstring
max_context_messagesrequiredinteger
range -∞..9007199254740991
max_context_age_secondsrequiredinteger | null
memory_persistencerequired"disabled" | "opt_in" | "opt_out"
enabledrequiredboolean
api_key_suffixrequiredstring
created_atrequiredstring<ISO-8601>
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
updated_atrequiredstring<ISO-8601>
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$

Delete route

DELETE/v1/llm-routes

Request a completion

POST/v1/llm/completions

Request body

FieldTypeNotes
messagesrequiredobject[]
contact_phonestring
pattern: ^\+\d{8,15}$
phone_number_idstring
len 1..∞
trace_idstring

Response

FieldTypeNotes
objectrequired"llm_completion"
contentrequiredstring
modelrequiredstring
tokens_inrequiredinteger
range 0..9007199254740991
tokens_outrequiredinteger
range 0..9007199254740991
cost_brlrequiredstring
provider_cost_usd_estimaterequiredstring | null
handoffrequiredboolean
trace_idrequiredstring

Provider errors

Provider failures are normalized to stable Tyxter error codes. Correct invalid credentials before retrying; transient provider failures can be retried with the same idempotency key.

HTTPerror.codeMeaning
400llm_provider_auth_failedThe provider rejected the route's BYOK API key with 401 or 403.
502provider_errorThe provider request failed for another reason, such as a network or 5xx error.