{"openapi":"3.1.0","info":{"title":"SMS API","description":"A simple API to provision phone numbers and receive SMS","version":"0.1.0"},"paths":{"/v0/agent/sign-up":{"post":{"tags":["agent-signup"],"summary":"Agent Sign Up","description":"Kick off agent self-signup.\n\nSends a 6-digit OTP to the human's email. Nothing is provisioned server-side\nuntil /v0/agent/verify is called with the code.","operationId":"agent_sign_up_v0_agent_sign_up_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSignUpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v0/agent/verify":{"post":{"tags":["agent-signup"],"summary":"Agent Verify","description":"Verify the OTP and atomically provision everything.\n\nCreates: User + Project (+ mirrored Account) + starter hosted Agent + phone number\n+ first-month charge + API key. Returns the key once — agents must save it.","operationId":"agent_verify_v0_agent_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/voices":{"get":{"tags":["agents"],"summary":"List Voices","description":"Return available voices from the configured voice provider.","operationId":"list_voices_v1_agents_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/agents":{"post":{"tags":["agents"],"summary":"Create Agent","description":"Create a new agent.\n\nAn agent represents an AI persona (Support Bot, Sales Agent, etc.)\nthat can have phone numbers attached to it.\n\nvoiceMode: \"webhook\" (default) forwards transcripts to your webhook.\n           \"hosted\" uses a built-in LLM with systemPrompt (no webhook needed).","operationId":"create_agent_v1_agents_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["agents"],"summary":"List Agents","description":"List all agents for this account.","operationId":"list_agents_v1_agents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}":{"get":{"tags":["agents"],"summary":"Get Agent","description":"Get a single agent with its attached numbers.","operationId":"get_agent_v1_agents__agent_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["agents"],"summary":"Update Agent","description":"Update an agent's configuration.\n\nUse this to change voice mode, system prompt, greeting, or voice.\nSwitching voiceMode to \"hosted\" re-provisions the voice agent with built-in LLM.","operationId":"update_agent_v1_agents__agent_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAgentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agents"],"summary":"Delete Agent","description":"Delete an agent.\n\nPhone numbers, conversations, and calls associated with the agent will have their\nagent reference cleared (set to null) but will not be deleted themselves.","operationId":"delete_agent_v1_agents__agent_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAgentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/numbers":{"post":{"tags":["agents"],"summary":"Attach Number To Agent","description":"Attach an existing phone number to an agent.\n\nThe number must belong to the same account and not be released.","operationId":"attach_number_to_agent_v1_agents__agent_id__numbers_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachNumberRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachNumberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/numbers/{number_id}":{"delete":{"tags":["agents"],"summary":"Detach Number From Agent","description":"Detach a phone number from an agent (sets agentId to null).\n\nThe number remains active and can be re-attached to any agent.","operationId":"detach_number_from_agent_v1_agents__agent_id__numbers__number_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/conversations":{"get":{"tags":["agents"],"summary":"List Agent Conversations","description":"List all conversations for an agent.","operationId":"list_agent_conversations_v1_agents__agent_id__conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__agents__ConversationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/calls":{"get":{"tags":["agents"],"summary":"List Agent Calls","description":"List all calls for an agent.","operationId":"list_agent_calls_v1_agents__agent_id__calls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/numbers":{"post":{"tags":["numbers"],"summary":"Create Number","description":"Provision a new SMS-enabled phone number.\n\n1. Check number limit (lifetime limit)\n2. Search the account's configured SMS provider for available numbers\n3. Purchase the first available one\n4. Configure messaging and voice routing\n5. Store the number in our database","operationId":"create_number_v1_numbers_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNumberRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneNumberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["numbers"],"summary":"List Numbers","description":"List the active phone numbers for this account.\n\nReleased (deleted) numbers are excluded so the count reflects the numbers\nthe account actually holds. Fetch a single number via GET /{number_id}\n(which returns it regardless of status).","operationId":"list_numbers_v1_numbers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneNumberListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/numbers/lookup":{"get":{"tags":["numbers"],"summary":"Lookup Numbers","description":"Look up line-type intelligence for phone numbers.\n\nAnswers \"should my agent text this number\" before spending a message:\nmobile (`lineType: \"mobile\"`) vs landline vs VoIP, country, and whether\nthe handset supports RCS. Up to 25 comma-separated numbers per request.\nBilled at $0.009 per number looked up.","operationId":"lookup_numbers_v1_numbers_lookup_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phoneNumbers","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated E.164 numbers, up to 25","title":"Phonenumbers"},"description":"Comma-separated E.164 numbers, up to 25"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberLookupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/numbers/{number_id}":{"get":{"tags":["numbers"],"summary":"Get Number","description":"Get a single phone number owned by this account.\n\nReturns the number regardless of status (including released) so detail\npages still load for numbers that are no longer active.","operationId":"get_number_v1_numbers__number_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneNumberResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["numbers"],"summary":"Delete Number","description":"Release (delete) a phone number.\n\nThis will:\n1. Release the number from its upstream provider when supported\n2. Mark the number as \"released\" in the database\n3. Keep all messages and conversation history (for audit purposes)\n\nWARNING: This action is irreversible! The number cannot be recovered.","operationId":"delete_number_v1_numbers__number_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/numbers/{number_id}/messages":{"get":{"tags":["numbers"],"summary":"Get Messages","description":"Get messages for a specific phone number.\n\nSupports cursor-based pagination via before/after timestamps.","operationId":"get_messages_v1_numbers__number_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Before"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sip-trunks":{"get":{"tags":["sip-trunks"],"summary":"List Sip Trunks","description":"List SIP trunks for the current account.","operationId":"list_sip_trunks_v1_sip_trunks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SipTrunkListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["sip-trunks"],"summary":"Create Sip Trunk","description":"Create a SIP trunk for routing your numbers' calls to your own SIP infrastructure.","operationId":"create_sip_trunk_v1_sip_trunks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SipTrunkResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/sip-trunks/{trunk_id}":{"get":{"tags":["sip-trunks"],"summary":"Get Sip Trunk","description":"Get a single SIP trunk.","operationId":"get_sip_trunk_v1_sip_trunks__trunk_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trunk_id","in":"path","required":true,"schema":{"type":"string","title":"Trunk Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SipTrunkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["sip-trunks"],"summary":"Update Sip Trunk","description":"Update a SIP trunk (name, transfers, origination URIs).","operationId":"update_sip_trunk_v1_sip_trunks__trunk_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trunk_id","in":"path","required":true,"schema":{"type":"string","title":"Trunk Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SipTrunkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"All fields optional; send only what changes.","properties":{"name":{"type":"string","maxLength":64,"description":"Display name."},"transfers":{"type":"string","enum":["all","sip","none"],"description":"Which transfers the trunk allows."},"transfer_caller_id":{"type":"string","enum":["transferee","transferor"],"description":"Caller ID presented on a transferred leg."},"origination":{"type":"object","description":"Where inbound calls to this trunk are delivered.","properties":{"uris":{"type":"array","items":{"type":"object","required":["sip_uri"],"properties":{"sip_uri":{"type":"string","description":"Destination SIP URI, e.g. sip:host.example.com or sip:host;transport=tls."},"name":{"type":"string","description":"Optional label."},"priority":{"anyOf":[{"type":"integer","minimum":0,"maximum":65535},{"type":"null"}],"default":10},"weight":{"anyOf":[{"type":"integer","minimum":0,"maximum":65535},{"type":"null"}],"default":10}}},"description":"Empty or omitted clears the origination URIs (only allowed when no numbers are attached)."}}}}},"example":{"origination":{"uris":[{"sip_uri":"sip:example.sip.livekit.cloud;transport=tls","priority":10,"weight":10}]}}}}}},"delete":{"tags":["sip-trunks"],"summary":"Delete Sip Trunk","description":"Delete a SIP trunk (removes upstream and soft-deletes locally).","operationId":"delete_sip_trunk_v1_sip_trunks__trunk_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trunk_id","in":"path","required":true,"schema":{"type":"string","title":"Trunk Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SipTrunkDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks":{"get":{"tags":["webhooks"],"summary":"Get Webhook","description":"Get the master webhook configuration for this account.","operationId":"get_webhook_v1_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WebhookResponse"},{"type":"null"}],"title":"Response Get Webhook V1 Webhooks Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["webhooks"],"summary":"Create Or Update Webhook","description":"Register or update the webhook URL for this account.\n\nIf a webhook already exists, it will be updated.\nA new secret is generated each time.\n\ncontextLimit: Number of recent messages to include in webhook payloads (0-50, default: 10).\nSet to 0 to disable history in webhooks.","operationId":"create_or_update_webhook_v1_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["webhooks"],"summary":"Delete Webhook","description":"Remove the master webhook for this account.","operationId":"delete_webhook_v1_webhooks_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/webhooks/deliveries":{"get":{"tags":["webhooks"],"summary":"List Deliveries","description":"Get paginated webhook delivery attempts for all account webhooks.","operationId":"list_deliveries_v1_webhooks_deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"hours","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":168,"minimum":1},{"type":"null"}],"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedDeliveriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/deliveries/stats":{"get":{"tags":["webhooks"],"summary":"Delivery Stats","description":"Aggregated delivery stats for the account's webhooks over the last N hours.","operationId":"delivery_stats_v1_webhooks_deliveries_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/deliveries/all-time":{"get":{"tags":["webhooks"],"summary":"All Time Stats","description":"Lightweight all-time delivery counts using indexed COUNT queries.","operationId":"all_time_stats_v1_webhooks_deliveries_all_time_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllTimeStatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/webhooks/test":{"post":{"tags":["webhooks"],"summary":"Test Webhook","description":"Send a test webhook to verify the endpoint is working.\n\nSends a fake message payload to the configured URL.\nPass ?agentId=... to control which agent appears in the payload;\notherwise the first agent in the account is used.","operationId":"test_webhook_v1_webhooks_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agentId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Agent ID to include in the test payload","title":"Agentid"},"description":"Agent ID to include in the test payload"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/webhook":{"post":{"tags":["agent-webhooks"],"summary":"Create Or Update Agent Webhook","description":"Register or update a webhook URL for a specific agent.\n\nWhen set, this agent's events are delivered here instead of the account default webhook.","operationId":"create_or_update_agent_webhook_v1_agents__agent_id__webhook_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["agent-webhooks"],"summary":"Get Agent Webhook","description":"Get the webhook configuration for a specific agent.","operationId":"get_agent_webhook_v1_agents__agent_id__webhook_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WebhookResponse"},{"type":"null"}],"title":"Response Get Agent Webhook V1 Agents  Agent Id  Webhook Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent-webhooks"],"summary":"Delete Agent Webhook","description":"Remove the webhook for a specific agent.","operationId":"delete_agent_webhook_v1_agents__agent_id__webhook_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/webhook/deliveries":{"get":{"tags":["agent-webhooks"],"summary":"List Agent Deliveries","description":"Get recent webhook delivery attempts for a specific agent's webhook.","operationId":"list_agent_deliveries_v1_agents__agent_id__webhook_deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDeliveryResponse"},"title":"Response List Agent Deliveries V1 Agents  Agent Id  Webhook Deliveries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/{agent_id}/webhook/test":{"post":{"tags":["agent-webhooks"],"summary":"Test Agent Webhook","description":"Send a test webhook to the agent's webhook endpoint.","operationId":"test_agent_webhook_v1_agents__agent_id__webhook_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contacts":{"get":{"tags":["contacts"],"summary":"List Contacts","description":"List all contacts for this account.\n\nOptional `search` query filters by name or phone number (case-insensitive contains).","operationId":"list_contacts_v1_contacts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["contacts"],"summary":"Create Contact","description":"Create a new contact.\n\nPhone number is normalized to E.164 format. Returns 409 if a contact\nwith this phone number already exists for the project.","operationId":"create_contact_v1_contacts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContactRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contacts/capabilities":{"get":{"tags":["contacts"],"summary":"Get Contact Capabilities","description":"Check which messaging channels a phone number supports, without sending\na message.\n\nRuns a live check (typically 1-2 seconds), so the result reflects the\nnumber right now. Capabilities can still change by the time you send.\nRequires at least one active iMessage-capable number on the account.","operationId":"get_contact_capabilities_v1_contacts_capabilities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phone_number","in":"query","required":true,"schema":{"type":"string","description":"Phone number to check (E.164 preferred; URL-encode + as %2B)","title":"Phone Number"},"description":"Phone number to check (E.164 preferred; URL-encode + as %2B)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCapabilitiesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contacts/{contact_id}":{"get":{"tags":["contacts"],"summary":"Get Contact","description":"Get a single contact by ID.","operationId":"get_contact_v1_contacts__contact_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["contacts"],"summary":"Update Contact","description":"Update a contact's fields.\n\nIf phoneNumber is updated, it's re-normalized and checked for uniqueness (409 on conflict).","operationId":"update_contact_v1_contacts__contact_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contacts"],"summary":"Delete Contact","description":"Delete a contact.","operationId":"delete_contact_v1_contacts__contact_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/conversations":{"get":{"tags":["conversations"],"summary":"List Conversations","description":"List all conversations for this account.\n\nSorted by most recent activity (lastMessageAt desc).\nSorted by most recent activity.","operationId":"list_conversations_v1_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__conversations__ConversationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/conversations/{conversation_id}":{"get":{"tags":["conversations"],"summary":"Get Conversation","description":"Get a conversation with its recent messages.","operationId":"get_conversation_v1_conversations__conversation_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"message_limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Message Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["conversations"],"summary":"Update Conversation","description":"Update a conversation.\n\n- `metadata`: store custom context for AI agents (customer info, order/ticket\n  ids, session state). Replaces the stored object; surfaced in webhook\n  payloads as `conversationState`.\n- `group_name`: rename a group conversation (iMessage groups only). Also\n  renames the underlying iMessage thread.\n\nOnly the fields you include are changed: a rename-only PATCH leaves metadata\nuntouched, and vice versa.","operationId":"update_conversation_v1_conversations__conversation_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConversationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/conversations/{conversation_id}/messages":{"get":{"tags":["conversations"],"summary":"Get Conversation Messages","description":"Get paginated messages for a conversation.\n\nUse before/after for cursor-based pagination.","operationId":"get_conversation_messages_v1_conversations__conversation_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Before"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"After"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/conversations/{conversation_id}/typing":{"post":{"tags":["conversations"],"summary":"Send Typing Indicator","description":"Show a typing indicator in the conversation (iMessage only).\n\nWorks for both 1:1 and group chats: a group id is itself a valid typing\ntarget, so every participant sees the indicator. Best-effort: the\nindicator may be silently dropped if the chat has no recent activity, the\nrecipient isn't on iMessage, or it's RCS-routed (RCS carries no composing\nstate). Auto-expires after a few seconds; no \"stop typing\" call needed.","operationId":"send_typing_indicator_v1_conversations__conversation_id__typing_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendTypingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/conversations/{conversation_id}/background":{"post":{"tags":["conversations"],"summary":"Set Chat Background","description":"Set a custom wallpaper for the chat (iMessage only).\n\nCustomer sends `image_url`; we fetch (≤10MB, JPEG/PNG/GIF/WebP/HEIC),\nvalidate, and forward as multipart to the iMessage provider. Idempotent —\nre-setting replaces. Recipients on iOS < 18 fall back to the default\nsilently.","operationId":"set_chat_background_v1_conversations__conversation_id__background_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetBackgroundRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetBackgroundResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["conversations"],"summary":"Remove Chat Background","description":"Clear the custom wallpaper for the chat (iMessage only).\n\nIdempotent: deleting a default-background chat returns 204 (no-op).","operationId":"remove_chat_background_v1_conversations__conversation_id__background_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/calls":{"get":{"tags":["calls"],"summary":"List Calls","description":"List all calls for this account.","operationId":"list_calls_v1_calls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: completed, in-progress, failed","title":"Status"},"description":"Filter by status: completed, in-progress, failed"},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by direction: inbound, outbound","title":"Direction"},"description":"Filter by direction: inbound, outbound"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by type: pstn, web","title":"Type"},"description":"Filter by type: pstn, web"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search fromNumber or toNumber (contains)","title":"Search"},"description":"Search fromNumber or toNumber (contains)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["calls"],"summary":"Create Outbound Call","description":"Initiate an outbound call.\n\nThis endpoint allows you to programmatically make phone calls from your agent\nto any phone number. Use `fromNumberId` to pick which of the agent's numbers\nto use as caller ID; if omitted, the first assigned number is used.\n\nFlow:\n1. Validates the agent belongs to your account and has a phone number\n2. Initiates a call from the agent's number to the destination\n3. When recipient answers, speaks the initial greeting (if provided)\n4. Listens for recipient's speech and sends to your webhook\n5. Continues conversation using your webhook responses","operationId":"create_outbound_call_v1_calls_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOutboundCallRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/calls/web":{"post":{"tags":["calls"],"summary":"Create Web Call","description":"Create a browser-based web call.\n\nReturns an access token that your frontend passes to the AgentPhone Web SDK\n(`agentphone-web-sdk`) to start the call in the browser. The token\nexpires 30 seconds after creation.\n\nFlow:\n1. Validates the agent belongs to your account\n2. Creates a web call and returns an access token\n3. Your client calls `webClient.startCall({ accessToken })` to connect\n4. Call lifecycle (transcripts, webhooks) works the same as phone calls","operationId":"create_web_call_v1_calls_web_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebCallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/calls/{call_id}":{"get":{"tags":["calls"],"summary":"Get Call","description":"Get a specific call with its transcripts.","operationId":"get_call_v1_calls__call_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"call_id","in":"path","required":true,"schema":{"type":"string","title":"Call Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/calls/{call_id}/end":{"post":{"tags":["calls"],"summary":"End Call","description":"Terminate an ongoing call.\n\nWorks for both hosted-mode and webhook-mode calls. The call_ended\nwebhook from the voice provider updates status/endedAt asynchronously,\nso this endpoint returns the current call as soon as the stop request\nis accepted upstream.","operationId":"end_call_v1_calls__call_id__end_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"call_id","in":"path","required":true,"schema":{"type":"string","title":"Call Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/calls/{call_id}/recording":{"get":{"tags":["calls"],"summary":"Get Call Recording","description":"Stream the audio recording for a specific call. Public bearer-link endpoint.","operationId":"get_call_recording_v1_calls__call_id__recording_get","parameters":[{"name":"call_id","in":"path","required":true,"schema":{"type":"string","title":"Call Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/calls/{call_id}/transcript":{"get":{"tags":["calls"],"summary":"Get Call Transcript","description":"Get the full transcript for a call.\n\nReturns the complete, ordered transcript regardless of the webhook\ncontextLimit setting.  Each entry contains the user utterance and\nthe corresponding agent response (when available).","operationId":"get_call_transcript_v1_calls__call_id__transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"call_id","in":"path","required":true,"schema":{"type":"string","title":"Call Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/calls/{call_id}/transcript/stream":{"get":{"tags":["calls"],"summary":"Stream Call Transcript","description":"Stream a call's transcript via Server-Sent Events.\n\nOn connect the server replays all existing transcript turns from the\ndatabase, then streams new turns in real time as they arrive from the\nvoice provider.  A ``: heartbeat`` comment is sent every 15 s to keep\nproxies alive.  The stream closes after sending an ``ended`` event\nwhen the call completes (or immediately after replay if the call has\nalready ended).\n\nWorks for both live and completed calls — same URL either way.","operationId":"stream_call_transcript_v1_calls__call_id__transcript_stream_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"call_id","in":"path","required":true,"schema":{"type":"string","title":"Call Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/numbers/{number_id}/calls":{"get":{"tags":["calls"],"summary":"List Calls For Number","description":"List all calls for a specific phone number.","operationId":"list_calls_for_number_v1_numbers__number_id__calls_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage":{"get":{"tags":["usage"],"summary":"Get Usage","description":"Get usage statistics for the current account.\n\nReturns:\n- Phone number limits (used/limit/remaining)\n- Message statistics (total, last 24h, last 7 days, last 30 days)\n- Call statistics (total, last 24h, last 7 days, last 30 days)\n- Webhook delivery statistics","operationId":"get_usage_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/usage/daily":{"get":{"tags":["usage"],"summary":"Get Daily Usage","description":"Get daily usage breakdown for the last N days (up to 365).\nReturns per-day counts of messages, calls, and webhook deliveries.","operationId":"get_daily_usage_v1_usage_daily_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage/monthly":{"get":{"tags":["usage"],"summary":"Get Monthly Usage","description":"Get monthly usage aggregation for the last N months.\nReturns per-month totals of messages, calls, and webhook deliveries.","operationId":"get_monthly_usage_v1_usage_monthly_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"months","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":6,"title":"Months"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonthlyUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage/by-number":{"get":{"tags":["usage"],"summary":"Get Usage By Number","description":"Get usage statistics broken down by phone number, with linked agent info.","operationId":"get_usage_by_number_v1_usage_by_number_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NumberUsageResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/usage/by-agent":{"get":{"tags":["usage"],"summary":"Get Usage By Agent","description":"Get usage broken down by agent for the current calendar week, month, or year.\nIncludes message count, completed call count, and total call seconds per agent.\nCalls/messages with no agent attached are bucketed as \"Unassigned\".","operationId":"get_usage_by_agent_v1_usage_by_agent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":true,"schema":{"enum":["week","month","year"],"type":"string","title":"Period"}},{"name":"tz","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IANA timezone, e.g. America/New_York","title":"Tz"},"description":"IANA timezone, e.g. America/New_York"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentUsageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/supabase/connect":{"post":{"tags":["integrations"],"summary":"Supabase Connect Code","description":"Create a short-lived one-time code for initiating the Supabase OAuth flow.","operationId":"supabase_connect_code_integrations_supabase_connect_post","security":[{"HTTPBearer":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"tags":["integrations"],"summary":"Supabase Connect","description":"Exchange a one-time connect code and redirect to Supabase OAuth.","operationId":"supabase_connect_integrations_supabase_connect_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/supabase/status":{"get":{"tags":["integrations"],"summary":"Supabase Status","operationId":"supabase_status_integrations_supabase_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/integrations/supabase/token":{"get":{"tags":["integrations"],"summary":"Supabase Token","description":"Get a valid Supabase access token, auto-refreshing if expired.","operationId":"supabase_token_integrations_supabase_token_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/integrations/supabase":{"delete":{"tags":["integrations"],"summary":"Supabase Disconnect","operationId":"supabase_disconnect_integrations_supabase_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/integrations/whatsapp/connect":{"post":{"tags":["whatsapp"],"summary":"Whatsapp Connect","description":"Complete Embedded Signup: exchange the code, store the connection, and\nonboard the phone number (register + subscribe webhooks).","operationId":"whatsapp_connect_integrations_whatsapp_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppConnectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/integrations/whatsapp/{connection_id}/available-numbers":{"get":{"tags":["whatsapp"],"summary":"Whatsapp Available Numbers","description":"List the WABA's phone numbers with their connected state, for the\nadd-number picker. Registration is deliberate and per-number: registering\na number on the Cloud API kicks it off the WhatsApp Business app, so we\nnever auto-register a whole WABA.","operationId":"whatsapp_available_numbers_integrations_whatsapp__connection_id__available_numbers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/whatsapp/{connection_id}/numbers":{"post":{"tags":["whatsapp"],"summary":"Whatsapp Connect Number","description":"Connect an additional number from an already-connected WABA: validates\nthe number belongs to the WABA, registers it for Cloud API use, and binds\nit (dual-channel when the E.164 already exists on this account).","operationId":"whatsapp_connect_number_integrations_whatsapp__connection_id__numbers_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppNumberConnectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/whatsapp/{connection_id}/templates":{"get":{"tags":["whatsapp"],"summary":"Whatsapp List Templates","description":"List the WABA's message templates and their approval status.\n\nTemplates are the only way to message someone outside the 24h customer\nservice window. A newly created one is PENDING until Meta reviews it;\npoll here for the transition to APPROVED (or REJECTED, with a reason).","operationId":"whatsapp_list_templates_integrations_whatsapp__connection_id__templates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one template name (all of its language variants).","title":"Name"},"description":"Filter to one template name (all of its language variants)."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by approval status, e.g. APPROVED or PENDING.","title":"Status"},"description":"Filter by approval status, e.g. APPROVED or PENDING."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category: MARKETING, UTILITY, or AUTHENTICATION.","title":"Category"},"description":"Filter by category: MARKETING, UTILITY, or AUTHENTICATION."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by language code, e.g. en_US.","title":"Language"},"description":"Filter by language code, e.g. en_US."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["whatsapp"],"summary":"Whatsapp Create Template","description":"Submit a template, authored or from Meta's Template Library.\n\nAn authored template (with `components`) comes back PENDING and can't be\nsent until it reaches APPROVED — UTILITY usually clears in minutes,\nMARKETING can take up to 24h.\n\nPassing `library_template_name` instead builds from Meta's library, where a\ntemplate used unchanged skips review and is usable straight away. That makes\nit the quickest way to get something sendable; the trade is that the copy is\nMeta's, customizable only through the library button/body inputs.","operationId":"whatsapp_create_template_integrations_whatsapp__connection_id__templates_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhatsAppTemplateCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["whatsapp"],"summary":"Whatsapp Delete Template","description":"Delete a template by name.\n\nMeta removes EVERY language variant registered under the name, and blocks\nreuse of that name for 30 days. There is no rename on Meta's side, so this\nis also the only way to reclaim a name from a typo'd or rejected template.","operationId":"whatsapp_delete_template_integrations_whatsapp__connection_id__templates_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}},{"name":"name","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Template name to delete.","title":"Name"},"description":"Template name to delete."},{"name":"hsm_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Optional template id. Narrows the delete to that single language version instead of every variant under the name. Meta requires `name` alongside it.","title":"Hsm Id"},"description":"Optional template id. Narrows the delete to that single language version instead of every variant under the name. Meta requires `name` alongside it."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/integrations/whatsapp/status":{"get":{"tags":["whatsapp"],"summary":"Whatsapp Status","operationId":"whatsapp_status_integrations_whatsapp_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/integrations/whatsapp/{connection_id}":{"delete":{"tags":["whatsapp"],"summary":"Whatsapp Disconnect","description":"Disconnect a WABA: mark the connection disconnected and release its numbers.\n\nThe customer keeps all their Meta assets (we never delete anything on their\nside); this only stops AgentPhone from using them.","operationId":"whatsapp_disconnect_integrations_whatsapp__connection_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/messages":{"post":{"tags":["messages"],"summary":"Send Message","description":"Send an outbound message (SMS or iMessage) via the provider assigned to the number.","operationId":"send_message_v1_messages_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/messages/{message_id}/reactions":{"post":{"tags":["messages"],"summary":"Send Reaction","description":"Send a tapback reaction to a message (iMessage only).\n\nReactions are available only for iMessage messages. Attempting to react\nto an SMS message or another channel that does not support tapbacks\nreturns a clear error.","operationId":"send_reaction_v1_messages__message_id__reactions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendReactionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendReactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/numbers/{number_id}/contact-card":{"get":{"tags":["contact cards"],"summary":"Get Contact Card","description":"Fetch the iMessage contact card set on this number.","operationId":"get_contact_card_v1_numbers__number_id__contact_card_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["contact cards"],"summary":"Put Contact Card","description":"Create or replace the iMessage contact card on this number.","operationId":"put_contact_card_v1_numbers__number_id__contact_card_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCardWriteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contact cards"],"summary":"Delete Contact Card","description":"Remove the iMessage contact card from this number.","operationId":"delete_contact_card_v1_numbers__number_id__contact_card_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"number_id","in":"path","required":true,"schema":{"type":"string","title":"Number Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/register/status":{"get":{"tags":["registration"],"summary":"Get Registration Status","description":"Check the status of your A2P 10DLC registration.\n\nRegistrations created with create_sub_account=true (the default) live on\na sub-account; this resolves to it automatically when there's exactly\none, or honors the X-Sub-Account-Id header.","operationId":"get_registration_status_v1_register_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/register":{"get":{"tags":["registration"],"summary":"Get Registration Details","description":"Retrieve the content of your submitted A2P 10DLC registration.\n\nReturns the brand identity and campaign content exactly as it was\nsubmitted (business info, description, use case, sample messages, opt-in\nconsent flow, opt-in screenshot URL) so you can review what carriers are\nreviewing. Internal registry ids, vendor names, and processing state are\nnever exposed; the coarse `stage` mirrors GET /v1/register/status. The\nEIN is returned as its last 4 digits only.\n\nLike the status endpoint, this resolves to a sub-account when the\nregistration lives on one (the default for POST /v1/register) — either\nautomatically when there's exactly one, or via the X-Sub-Account-Id\nheader.","operationId":"get_registration_details_v1_register_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationDetailResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["registration"],"summary":"Register A2P","description":"Submit A2P 10DLC registration.\n\nDeducts the registration fee ($25 for sole_proprietor / standard_brand,\n$70 for high_volume) from the parent account's credit balance, creates an\noptional sub-account, and sends a notification email.","operationId":"register_a2p_v1_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["registration"],"summary":"Update A2P Registration","description":"Update an existing A2P 10DLC registration.\n\nSend only the fields that changed — everything is optional. There is no\nfee. Changes are applied after review, and your registration keeps\nsending under its current approval while an update to an approved\nregistration is reviewed.\n\nRegistrations created with create_sub_account=true (the default) live on\na sub-account; this resolves to it automatically when there's exactly\none, or honors the X-Sub-Account-Id header.","operationId":"update_a2p_registration_v1_register_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/verify/send":{"post":{"tags":["verification"],"summary":"Send Verification","description":"Send a 6-digit verification code to a phone number via SMS.\n\nUse this instead of sending your own code over `POST /v1/messages`: it\nroutes through carrier-registered sender IDs, so it reaches countries\nwhere plain application SMS from a US long code is not deliverable\n(e.g. Greece, UAE, the Philippines, the UK).\n\nThe code is always 6 digits, expires after 10 minutes, and allows up to\n3 check attempts. None of these are configurable.\n\n**Billing.** Sending a code costs the standard outbound SMS rate for the\ndestination country. A successful `POST /v1/verify/check` adds a $0.05\nverification fee; failed, expired, and exhausted checks are not charged.\n\n**Destination coverage.** A small number of countries are unavailable and\nreturn 400. Email founders@agentphone.to if you need access to one.","operationId":"send_verification_v1_verify_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendVerificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/verify/check":{"post":{"tags":["verification"],"summary":"Check Verification","description":"Check a verification code against a pending verification.\n\nPossible results:\n- `ok` — code is correct, phone number verified\n- `incorrect` — wrong code, try again (up to 3 attempts)\n- `exhausted` — too many failed attempts, send a new code\n- `expired` — verification expired (10 min), send a new code\n- `already_verified` — this verification was already completed\n\n**Billing.** An `ok` or `already_verified` result costs a $0.05\nverification fee. Other results are free.","operationId":"check_verification_v1_verify_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckVerificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/sub-accounts":{"get":{"tags":["sub-accounts"],"summary":"List Sub Accounts","operationId":"list_sub_accounts_v1_sub_accounts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sub-accounts"],"summary":"Create Sub Account","operationId":"create_sub_account_v1_sub_accounts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubAccountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sub-accounts/{sub_account_id}":{"patch":{"tags":["sub-accounts"],"summary":"Update Sub Account","operationId":"update_sub_account_v1_sub_accounts__sub_account_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sub_account_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubAccountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["sub-accounts"],"summary":"Delete Sub Account","operationId":"delete_sub_account_v1_sub_accounts__sub_account_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sub_account_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/location/{phone_number}":{"get":{"tags":["location"],"summary":"Get Location","operationId":"get_location_v1_location__phone_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"phone_number","in":"path","required":true,"schema":{"type":"string","title":"Phone Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/location/refresh":{"post":{"tags":["location"],"summary":"Refresh Locations","operationId":"refresh_locations_v1_location_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationRefreshResponse"}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"AgentListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentResponse"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","total"],"title":"AgentListResponse"},"AgentNumberResponse":{"properties":{"id":{"type":"string","title":"Id"},"phoneNumber":{"type":"string","title":"Phonenumber"},"status":{"type":"string","title":"Status"},"type":{"type":"string","title":"Type","default":"sms"}},"type":"object","required":["id","phoneNumber","status"],"title":"AgentNumberResponse"},"AgentResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"voiceMode":{"type":"string","enum":["webhook","hosted"],"title":"Voicemode"},"enableMessaging":{"type":"boolean","title":"Enablemessaging","default":true},"modelTier":{"type":"string","enum":["turbo","balanced","max"],"title":"Modeltier","default":"balanced"},"systemPrompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Systemprompt"},"beginMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Beginmessage"},"voice":{"type":"string","title":"Voice"},"transferNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transfernumber"},"customTools":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Customtools"},"voicemailMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voicemailmessage"},"callScreeningIdentity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningidentity"},"callScreeningPurpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningpurpose"},"sttMode":{"type":"string","enum":["fast","accurate"],"title":"Sttmode","description":"Speech-to-text mode. 'fast' optimizes for latency, 'accurate' optimizes for transcription accuracy (~200ms additional latency).","default":"fast"},"ambientSound":{"type":"string","enum":["none","office","coffee-shop","outdoor"],"title":"Ambientsound","description":"Background ambience to mask synthetic silence between turns. 'none' disables; 'office', 'coffee-shop', 'outdoor' enable a quiet bed.","default":"none"},"denoisingMode":{"type":"string","enum":["noise-cancellation","noise-and-background-speech-cancellation"],"title":"Denoisingmode","description":"Audio denoising. 'noise-cancellation' (default) handles general noise. 'noise-and-background-speech-cancellation' is more aggressive for callers in cars, cafes, or near TVs.","default":"noise-cancellation"},"maxSilenceMs":{"type":"integer","title":"Maxsilencems","description":"Hang up the call after this many milliseconds of caller silence. Range 10000 (10s) to 3600000 (1 hour). Default 600000 (10 min).","default":600000},"voiceSpeed":{"type":"number","title":"Voicespeed","description":"Voice speed multiplier. Range 0.5 to 2.0. Default 1.0.","default":1.0},"interruptionSensitivity":{"type":"number","title":"Interruptionsensitivity","description":"How easily callers can interrupt the agent. Range 0.0 to 1.0. Default 0.8.","default":0.8},"enableBackchannel":{"type":"boolean","title":"Enablebackchannel","description":"When true, the agent interjects short filler words like 'uh-huh' or 'mhmm' during longer caller utterances. Defaults to true.","default":true},"language":{"type":"string","title":"Language","description":"BCP-47 locale that drives the agent's speech recognition and pronunciation. Defaults to 'en-US'.","default":"en-US"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"numbers":{"anyOf":[{"items":{"$ref":"#/components/schemas/AgentNumberResponse"},"type":"array"},{"type":"null"}],"title":"Numbers"}},"type":"object","required":["id","name","description","voiceMode","voice","createdAt"],"title":"AgentResponse"},"AgentSignUpRequest":{"properties":{"human_email":{"type":"string","title":"Human Email"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"}},"type":"object","required":["human_email"],"title":"AgentSignUpRequest"},"AgentUsageItem":{"properties":{"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"agentName":{"type":"string","title":"Agentname"},"messages":{"type":"integer","title":"Messages"},"calls":{"type":"integer","title":"Calls"},"totalSeconds":{"type":"integer","title":"Totalseconds"},"isOrphan":{"type":"boolean","title":"Isorphan","default":false}},"type":"object","required":["agentId","agentName","messages","calls","totalSeconds"],"title":"AgentUsageItem"},"AgentUsageResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentUsageItem"},"type":"array","title":"Data"},"period":{"type":"string","title":"Period"},"periodStart":{"type":"string","title":"Periodstart"},"periodEnd":{"type":"string","title":"Periodend"}},"type":"object","required":["data","period","periodStart","periodEnd"],"title":"AgentUsageResponse"},"AgentVerifyRequest":{"properties":{"verification_id":{"type":"string","title":"Verification Id"},"otp_code":{"type":"string","title":"Otp Code"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["verification_id","otp_code"],"title":"AgentVerifyRequest"},"AllTimeStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"success":{"type":"integer","title":"Success"},"failed":{"type":"integer","title":"Failed"},"successRate":{"type":"number","title":"Successrate"}},"type":"object","required":["total","success","failed","successRate"],"title":"AllTimeStatsResponse"},"AllowedIp":{"properties":{"name":{"type":"string","title":"Name","default":""},"cidr":{"type":"string","title":"Cidr"}},"type":"object","required":["cidr"],"title":"AllowedIp"},"AttachNumberRequest":{"properties":{"numberId":{"type":"string","title":"Numberid"}},"type":"object","required":["numberId"],"title":"AttachNumberRequest"},"AttachNumberResponse":{"properties":{"agentId":{"type":"string","title":"Agentid"},"number":{"$ref":"#/components/schemas/AgentNumberResponse"}},"type":"object","required":["agentId","number"],"title":"AttachNumberResponse"},"CallListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CallSummary"},"type":"array","title":"Data"},"hasMore":{"type":"boolean","title":"Hasmore"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","hasMore","total"],"title":"CallListResponse"},"CallSummary":{"properties":{"id":{"type":"string","title":"Id"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"phoneNumberId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phonenumberid"},"phoneNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phonenumber"},"fromNumber":{"type":"string","title":"Fromnumber"},"toNumber":{"type":"string","title":"Tonumber"},"status":{"type":"string","title":"Status"},"startedAt":{"type":"string","format":"date-time","title":"Startedat"},"endedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Endedat"},"durationSeconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Durationseconds"},"lastTranscriptSnippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lasttranscriptsnippet"}},"type":"object","required":["id","agentId","phoneNumberId","phoneNumber","fromNumber","toNumber","status","startedAt","endedAt","durationSeconds","lastTranscriptSnippet"],"title":"CallSummary"},"CampaignInclude":{"type":"string","enum":["links","phone_numbers","age_gated","direct_lending"],"title":"CampaignInclude"},"CampaignStatusResponse":{"properties":{"campaign_status":{"type":"string","title":"Campaign Status"},"message":{"type":"string","title":"Message"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"sub_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Account Id","description":"Set when the registration lives on a sub-account of the calling account (the default for POST /v1/register). Pass it as the X-Sub-Account-Id header to address that sub-account directly."}},"type":"object","required":["campaign_status","message"],"title":"CampaignStatusResponse"},"CheckVerificationRequest":{"properties":{"verification_id":{"type":"string","title":"Verification Id","description":"Verification ID returned from /v1/verify/send"},"code":{"type":"string","pattern":"^[0-9]{6}$","title":"Code","description":"6-digit verification code"}},"type":"object","required":["verification_id","code"],"title":"CheckVerificationRequest"},"CheckVerificationResponse":{"properties":{"result":{"type":"string","title":"Result","description":"One of `ok`, `incorrect`, `exhausted`, `expired`, or `already_verified`."},"attempts_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Attempts Remaining","description":"Checks left before the verification is exhausted. 0 once it reaches a final state."}},"type":"object","required":["result"],"title":"CheckVerificationResponse"},"ContactCapabilitiesResponse":{"properties":{"phoneNumber":{"type":"string","title":"Phonenumber"},"capabilities":{"$ref":"#/components/schemas/ContactCapabilityFlags"},"checkedAt":{"type":"string","format":"date-time","title":"Checkedat"}},"type":"object","required":["phoneNumber","capabilities","checkedAt"],"title":"ContactCapabilitiesResponse"},"ContactCapabilityFlags":{"properties":{"imessage":{"type":"boolean","title":"Imessage"},"sms":{"type":"boolean","title":"Sms"}},"type":"object","required":["imessage","sms"],"title":"ContactCapabilityFlags"},"ContactCardResponse":{"properties":{"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayname"},"hasAvatar":{"type":"boolean","title":"Hasavatar","default":false}},"type":"object","title":"ContactCardResponse"},"ContactCardWriteRequest":{"properties":{"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Firstname"},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastname"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayname"},"avatarUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatarurl"}},"type":"object","title":"ContactCardWriteRequest"},"ContactListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ContactResponse"},"type":"array","title":"Data"},"hasMore":{"type":"boolean","title":"Hasmore"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","hasMore","total"],"title":"ContactListResponse"},"ContactResponse":{"properties":{"id":{"type":"string","title":"Id"},"phoneNumber":{"type":"string","title":"Phonenumber"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","phoneNumber","name","createdAt","updatedAt"],"title":"ContactResponse"},"ContactTitle":{"type":"string","enum":["ceo","cfo","cto","coo","vp","gm","director","other"],"title":"ContactTitle"},"ConversationCapabilities":{"properties":{"canSendMessages":{"type":"boolean","title":"Cansendmessages"},"sendDisabledReason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Senddisabledreason"},"sendChannel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sendchannel"},"availableChannels":{"items":{"type":"string"},"type":"array","title":"Availablechannels","default":[]},"mediaChannels":{"items":{"type":"string"},"type":"array","title":"Mediachannels","default":[]},"whatsappWindowExpiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Whatsappwindowexpiresat"},"media":{"type":"boolean","title":"Media"},"reactions":{"type":"boolean","title":"Reactions"},"emojiReactions":{"type":"boolean","title":"Emojireactions"}},"type":"object","required":["canSendMessages","media","reactions","emojiReactions"],"title":"ConversationCapabilities","description":"What the caller can do in this conversation, derived from its number's\nprovider and compliance state. Drives the dashboard composer/reaction UI."},"ConversationDetail":{"properties":{"id":{"type":"string","title":"Id"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"phoneNumberId":{"type":"string","title":"Phonenumberid"},"phoneNumber":{"type":"string","title":"Phonenumber"},"participant":{"type":"string","title":"Participant"},"channel":{"type":"string","title":"Channel","default":"native"},"isGroup":{"type":"boolean","title":"Isgroup","default":false},"groupId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groupid"},"groupName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groupname"},"groupIconUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groupiconurl"},"participants":{"anyOf":[{"items":{"$ref":"#/components/schemas/GroupParticipant"},"type":"array"},{"type":"null"}],"title":"Participants"},"lastMessageAt":{"type":"string","format":"date-time","title":"Lastmessageat"},"messageCount":{"type":"integer","title":"Messagecount"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"messages":{"items":{"$ref":"#/components/schemas/MessageInConversation"},"type":"array","title":"Messages"},"capabilities":{"anyOf":[{"$ref":"#/components/schemas/ConversationCapabilities"},{"type":"null"}]}},"type":"object","required":["id","phoneNumberId","phoneNumber","participant","lastMessageAt","messageCount","createdAt","messages"],"title":"ConversationDetail"},"CreateAgentRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"voiceMode":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["webhook","hosted"],"title":"Voicemode"},"enableMessaging":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enablemessaging","description":"When true, hosted-mode agents can send and read SMS/iMessage during calls. Defaults to true."},"modelTier":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["turbo","balanced","max"],"title":"Modeltier"},"systemPrompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Systemprompt"},"beginMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Beginmessage"},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice"},"transferNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transfernumber"},"customTools":{"anyOf":[{"items":{"$ref":"#/components/schemas/CustomToolParam"},"type":"array"},{"type":"null"}],"title":"Customtools","description":"Hosted-mode only. User-defined function tools the agent can call during a call (look up a record, save call notes, etc.). Each points at your HTTPS endpoint; the voice provider invokes it and feeds the JSON response back to the agent. Ignored in webhook mode. Maximum 20 tools."},"voicemailMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voicemailmessage"},"callScreeningIdentity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningidentity"},"callScreeningPurpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningpurpose"},"sttMode":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["fast","accurate"],"title":"Sttmode","description":"Speech-to-text mode. 'fast' optimizes for latency, 'accurate' optimizes for transcription accuracy (~200ms additional latency)."},"ambientSound":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["none","office","coffee-shop","outdoor"],"title":"Ambientsound","description":"Background ambience to mask synthetic silence between turns. 'none' disables; 'office', 'coffee-shop', 'outdoor' enable a quiet bed."},"denoisingMode":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["noise-cancellation","noise-and-background-speech-cancellation"],"title":"Denoisingmode","description":"Audio denoising. 'noise-cancellation' (default) handles general noise. 'noise-and-background-speech-cancellation' is more aggressive for callers in cars, cafes, or near TVs."},"maxSilenceMs":{"anyOf":[{"type":"integer","maximum":3600000.0,"minimum":10000.0},{"type":"null"}],"title":"Maxsilencems","description":"Hang up the call after this many milliseconds of caller silence. Default 600000 (10 min). Raise for IVR/hold-music workflows; lower to fail fast on dead lines. Range 10000 (10s) to 3600000 (1 hour)."},"voiceSpeed":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.5},{"type":"null"}],"title":"Voicespeed","description":"Voice speed multiplier. 1.0 is normal pace; lower values slow speech (0.5 is half speed), higher values speed it up (2.0 is double). Range 0.5 to 2.0."},"interruptionSensitivity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Interruptionsensitivity","description":"How easily callers can interrupt the agent. 0 means the agent is never interrupted, 1 means the agent stops at the first sound. Default 0.8. Range 0.0 to 1.0."},"enableBackchannel":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enablebackchannel","description":"When true, the agent interjects short filler words like 'uh-huh' or 'mhmm' during longer caller utterances. Set false to keep the agent silent while the caller is speaking. Defaults to true."},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["af-ZA","ar-SA","az-AZ","bg-BG","bs-BA","ca-ES","cs-CZ","cy-GB","da-DK","de-DE","el-GR","en-AU","en-GB","en-IN","en-NZ","en-US","es-419","es-ES","fa-IR","fi-FI","fil-PH","fr-CA","fr-FR","gl-ES","he-IL","hi-IN","hr-HR","hu-HU","hy-AM","id-ID","is-IS","it-IT","ja-JP","kk-KZ","kn-IN","ko-KR","lt-LT","lv-LV","mk-MK","mr-IN","ms-MY","ne-NP","nl-BE","nl-NL","no-NO","pl-PL","pt-BR","pt-PT","ro-RO","ru-RU","sk-SK","sl-SI","sr-RS","sv-SE","sw-KE","ta-IN","th-TH","tr-TR","uk-UA","ur-IN","vi-VN","yue-CN","zh-CN"],"title":"Language","description":"BCP-47 locale that drives the agent's speech recognition and pronunciation. Defaults to 'en-US'. See the enum for the full set of supported codes."}},"type":"object","required":["name"],"title":"CreateAgentRequest"},"CreateContactRequest":{"properties":{"phoneNumber":{"type":"string","title":"Phonenumber"},"name":{"type":"string","title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["phoneNumber","name"],"title":"CreateContactRequest"},"CreateNumberRequest":{"properties":{"country":{"type":"string","title":"Country","default":"US"},"areaCode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Areacode"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"}},"type":"object","title":"CreateNumberRequest"},"CreateOutboundCallRequest":{"properties":{"agentId":{"type":"string","title":"Agentid","description":"Agent ID to make the call from"},"toNumber":{"type":"string","title":"Tonumber","description":"Phone number to call (E.164 format)"},"fromNumberId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fromnumberid","description":"Optional phone number ID to use as caller ID. Must belong to the agent. If omitted, the agent's first assigned number is used."},"initialGreeting":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initialgreeting","description":"Optional initial greeting to speak when recipient answers. Pass an empty string to have the agent stay silent and wait for the recipient to speak first."},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice","description":"Voice ID override for this call (uses agent's configured voice if omitted)"},"systemPrompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Systemprompt","description":"When provided, uses a built-in LLM for the conversation instead of forwarding to a webhook. The prompt defines the AI's personality and conversation topic."},"modelTier":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["turbo","balanced","max"],"title":"Modeltier","description":"Optional model tier override for this call's built-in conversation. Only applies when ``systemPrompt`` is provided; defaults to the agent's configured modelTier."},"variables":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Variables","description":"Optional per-call dynamic variables. Values are substituted into ``{{var_name}}`` placeholders in the agent's system prompt and initial greeting at call time. Requires either ``systemPrompt`` or a hosted-mode agent."},"callScreeningIdentity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningidentity","description":"For outbound calls that hit an automated call screener (e.g. iOS 26 Call Screening or Android Call Screen): the identity the agent gives when asked who is calling. Overrides the agent's stored default for this call. Both identity and purpose are required to enable screening; if only a purpose is set, the agent's name is used."},"callScreeningPurpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningpurpose","description":"For outbound calls that hit an automated call screener: the purpose the agent gives when asked why it is calling. Overrides the agent's stored default for this call."},"disableRecording":{"type":"boolean","title":"Disablerecording","description":"When true, no audio recording is stored for this call. The transcript is still captured and available via the transcript endpoints and the agent.call_ended webhook. Useful for calls where a party has not consented to being recorded (e.g. two-party consent states).","default":false}},"type":"object","required":["agentId","toNumber"],"title":"CreateOutboundCallRequest","description":"Request model for creating an outbound call."},"CreateSubAccountRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"CreateSubAccountRequest"},"CreateWebCallRequest":{"properties":{"agentId":{"type":"string","title":"Agentid","description":"Agent ID to start the web call with"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata to attach to the call"},"variables":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Variables","description":"Optional per-call dynamic variables. Values are substituted into ``{{var_name}}`` placeholders in the agent's system prompt and begin message at call time. Requires a hosted-mode agent."}},"type":"object","required":["agentId"],"title":"CreateWebCallRequest","description":"Request model for creating a browser-based web call."},"CustomToolParam":{"properties":{"name":{"type":"string","title":"Name","description":"Function name the agent calls. Letters, numbers, underscores, hyphens; max 64 chars. Must be unique and not a reserved built-in name."},"description":{"type":"string","title":"Description","description":"What the tool does and when to use it. The agent relies on this to decide when to call it."},"url":{"type":"string","title":"Url","description":"HTTPS endpoint the voice provider calls when the agent invokes this tool."},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["GET","POST"],"title":"Method","description":"HTTP method. Defaults to POST."},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers","description":"Optional HTTP headers sent with the request (e.g. an Authorization token for your endpoint)."},"parameters":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Parameters","description":"JSON Schema object describing the arguments the agent fills in. Omit for a no-argument tool."},"timeoutMs":{"anyOf":[{"type":"integer","maximum":120000.0,"minimum":1000.0},{"type":"null"}],"title":"Timeoutms","description":"How long to wait for your endpoint before giving up. Range 1000-120000 ms."},"speakDuringExecution":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Speakduringexecution","description":"When true, the agent speaks executionMessage while the tool runs."},"executionMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Executionmessage","description":"What the agent says while the tool runs (used when speakDuringExecution is true)."}},"type":"object","required":["name","description","url"],"title":"CustomToolParam"},"DailyUsagePoint":{"properties":{"date":{"type":"string","title":"Date"},"messages":{"type":"integer","title":"Messages"},"calls":{"type":"integer","title":"Calls"},"webhooks":{"type":"integer","title":"Webhooks"}},"type":"object","required":["date","messages","calls","webhooks"],"title":"DailyUsagePoint"},"DailyUsageResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DailyUsagePoint"},"type":"array","title":"Data"},"days":{"type":"integer","title":"Days"}},"type":"object","required":["data","days"],"title":"DailyUsageResponse"},"DeleteAgentResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["success","id","name"],"title":"DeleteAgentResponse"},"GroupParticipant":{"properties":{"identifier":{"type":"string","title":"Identifier"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["identifier"],"title":"GroupParticipant","description":"A member of a group chat, mirrored from Conversation.participants."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LocationRefreshResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"pollAfterSeconds":{"type":"integer","title":"Pollafterseconds","default":20}},"type":"object","required":["success"],"title":"LocationRefreshResponse"},"LocationResponse":{"properties":{"phoneNumber":{"type":"string","title":"Phonenumber"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"status":{"type":"string","title":"Status"},"lastUpdated":{"type":"integer","title":"Lastupdated"}},"type":"object","required":["phoneNumber","status","lastUpdated"],"title":"LocationResponse"},"MessageInConversation":{"properties":{"id":{"type":"string","title":"Id"},"body":{"type":"string","title":"Body"},"fromNumber":{"type":"string","title":"Fromnumber"},"toNumber":{"type":"string","title":"Tonumber"},"direction":{"type":"string","title":"Direction"},"senderIdentifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Senderidentifier"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"failureReason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failurereason"},"mediaUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mediaurl"},"mediaUrls":{"items":{"type":"string"},"type":"array","title":"Mediaurls","default":[]},"receivedAt":{"type":"string","format":"date-time","title":"Receivedat"},"reactions":{"items":{"$ref":"#/components/schemas/ReactionInConversation"},"type":"array","title":"Reactions","default":[]},"replyTo":{"anyOf":[{"$ref":"#/components/schemas/ReplyToInConversation"},{"type":"null"}]}},"type":"object","required":["id","body","fromNumber","toNumber","direction","receivedAt"],"title":"MessageInConversation"},"MessageListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MessageResponse"},"type":"array","title":"Data"},"hasMore":{"type":"boolean","title":"Hasmore"}},"type":"object","required":["data","hasMore"],"title":"MessageListResponse"},"MessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"from_":{"type":"string","title":"From "},"to":{"type":"string","title":"To"},"body":{"type":"string","title":"Body"},"direction":{"type":"string","title":"Direction"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"failureReason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failurereason"},"receivedAt":{"type":"string","format":"date-time","title":"Receivedat"}},"type":"object","required":["id","from_","to","body","direction","receivedAt"],"title":"MessageResponse"},"MessagesListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MessageInConversation"},"type":"array","title":"Data"},"hasMore":{"type":"boolean","title":"Hasmore"}},"type":"object","required":["data","hasMore"],"title":"MessagesListResponse"},"MonthlyUsagePoint":{"properties":{"month":{"type":"string","title":"Month"},"messages":{"type":"integer","title":"Messages"},"calls":{"type":"integer","title":"Calls"},"webhooks":{"type":"integer","title":"Webhooks"}},"type":"object","required":["month","messages","calls","webhooks"],"title":"MonthlyUsagePoint"},"MonthlyUsageResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MonthlyUsagePoint"},"type":"array","title":"Data"},"months":{"type":"integer","title":"Months"}},"type":"object","required":["data","months"],"title":"MonthlyUsageResponse"},"NumberLimits":{"properties":{"used":{"type":"integer","title":"Used"},"limit":{"type":"integer","title":"Limit"},"remaining":{"type":"integer","title":"Remaining"}},"type":"object","required":["used","limit","remaining"],"title":"NumberLimits"},"NumberLookupEntry":{"properties":{"phoneNumber":{"type":"string","title":"Phonenumber"},"lineType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linetype"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"rcsEnabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Rcsenabled"}},"type":"object","required":["phoneNumber"],"title":"NumberLookupEntry"},"NumberLookupResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/NumberLookupEntry"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"NumberLookupResponse"},"NumberUsageItem":{"properties":{"numberId":{"type":"string","title":"Numberid"},"phoneNumber":{"type":"string","title":"Phonenumber"},"country":{"type":"string","title":"Country"},"status":{"type":"string","title":"Status"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"agentName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentname"},"messages":{"type":"integer","title":"Messages"},"calls":{"type":"integer","title":"Calls"}},"type":"object","required":["numberId","phoneNumber","country","status","messages","calls"],"title":"NumberUsageItem"},"NumberUsageResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/NumberUsageItem"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"NumberUsageResponse"},"OrganizationType":{"type":"string","enum":["sole_proprietor","private_corporation","public_corporation","llc","partnership","non_profit","co_op","government"],"title":"OrganizationType"},"OriginationUri":{"properties":{"name":{"type":"string","title":"Name","default":""},"sip_uri":{"type":"string","title":"Sip Uri"},"priority":{"type":"integer","title":"Priority","default":10},"weight":{"type":"integer","title":"Weight","default":10}},"type":"object","required":["sip_uri"],"title":"OriginationUri"},"PaginatedDeliveriesResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/WebhookDeliveryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"offset":{"type":"integer","title":"Offset"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","offset","limit"],"title":"PaginatedDeliveriesResponse"},"PhoneNumberListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PhoneNumberResponse"},"type":"array","title":"Data"},"hasMore":{"type":"boolean","title":"Hasmore"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","hasMore","total"],"title":"PhoneNumberListResponse"},"PhoneNumberResponse":{"properties":{"id":{"type":"string","title":"Id"},"phoneNumber":{"type":"string","title":"Phonenumber"},"country":{"type":"string","title":"Country"},"status":{"type":"string","title":"Status"},"type":{"type":"string","title":"Type","default":"sms"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"outboundSms":{"type":"string","enum":["enabled","activating","registration_required"],"title":"Outboundsms","default":"enabled"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","phoneNumber","country","status","createdAt"],"title":"PhoneNumberResponse"},"ReactionInConversation":{"properties":{"id":{"type":"string","title":"Id"},"reactionType":{"type":"string","title":"Reactiontype"},"fromNumber":{"type":"string","title":"Fromnumber"},"direction":{"type":"string","title":"Direction"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","reactionType","fromNumber","direction","createdAt"],"title":"ReactionInConversation"},"RegistrationBrandDetail":{"properties":{"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"ein":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ein","description":"The EIN / Tax ID as submitted."},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"street_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Address"},"street_address_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Address 2"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip Code"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},"type":"object","title":"RegistrationBrandDetail"},"RegistrationCampaignDetail":{"properties":{"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Case"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"message_samples":{"items":{"type":"string"},"type":"array","title":"Message Samples","default":[]},"consent_flow":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consent Flow"},"opt_in_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opt In Image Url"},"includes":{"items":{"type":"string"},"type":"array","title":"Includes","description":"Content types detected in the submitted samples, e.g. 'links', 'phone_numbers'.","default":[]}},"type":"object","title":"RegistrationCampaignDetail"},"RegistrationDetailResponse":{"properties":{"campaign_status":{"type":"string","title":"Campaign Status"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"sub_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Account Id","description":"Set when the registration lives on a sub-account of the calling account."},"brand":{"anyOf":[{"$ref":"#/components/schemas/RegistrationBrandDetail"},{"type":"null"}]},"campaign":{"anyOf":[{"$ref":"#/components/schemas/RegistrationCampaignDetail"},{"type":"null"}]}},"type":"object","required":["campaign_status"],"title":"RegistrationDetailResponse"},"RegistrationRequest":{"properties":{"registration_type":{"type":"string","enum":["sole_proprietor","standard_brand","high_volume"],"title":"Registration Type","description":"'sole_proprietor' ($25, no EIN, 1 number), 'standard_brand' ($25, EIN, low volume), or 'high_volume' ($70, EIN + external brand vetting for the highest carrier limits)"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"phone_number":{"type":"string","title":"Phone Number","description":"E.164 format, e.g. +15551234567"},"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name","description":"Legal/registered business name. Required for standard_brand and high_volume."},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name","description":"Public-facing brand name if different from business_name."},"organization_type":{"anyOf":[{"$ref":"#/components/schemas/OrganizationType"},{"type":"null"}],"description":"Required for standard_brand and high_volume."},"contact_title":{"anyOf":[{"$ref":"#/components/schemas/ContactTitle"},{"type":"null"}],"description":"Your role. Required for standard_brand and high_volume."},"contact_title_other":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Title Other","description":"Custom title when contact_title is 'other'."},"ein":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ein","description":"EIN / Tax ID. Required for standard_brand and high_volume."},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry","description":"e.g. technology, real_estate, retail, healthcare"},"business_regions":{"items":{"type":"string"},"type":"array","title":"Business Regions","default":["usa_and_canada"]},"street_address":{"type":"string","title":"Street Address"},"street_address_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Address 2"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"zip_code":{"type":"string","title":"Zip Code"},"country":{"type":"string","title":"Country","default":"US"},"planned_numbers":{"type":"integer","title":"Planned Numbers","description":"Number of phone numbers you plan to use","default":1},"description":{"type":"string","maxLength":4096,"minLength":40,"title":"Description","description":"What your business does, who you message, and what types of messages you send. Min 40 chars."},"use_cases":{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","maxItems":5,"minItems":1,"title":"Use Cases","description":"1-5 specific use cases for your SMS campaign."},"volume":{"allOf":[{"$ref":"#/components/schemas/Volume"}],"description":"Expected message volume.","default":"low"},"message_samples":{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":2,"title":"Message Samples","description":"2-5 example messages. Each must be 20-1024 chars and include your brand name."},"consent_flow":{"type":"string","maxLength":4096,"minLength":40,"title":"Consent Flow","description":"How users opt in to receive messages. Min 40 chars."},"privacy_policy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Url","description":"Required for standard_brand and high_volume. Optional for sole_proprietor."},"terms_of_service_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Of Service Url","description":"Required for standard_brand and high_volume. Optional for sole_proprietor."},"opt_in_image_url":{"type":"string","title":"Opt In Image Url","description":"Publicly accessible URL to a screenshot of your opt-in flow (PNG, JPG, WEBP, or GIF, max 2MB)"},"includes":{"items":{"$ref":"#/components/schemas/CampaignInclude"},"type":"array","title":"Includes","description":"Content types included in messages.","default":[]},"link_sample":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Link Sample","description":"Example URL if messages contain links."},"create_sub_account":{"type":"boolean","title":"Create Sub Account","description":"Create a dedicated sub-account for this campaign. Set false to register on your main account.","default":true}},"type":"object","required":["registration_type","first_name","last_name","email","phone_number","street_address","city","state","zip_code","description","use_cases","message_samples","consent_flow","opt_in_image_url"],"title":"RegistrationRequest"},"RegistrationResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"message":{"type":"string","title":"Message"},"campaign_status":{"type":"string","title":"Campaign Status"},"sub_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Account Id"},"fee_cents":{"type":"integer","title":"Fee Cents"}},"type":"object","required":["ok","message","campaign_status","fee_cents"],"title":"RegistrationResponse"},"RegistrationUpdateRequest":{"properties":{"business_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Name","description":"Legal/registered business name."},"brand_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Name","description":"Public-facing brand name if different from business_name."},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"description":{"anyOf":[{"type":"string","maxLength":4096,"minLength":40},{"type":"null"}],"title":"Description","description":"What your business does, who you message, and what types of messages you send. Min 40 chars."},"use_cases":{"anyOf":[{"items":{"$ref":"#/components/schemas/UseCase"},"type":"array","maxItems":5,"minItems":1},{"type":"null"}],"title":"Use Cases","description":"1-5 specific use cases for your SMS campaign."},"volume":{"anyOf":[{"$ref":"#/components/schemas/Volume"},{"type":"null"}],"description":"Expected message volume."},"message_samples":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":2},{"type":"null"}],"title":"Message Samples","description":"2-5 example messages. Each must be 20-1024 chars and include your brand name."},"consent_flow":{"anyOf":[{"type":"string","maxLength":4096,"minLength":40},{"type":"null"}],"title":"Consent Flow","description":"How users opt in to receive messages. Min 40 chars."},"privacy_policy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Policy Url"},"terms_of_service_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Of Service Url"},"opt_in_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opt In Image Url","description":"Publicly accessible URL to a screenshot of your opt-in flow (PNG, JPG, WEBP, or GIF, max 2MB)"},"includes":{"anyOf":[{"items":{"$ref":"#/components/schemas/CampaignInclude"},"type":"array"},{"type":"null"}],"title":"Includes","description":"Content types included in messages."},"link_sample":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Link Sample","description":"Example URL if messages contain links."}},"type":"object","title":"RegistrationUpdateRequest","description":"Partial update to an existing registration. Every field is optional;\nprovide only what changed. No fee — updates go through review before\ntaking effect."},"RegistrationUpdateResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"message":{"type":"string","title":"Message"},"campaign_status":{"type":"string","title":"Campaign Status"},"updated_fields":{"items":{"type":"string"},"type":"array","title":"Updated Fields"},"sub_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Account Id","description":"Set when the update was applied to a registration on a sub-account of the calling account (the default for POST /v1/register)."}},"type":"object","required":["ok","message","campaign_status","updated_fields"],"title":"RegistrationUpdateResponse"},"ReplyToInConversation":{"properties":{"messageId":{"type":"string","title":"Messageid"},"message":{"type":"string","title":"Message"},"mediaUrls":{"items":{"type":"string"},"type":"array","title":"Mediaurls","default":[]}},"type":"object","required":["messageId","message"],"title":"ReplyToInConversation"},"SendMessageRequest":{"properties":{"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"to_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Number","description":"Recipient of an existing chat: a phone (any format, normalized to E.164), US short code, email, or a group id (grp_...). Provide this OR `recipients` (to start a new group), not both."},"recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Recipients","description":"Start a NEW iMessage group by listing 2 or more recipients (phones or emails). The first message is delivered to all of them, an iMessage group is created, and the response `to_number` returns the new group id (grp_...) to use for follow-up sends. iMessage numbers only.","examples":[["+14155551234","+16505551234"]]},"body":{"type":"string","title":"Body"},"media_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Url"},"media_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Media Urls"},"number_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number Id"},"from_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Number"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["whatsapp"],"title":"Channel","description":"Optional transport override for numbers connected to multiple channels. Pass \"whatsapp\" to send via the number's WhatsApp connection instead of its default SMS/iMessage transport. WhatsApp-only numbers use WhatsApp automatically.","examples":["whatsapp"]},"send_style":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["celebration","fireworks","lasers","love","confetti","balloons","spotlight","echo","invisible","gentle","loud","slam"],"title":"Send Style","description":"Optional iMessage expressive effect. Only valid on iMessage-capable numbers. Supported values: celebration, fireworks, lasers, love, confetti, balloons, spotlight, echo, invisible, gentle, loud, slam.","examples":["confetti"]},"reply_to_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To Message Id","description":"Optional parent message ID (AgentPhone Message.id) to send this message as an inline reply. Supported on iMessage and WhatsApp; the parent must be in the same chat and sent from the same number.","examples":["cmat9x3i20000a2m6y3d9r1u2"]},"buttons":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Buttons","description":"WhatsApp only: up to 3 tappable reply buttons (each max 20 chars). The tapped button's text arrives as a normal inbound message. Pass media_urls alongside buttons to render that image, video, or document as a header above the text, in the same bubble as the buttons (audio has no header form and is rejected).","examples":[["Confirm","Reschedule","Cancel"]]},"list":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"List","description":"WhatsApp only: a tap-to-open list menu. {\"button\": \"View options\", \"options\": [\"Small\", \"Medium\", \"Large\"]} (max 10 options, 24 chars each), or full form with sections: {\"button\": str, \"sections\": [{\"title\": str, \"rows\": [{\"id\": str, \"title\": str, \"description\": str}]}]}."},"cta":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Cta","description":"WhatsApp only: a single tappable link button on an ordinary message. {\"display_text\": \"Track order\", \"url\": \"https://example.com/t/123\", \"footer\": \"Tap to see live status\"} — `footer` is optional. The url must be absolute and https. Unlike a URL button on a template this needs no Meta review, but as an ordinary message it only reaches someone inside the 24h window.","examples":[{"display_text":"Track order","url":"https://example.com/track/123"}]},"template":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Template","description":"WhatsApp only: send a Meta-approved message template. This is the only way to reach someone outside the 24h customer service window. {\"name\": \"order_shipped\", \"language\": \"en_US\", \"variables\": [\"1234\"]} — `variables` fill the template body, and `header_variables` does the same for a text header. Pass an array for a POSITIONAL template ({{1}}, {{2}}) or an object for a NAMED one, e.g. {\"variables\": {\"first_name\": \"Pablo\"}} for a body reading \"Thanks {{first_name}}!\". The shape must match how the template was authored. `language` defaults to en_US. The template must already be APPROVED (see the templates endpoints). `body` is NOT delivered for template sends — WhatsApp renders the approved template content — it is kept only as a fallback label if we can't render the template for your message history.","examples":[{"language":"en_US","name":"order_shipped","variables":["1234"]}]}},"type":"object","required":["body"],"title":"SendMessageRequest"},"SendMessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"channel":{"type":"string","title":"Channel"},"from_number":{"type":"string","title":"From Number"},"to_number":{"type":"string","title":"To Number"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"media_urls":{"items":{"type":"string"},"type":"array","title":"Media Urls","default":[]},"reply_to_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reply To Message Id"},"reply_parent_unresolved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reply Parent Unresolved"}},"type":"object","required":["id","status","channel","from_number","to_number"],"title":"SendMessageResponse"},"SendReactionRequest":{"properties":{"reaction":{"type":"string","title":"Reaction","description":"iMessage reaction to send. Classic tapbacks (love, like, dislike, laugh, emphasize, question) are supported on every iMessage line. Custom emoji reactions (e.g. \"🔥\", \"😂\", \"👍\") are supported on newer lines only; lines that don't support them return a 400 with upgrade instructions. Custom emoji also require the recipient to be on macOS 14 / iOS 17 or later.","examples":["love","🔥"]}},"type":"object","required":["reaction"],"title":"SendReactionRequest"},"SendReactionResponse":{"properties":{"id":{"type":"string","title":"Id"},"reaction_type":{"type":"string","title":"Reaction Type"},"message_id":{"type":"string","title":"Message Id"},"channel":{"type":"string","title":"Channel"}},"type":"object","required":["id","reaction_type","message_id","channel"],"title":"SendReactionResponse"},"SendTypingResponse":{"properties":{"conversationId":{"type":"string","title":"Conversationid"},"channel":{"type":"string","title":"Channel"},"status":{"type":"string","title":"Status"}},"type":"object","required":["conversationId","channel","status"],"title":"SendTypingResponse"},"SendVerificationRequest":{"properties":{"phone_number":{"type":"string","title":"Phone Number","description":"Phone number in E.164 format (e.g. +639277372243)"}},"type":"object","required":["phone_number"],"title":"SendVerificationRequest"},"SendVerificationResponse":{"properties":{"verification_id":{"type":"string","title":"Verification Id","description":"Pass this to POST /v1/verify/check along with the code the user entered."},"status":{"type":"string","title":"Status","description":"Verification status. `pending` until the code is checked."}},"type":"object","required":["verification_id","status"],"title":"SendVerificationResponse"},"SetBackgroundRequest":{"properties":{"image_url":{"type":"string","title":"Image Url","description":"HTTPS URL of the background image. JPEG/PNG/GIF/WebP/HEIC, max 10MB. Recipients on iOS < 18 see the default background; no error is raised.","examples":["https://example.com/wallpaper.jpg"]}},"type":"object","required":["image_url"],"title":"SetBackgroundRequest"},"SetBackgroundResponse":{"properties":{"conversationId":{"type":"string","title":"Conversationid"},"channel":{"type":"string","title":"Channel"},"hasBackground":{"type":"boolean","title":"Hasbackground"},"backgroundId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backgroundid"},"backgroundVersion":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Backgroundversion"},"changed":{"type":"boolean","title":"Changed"}},"type":"object","required":["conversationId","channel","hasBackground","changed"],"title":"SetBackgroundResponse"},"SipTrunkCredential":{"properties":{"username":{"type":"string","title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"passwordLast4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Passwordlast4"},"credentialListName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Credentiallistname"}},"type":"object","required":["username"],"title":"SipTrunkCredential"},"SipTrunkDeleteResponse":{"properties":{"status":{"type":"string","title":"Status"},"id":{"type":"string","title":"Id"}},"type":"object","required":["status","id"],"title":"SipTrunkDeleteResponse"},"SipTrunkListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SipTrunkResponse"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"SipTrunkListResponse"},"SipTrunkResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"provider":{"type":"string","title":"Provider"},"encrypted":{"type":"boolean","title":"Encrypted"},"transport":{"type":"string","title":"Transport"},"mediaEncryption":{"type":"string","title":"Mediaencryption"},"transfers":{"type":"string","title":"Transfers"},"transferCallerId":{"type":"string","title":"Transfercallerid"},"terminationSipUri":{"type":"string","title":"Terminationsipuri"},"originationUris":{"items":{"$ref":"#/components/schemas/OriginationUri"},"type":"array","title":"Originationuris"},"allowedIps":{"items":{"$ref":"#/components/schemas/AllowedIp"},"type":"array","title":"Allowedips"},"proxyIps":{"items":{"type":"string"},"type":"array","title":"Proxyips"},"createdAt":{"type":"string","title":"Createdat"},"credentials":{"anyOf":[{"items":{"$ref":"#/components/schemas/SipTrunkCredential"},"type":"array"},{"type":"null"}],"title":"Credentials"}},"type":"object","required":["id","name","provider","encrypted","transport","mediaEncryption","transfers","transferCallerId","terminationSipUri","createdAt"],"title":"SipTrunkResponse"},"UpdateAgentRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"voiceMode":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["webhook","hosted"],"title":"Voicemode"},"enableMessaging":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enablemessaging","description":"When true, hosted-mode agents can send and read SMS/iMessage during calls."},"modelTier":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["turbo","balanced","max"],"title":"Modeltier"},"systemPrompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Systemprompt"},"beginMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Beginmessage"},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice"},"transferNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transfernumber"},"customTools":{"anyOf":[{"items":{"$ref":"#/components/schemas/CustomToolParam"},"type":"array"},{"type":"null"}],"title":"Customtools","description":"Hosted-mode only. User-defined function tools the agent can call during a call. Replaces the full set on each update; send [] to clear all tools, or omit to leave unchanged. Ignored in webhook mode. Maximum 20 tools."},"voicemailMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voicemailmessage"},"callScreeningIdentity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningidentity"},"callScreeningPurpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Callscreeningpurpose"},"sttMode":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["fast","accurate"],"title":"Sttmode","description":"Speech-to-text mode. 'fast' optimizes for latency, 'accurate' optimizes for transcription accuracy (~200ms additional latency)."},"ambientSound":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["none","office","coffee-shop","outdoor"],"title":"Ambientsound","description":"Background ambience to mask synthetic silence between turns. 'none' disables; 'office', 'coffee-shop', 'outdoor' enable a quiet bed."},"denoisingMode":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["noise-cancellation","noise-and-background-speech-cancellation"],"title":"Denoisingmode","description":"Audio denoising. 'noise-cancellation' (default) handles general noise. 'noise-and-background-speech-cancellation' is more aggressive for callers in cars, cafes, or near TVs."},"maxSilenceMs":{"anyOf":[{"type":"integer","maximum":3600000.0,"minimum":10000.0},{"type":"null"}],"title":"Maxsilencems","description":"Hang up the call after this many milliseconds of caller silence. Default 600000 (10 min). Raise for IVR/hold-music workflows; lower to fail fast on dead lines. Range 10000 (10s) to 3600000 (1 hour)."},"voiceSpeed":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.5},{"type":"null"}],"title":"Voicespeed","description":"Voice speed multiplier. 1.0 is normal pace; lower slows speech (0.5 is half speed), higher speeds it up (2.0 is double). Range 0.5 to 2.0."},"interruptionSensitivity":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Interruptionsensitivity","description":"How easily callers can interrupt the agent. 0 means the agent is never interrupted, 1 means the agent stops at the first sound. Default 0.8. Range 0.0 to 1.0."},"enableBackchannel":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enablebackchannel","description":"When true, the agent interjects short filler words like 'uh-huh' or 'mhmm' during longer caller utterances. Set false to keep the agent silent while the caller is speaking."},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"enum":["af-ZA","ar-SA","az-AZ","bg-BG","bs-BA","ca-ES","cs-CZ","cy-GB","da-DK","de-DE","el-GR","en-AU","en-GB","en-IN","en-NZ","en-US","es-419","es-ES","fa-IR","fi-FI","fil-PH","fr-CA","fr-FR","gl-ES","he-IL","hi-IN","hr-HR","hu-HU","hy-AM","id-ID","is-IS","it-IT","ja-JP","kk-KZ","kn-IN","ko-KR","lt-LT","lv-LV","mk-MK","mr-IN","ms-MY","ne-NP","nl-BE","nl-NL","no-NO","pl-PL","pt-BR","pt-PT","ro-RO","ru-RU","sk-SK","sl-SI","sr-RS","sv-SE","sw-KE","ta-IN","th-TH","tr-TR","uk-UA","ur-IN","vi-VN","yue-CN","zh-CN"],"title":"Language","description":"BCP-47 locale that drives the agent's speech recognition and pronunciation. See the enum for the full set of supported codes."}},"type":"object","title":"UpdateAgentRequest"},"UpdateContactRequest":{"properties":{"phoneNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phonenumber"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"UpdateContactRequest"},"UpdateConversationRequest":{"properties":{"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"},"group_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Name","description":"New display name for a group conversation. iMessage groups only; also renames the underlying iMessage thread. Ignored (omit) for 1:1 chats.","examples":["Weekend Trip"]}},"type":"object","title":"UpdateConversationRequest","description":"Request body for updating a conversation."},"UpdateSubAccountRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"UpdateSubAccountRequest"},"UsageResponse":{"properties":{"numbers":{"$ref":"#/components/schemas/NumberLimits"},"stats":{"$ref":"#/components/schemas/UsageStats"},"periodStart":{"type":"string","title":"Periodstart"},"periodEnd":{"type":"string","title":"Periodend"}},"type":"object","required":["numbers","stats","periodStart","periodEnd"],"title":"UsageResponse"},"UsageStats":{"properties":{"totalMessages":{"type":"integer","title":"Totalmessages"},"messagesLast24h":{"type":"integer","title":"Messageslast24H"},"messagesLast7d":{"type":"integer","title":"Messageslast7D"},"messagesLast30d":{"type":"integer","title":"Messageslast30D"},"smsSegmentsLast30d":{"type":"integer","title":"Smssegmentslast30D","default":0},"totalCalls":{"type":"integer","title":"Totalcalls"},"callsLast24h":{"type":"integer","title":"Callslast24H"},"callsLast7d":{"type":"integer","title":"Callslast7D"},"callsLast30d":{"type":"integer","title":"Callslast30D"},"totalWebhookDeliveries":{"type":"integer","title":"Totalwebhookdeliveries"},"successfulWebhookDeliveries":{"type":"integer","title":"Successfulwebhookdeliveries"},"failedWebhookDeliveries":{"type":"integer","title":"Failedwebhookdeliveries"}},"type":"object","required":["totalMessages","messagesLast24h","messagesLast7d","messagesLast30d","totalCalls","callsLast24h","callsLast7d","callsLast30d","totalWebhookDeliveries","successfulWebhookDeliveries","failedWebhookDeliveries"],"title":"UsageStats"},"UseCase":{"type":"string","enum":["account_notification","customer_care","delivery_notification","fraud_alert","higher_education","marketing","polling_voting","public_service_announcement","security_alert","two_factor_authentication"],"title":"UseCase"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"Volume":{"type":"string","enum":["low","high"],"title":"Volume"},"WebhookCreateRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"contextLimit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contextlimit"},"timeout":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timeout"}},"type":"object","required":["url"],"title":"WebhookCreateRequest"},"WebhookDeliveryResponse":{"properties":{"id":{"type":"string","title":"Id"},"messageId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Messageid"},"eventType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eventtype"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"status":{"type":"string","title":"Status"},"httpStatus":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Httpstatus"},"errorMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Errormessage"},"responseBody":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Responsebody"},"attemptCount":{"type":"integer","title":"Attemptcount"},"lastAttemptAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lastattemptat"},"nextRetryAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Nextretryat"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","messageId","eventType","channel","status","httpStatus","errorMessage","responseBody","attemptCount","lastAttemptAt","nextRetryAt","createdAt"],"title":"WebhookDeliveryResponse"},"WebhookDeliveryStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"success":{"type":"integer","title":"Success"},"failed":{"type":"integer","title":"Failed"},"pending":{"type":"integer","title":"Pending"},"successRate":{"type":"number","title":"Successrate"},"byEventType":{"additionalProperties":{"additionalProperties":{"type":"integer"},"type":"object"},"type":"object","title":"Byeventtype"},"byHour":{"items":{"type":"object"},"type":"array","title":"Byhour"}},"type":"object","required":["total","success","failed","pending","successRate","byEventType","byHour"],"title":"WebhookDeliveryStatsResponse"},"WebhookResponse":{"properties":{"id":{"type":"string","title":"Id"},"url":{"type":"string","title":"Url"},"secret":{"type":"string","title":"Secret"},"status":{"type":"string","title":"Status"},"contextLimit":{"type":"integer","title":"Contextlimit"},"timeout":{"type":"integer","title":"Timeout"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","url","secret","status","contextLimit","timeout","createdAt"],"title":"WebhookResponse"},"WhatsAppConnectRequest":{"properties":{"code":{"type":"string","minLength":1,"title":"Code","description":"Exchangeable token code from Embedded Signup"},"waba_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Waba Id","description":"Customer WABA ID from the ES message event. Optional: when the browser handoff is blocked we discover it from the exchanged token."},"phone_number_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number Id","description":"Customer business phone number ID (absent for WABA-only signups)"},"business_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Id","description":"Customer business portfolio ID"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id","description":"Optional agent to attach the number to"}},"type":"object","required":["code"],"title":"WhatsAppConnectRequest"},"WhatsAppNumberConnectRequest":{"properties":{"phone_number_id":{"type":"string","minLength":1,"title":"Phone Number Id","description":"Meta phone_number_id of a number on this WABA"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id","description":"Optional agent to attach the number to"}},"type":"object","required":["phone_number_id"],"title":"WhatsAppNumberConnectRequest"},"WhatsAppTemplateCreateRequest":{"properties":{"name":{"type":"string","maxLength":512,"minLength":1,"title":"Name","description":"Template name. Meta requires lowercase letters, digits and underscores, and it must be unique on the WABA.","examples":["order_shipped"]},"language":{"type":"string","minLength":2,"title":"Language","description":"Meta language code, e.g. en_US or es_MX.","default":"en_US"},"category":{"type":"string","title":"Category","description":"MARKETING, UTILITY, or AUTHENTICATION. Meta may recategorize based on the content."},"parameter_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parameter Format","description":"How the body's placeholders are written: POSITIONAL for {{1}}, {{2}} or NAMED for {{first_name}}. Omit for Meta's default, POSITIONAL. A template's format also dictates the shape you must send: positional templates take an array of variables, named templates take an object keyed by parameter name.","examples":["NAMED"]},"components":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Components","description":"Meta's component array, passed through as given. Must include a BODY. Required unless `library_template_name` is set, which supplies its own. Positional: [{\"type\": \"BODY\", \"text\": \"Your order {{1}} has shipped.\", \"example\": {\"body_text\": [[\"1234\"]]}}]. Named: [{\"type\": \"BODY\", \"text\": \"Thanks {{first_name}}!\", \"example\": {\"body_text_named_params\": [{\"param_name\": \"first_name\", \"example\": \"Pablo\"}]}}]. Components containing variables require an `example` or Meta rejects the submission."},"library_template_name":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Library Template Name","description":"Build from Meta's Template Library instead of authoring one. Use the library entry's slug, e.g. \"appointment_confirmation_1\" (visible under each card in WhatsApp Manager > Template library). A library template used unchanged skips Meta's review and is usable immediately, so this is the fastest route to a sendable template. Omit `components` when using it.","examples":["appointment_confirmation_1"]},"library_template_button_inputs":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Library Template Button Inputs","description":"Library templates only: fills in the buttons the library entry ships with. Each entry takes {\"type\", \"phone_number\", \"url\", \"otp_type\", \"zero_tap_terms_accepted\", \"supported_apps\"} as the button requires — a URL button needs your url, a CALL button your phone number."},"library_template_body_inputs":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Library Template Body Inputs","description":"Library templates only: toggles the optional body lines a library entry offers. {\"add_contact_number\", \"add_learn_more_link\", \"add_security_recommendation\", \"add_track_package_link\", \"code_expiration_minutes\"}."}},"type":"object","required":["name","category"],"title":"WhatsAppTemplateCreateRequest","description":"A template submission, passed through to Meta close to verbatim.\n\nOnly structurally-required checks happen here. Meta owns the authoring\nrules (name casing, variable numbering and placement, category fit) and\nreturns specific, actionable errors for them — a partial local validator\nwould reject payloads Meta would have accepted."},"app__routes__agents__ConversationListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/app__routes__agents__ConversationSummary"},"type":"array","title":"Data"},"hasMore":{"type":"boolean","title":"Hasmore"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","hasMore","total"],"title":"ConversationListResponse"},"app__routes__agents__ConversationSummary":{"properties":{"id":{"type":"string","title":"Id"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"phoneNumberId":{"type":"string","title":"Phonenumberid"},"phoneNumber":{"type":"string","title":"Phonenumber"},"participant":{"type":"string","title":"Participant"},"lastMessageAt":{"type":"string","format":"date-time","title":"Lastmessageat"},"lastMessagePreview":{"type":"string","title":"Lastmessagepreview"},"messageCount":{"type":"integer","title":"Messagecount"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","agentId","phoneNumberId","phoneNumber","participant","lastMessageAt","lastMessagePreview","messageCount","createdAt"],"title":"ConversationSummary"},"app__routes__conversations__ConversationListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/app__routes__conversations__ConversationSummary"},"type":"array","title":"Data"},"hasMore":{"type":"boolean","title":"Hasmore"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","hasMore","total"],"title":"ConversationListResponse"},"app__routes__conversations__ConversationSummary":{"properties":{"id":{"type":"string","title":"Id"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"phoneNumberId":{"type":"string","title":"Phonenumberid"},"phoneNumber":{"type":"string","title":"Phonenumber"},"participant":{"type":"string","title":"Participant"},"channel":{"type":"string","title":"Channel","default":"native"},"isGroup":{"type":"boolean","title":"Isgroup","default":false},"groupId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groupid"},"groupName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groupname"},"groupIconUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groupiconurl"},"participants":{"anyOf":[{"items":{"$ref":"#/components/schemas/GroupParticipant"},"type":"array"},{"type":"null"}],"title":"Participants"},"lastMessageAt":{"type":"string","format":"date-time","title":"Lastmessageat"},"lastMessagePreview":{"type":"string","title":"Lastmessagepreview"},"messageCount":{"type":"integer","title":"Messagecount"},"metadata":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Metadata"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","phoneNumberId","phoneNumber","participant","lastMessageAt","lastMessagePreview","messageCount","createdAt"],"title":"ConversationSummary"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}