> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.vapi.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server.

# List Phone Numbers

GET https://api.vapi.ai/v2/phone-number

Returns a paginated list of phone numbers for the authenticated organization. Search by name, number, or SIP URI using a partial, case-insensitive match, and filter by creation or update timestamps.

Reference: https://docs.vapi.ai/api-reference/phone-numbers/list

## Authentication

- `Authorization` header (bearer token, required) — Authenticate server-side requests with a private Vapi API key. Create or copy a key from the [Vapi Dashboard](https://dashboard.vapi.ai) and send it in the `Authorization` header as `Bearer <token>`. Keep private API keys out of client-side code and public repositories.

## Request

### Query parameters

- `search` (string, optional) — This will search phone numbers by name, number, or SIP URI (partial match, case-insensitive).
- `page` (double, optional) — This is the page number to return. Defaults to 1.
- `sortOrder` (enum, optional) — This is the sort order for pagination. Defaults to 'DESC'.
  - Allowed values: `ASC`, `DESC`
- `sortBy` (enum, optional) — This is the column to sort by. Defaults to 'createdAt'.
  - Allowed values: `createdAt`, `duration`, `cost`
- `limit` (double, optional) — This is the maximum number of items to return. Defaults to 100.
- `createdAtGt` (datetime, optional) — This will return items where the createdAt is greater than the specified value.
- `createdAtLt` (datetime, optional) — This will return items where the createdAt is less than the specified value.
- `createdAtGe` (datetime, optional) — This will return items where the createdAt is greater than or equal to the specified value.
- `createdAtLe` (datetime, optional) — This will return items where the createdAt is less than or equal to the specified value.
- `updatedAtGt` (datetime, optional) — This will return items where the updatedAt is greater than the specified value.
- `updatedAtLt` (datetime, optional) — This will return items where the updatedAt is less than the specified value.
- `updatedAtGe` (datetime, optional) — This will return items where the updatedAt is greater than or equal to the specified value.
- `updatedAtLe` (datetime, optional) — This will return items where the updatedAt is less than or equal to the specified value.

## Response

### 200

- `results` (list of PhoneNumberPaginatedResponseResultsItems, required) — A list of phone numbers, which can be of any provider type.
- `metadata` (PaginationMeta, required) — Metadata about the pagination.

## Types

### PhoneNumberPaginatedResponseResultsItems

### PaginationMeta

Pagination and retention metadata returned with a paginated list of phone numbers.

- `itemsPerPage` (double, required) — The number of phone numbers returned per page.
- `totalItems` (double, required) — The total number of phone numbers matching the request.
- `currentPage` (double, required) — The current page number.
- `totalPages` (double, optional)
- `hasNextPage` (boolean, optional)
- `nextCursor` (string, optional) — Opaque cursor for the next page under keyset pagination (PRO-3163). Pass it back as the `cursor` query param to fetch the next page without an OFFSET scan. Present only when a further page likely exists.
- `sortOrder` (enum, optional)
  - Allowed values: `ASC`, `DESC`
- `itemsBeyondRetention` (boolean, optional) — Whether additional matching phone numbers exist beyond the organization's data-retention window.
- `createdAtLe` (datetime, optional) — The inclusive upper creation-time boundary applied to the result set.
- `createdAtGe` (datetime, optional) — The inclusive lower creation-time boundary applied to the result set.

### ByoPhoneNumber

A phone number connected to Vapi through a bring-your-own telephony provider, including its credential, routing, hooks, server settings, and lifecycle metadata.

- `id` (string, required) — This is the unique identifier for the phone number.
- `orgId` (string, required) — This is the unique identifier for the org that this phone number belongs to.
- `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was created.
- `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was last updated.
- `credentialId` (string, required) — This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number. You can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId.
- `fallbackDestination` (PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingByoPhoneNumberFallbackDestination, optional) — This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.
- `hooks` (list of PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingByoPhoneNumberHooksItems, optional) — This is the hooks that will be used for incoming calls to this phone number.
- `numberE164CheckEnabled` (boolean, optional, default: true) — This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)
- `status` (enum, optional) — This is the status of the phone number.
  - Allowed values: `active`, `activating`, `blocked`
- `name` (string, optional) — This is the name of the phone number. This is just for your own reference.
- `assistantId` (string, optional) — This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `workflowId` (string, optional) — This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `squadId` (string, optional) — This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `server` (Server, optional) — This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server
- `number` (string, optional) — This is the number of the customer.

### TwilioPhoneNumber

A Twilio phone number connected to Vapi, including its Twilio account details, SMS configuration, routing, hooks, server settings, and lifecycle metadata.

- `id` (string, required) — This is the unique identifier for the phone number.
- `orgId` (string, required) — This is the unique identifier for the org that this phone number belongs to.
- `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was created.
- `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was last updated.
- `number` (string, required) — These are the digits of the phone number you own on your Twilio.
- `twilioAccountSid` (string, required) — This is the Twilio Account SID for the phone number.
- `fallbackDestination` (PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTwilioFallbackDestination, optional) — This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.
- `hooks` (list of PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTwilioHooksItems, optional) — This is the hooks that will be used for incoming calls to this phone number.
- `smsEnabled` (boolean, optional, default: true) — Controls whether Vapi sets the messaging webhook URL on the Twilio number during import. If set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is. If `true` or omitted (default), Vapi will configure both the voice and messaging URLs. @default true
- `status` (enum, optional) — This is the status of the phone number.
  - Allowed values: `active`, `activating`, `blocked`
- `twilioAuthToken` (string, optional) — This is the Twilio Auth Token for the phone number.
- `twilioApiKey` (string, optional) — This is the Twilio API Key for the phone number.
- `twilioApiSecret` (string, optional) — This is the Twilio API Secret for the phone number.
- `name` (string, optional) — This is the name of the phone number. This is just for your own reference.
- `assistantId` (string, optional) — This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `workflowId` (string, optional) — This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `squadId` (string, optional) — This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `server` (Server, optional) — This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server

### VonagePhoneNumber

A Vonage phone number connected to Vapi, including its credential, routing, hooks, server settings, and lifecycle metadata.

- `id` (string, required) — This is the unique identifier for the phone number.
- `orgId` (string, required) — This is the unique identifier for the org that this phone number belongs to.
- `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was created.
- `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was last updated.
- `number` (string, required) — These are the digits of the phone number you own on your Vonage.
- `credentialId` (string, required) — This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups.
- `fallbackDestination` (PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVonageFallbackDestination, optional) — This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.
- `hooks` (list of PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVonageHooksItems, optional) — This is the hooks that will be used for incoming calls to this phone number.
- `status` (enum, optional) — This is the status of the phone number.
  - Allowed values: `active`, `activating`, `blocked`
- `name` (string, optional) — This is the name of the phone number. This is just for your own reference.
- `assistantId` (string, optional) — This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `workflowId` (string, optional) — This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `squadId` (string, optional) — This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `server` (Server, optional) — This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server

### VapiPhoneNumber

A Vapi-managed phone number or SIP URI, including its authentication, routing, hooks, server settings, and lifecycle metadata.

- `id` (string, required) — This is the unique identifier for the phone number.
- `orgId` (string, required) — This is the unique identifier for the org that this phone number belongs to.
- `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was created.
- `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was last updated.
- `fallbackDestination` (PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVapiFallbackDestination, optional) — This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.
- `hooks` (list of PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVapiHooksItems, optional) — This is the hooks that will be used for incoming calls to this phone number.
- `status` (enum, optional) — This is the status of the phone number.
  - Allowed values: `active`, `activating`, `blocked`
- `number` (string, optional) — These are the digits of the phone number you purchased from Vapi.
- `name` (string, optional) — This is the name of the phone number. This is just for your own reference.
- `assistantId` (string, optional) — This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `workflowId` (string, optional) — This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `squadId` (string, optional) — This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `server` (Server, optional) — This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server
- `numberDesiredAreaCode` (string, optional) — This is the area code of the phone number to purchase.
- `sipUri` (string, optional) — This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer. This is case-insensitive.
- `authentication` (SipAuthentication, optional) — This enables authentication for incoming SIP INVITE requests to the `sipUri`. If not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.

### TelnyxPhoneNumber

A Telnyx phone number connected to Vapi, including its credential, routing, hooks, server settings, and lifecycle metadata.

- `id` (string, required) — This is the unique identifier for the phone number.
- `orgId` (string, required) — This is the unique identifier for the org that this phone number belongs to.
- `createdAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was created.
- `updatedAt` (datetime, required) — This is the ISO 8601 date-time string of when the phone number was last updated.
- `number` (string, required) — These are the digits of the phone number you own on your Telnyx.
- `credentialId` (string, required) — This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups.
- `fallbackDestination` (PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTelnyxFallbackDestination, optional) — This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.
- `hooks` (list of PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTelnyxHooksItems, optional) — This is the hooks that will be used for incoming calls to this phone number.
- `status` (enum, optional) — This is the status of the phone number.
  - Allowed values: `active`, `activating`, `blocked`
- `name` (string, optional) — This is the name of the phone number. This is just for your own reference.
- `assistantId` (string, optional) — This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `workflowId` (string, optional) — This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `squadId` (string, optional) — This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.
- `server` (Server, optional) — This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingByoPhoneNumberFallbackDestination

This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingByoPhoneNumberHooksItems

### Server

Configuration for requests Vapi sends to a customer server, including URL, authentication, headers, timeout, encryption, static IP addresses, and retry behavior.

- `timeoutSeconds` (double, optional) — This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20
- `credentialId` (string, optional) — The credential ID for server authentication
- `staticIpAddressesEnabled` (boolean, optional) — If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false
- `encryptedPaths` (list of string, optional) — This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined.
- `url` (string, optional) — This is where the request will be sent.
- `headers` (ServerHeaders, optional) — These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.
- `backoffPlan` (BackoffPlan, optional) — This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried). @default undefined (the request will not be retried)

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTwilioFallbackDestination

This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTwilioHooksItems

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVonageFallbackDestination

This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVonageHooksItems

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVapiFallbackDestination

This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingVapiHooksItems

### SipAuthentication

Realm, username, and password used to authenticate SIP requests.

- `username` (string, required) — This will be expected in the `username` field of the `authorization` header of the SIP INVITE.
- `password` (string, required) — This will be expected to generate the `response` field of the `authorization` header of the SIP INVITE, through digest authentication.
- `realm` (string, optional) — This will be expected in the `realm` field of the `authorization` header of the SIP INVITE. Defaults to the SIP realm of the Vapi region serving the request (e.g. `sip.vapi.ai` for US, `sip.eu.vapi.ai` for EU).

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTelnyxFallbackDestination

This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.

### PhoneNumberIdPatchResponsesContentApplicationJsonSchemaDiscriminatorMappingTelnyxHooksItems

### TransferDestinationNumber

Transfers a call to a phone number, with optional extension, caller ID, message, transfer plan, and number validation.

- `type` (enum, required) — Selects a phone number as the transfer destination.
  - Allowed values: `number`
- `number` (string, required) — This is the phone number to transfer the call to.
- `message` (TransferDestinationNumberMessage, optional) — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
- `numberE164CheckEnabled` (boolean, optional, default: true) — This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)
- `extension` (string, optional) — This is the extension to dial after transferring the call to the `number`.
- `callerId` (string, optional) — This is the caller ID to use when transferring the call to the `number`. Usage: * If not provided, the caller ID will be the number the call is coming **from**. Example: a customer with number +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller. For inbound calls, the caller ID is the customer's number. For outbound calls, the caller ID is the phone number of the assistant. * To change this behavior, provide a `callerId`. * Set to '\{\{customer.number}}' to always use the customer's number as the caller ID. * Set to '\{\{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. * Set to any E164 number to always use that number as the caller ID. This needs to be a number that is owned or verified by your Transport provider like Twilio. Note: on Twilio, a caller who withheld their number has no caller ID the destination carrier will accept, so the assistant's phone number is presented instead and the transfer goes through. This applies when `callerId` is not provided and when it is set to '\{\{customer.number}}'. For Twilio, you can read up more here: [https://www.twilio.com/docs/voice/twiml/dial#callerid](https://www.twilio.com/docs/voice/twiml/dial#callerid)
- `transferPlan` (TransferPlan, optional) — This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`. @default `transferPlan.mode='blind-transfer'`
- `name` (string, optional) — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice.
- `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call.

### TransferDestinationSip

Transfers a call to a SIP URI, with optional caller ID, headers, message, and transfer plan.

- `type` (enum, required) — Selects a SIP URI as the transfer destination.
  - Allowed values: `sip`
- `sipUri` (string, required) — This is the SIP URI to transfer the call to.
- `message` (TransferDestinationSipMessage, optional) — This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.
- `callerId` (string, optional) — This is the caller ID to use when transferring the call to the `sipUri`. Usage: * If not provided, the caller ID will be determined by the SIP infrastructure. * Set to '\{\{customer.number}}' to always use the customer's number as the caller ID. * Set to '\{\{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID. * Set to any E164 number to always use that number as the caller ID. Only applicable when `transferPlan.sipVerb='dial'`. Not applicable for SIP REFER.
- `transferPlan` (TransferPlan, optional) — This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`. @default `transferPlan.mode='blind-transfer'`
- `sipHeaders` (TransferDestinationSipSipHeaders, optional) — These are custom headers to be added to SIP refer during transfer call.
- `name` (string, optional) — This is the name of the transfer destination. This is just for your own reference. Usage: - Optional. Stored with the destination wherever it is supplied. For `number` and `sip` destinations it is also persisted on the transfer record in the call artifact after a transfer and displayed in the dashboard call log (on the transfer divider in the transcript view) alongside the destination. When omitted, everything behaves exactly as before. - Display-only. Unlike `description`, it is never included in prompts or tool descriptions and has no effect on model behavior or destination choice.
- `description` (string, optional) — This is the description of the destination, used by the AI to choose when and how to transfer the call.

### PhoneNumberHookCallRinging

Runs configured transfer or message actions when an incoming call rings and its caller-number prefix filters match.

- `on` (enum, required) — This is the event to trigger the hook on
  - Allowed values: `call.ringing`
- `do` (list of PhoneNumberHookCallRingingDoItems, required) — Only the first action will be executed. Additional actions will be ignored.
- `filters` (list of PhoneNumberCallRingingHookFilter, optional) — Optional filters to decide when to trigger the hook. Currently supports filtering by caller country code.

### PhoneNumberHookCallEnding

Runs configured transfer or message actions when a call ends with a matching assistant-request failure reason.

- `on` (enum, required) — This is the event to trigger the hook on
  - Allowed values: `call.ending`
- `filters` (list of PhoneNumberCallEndingHookFilter, optional) — Optional filters to decide when to trigger - restricted to assistant-request related ended reasons
- `do` (PhoneNumberHookCallEndingDo, optional) — This is the action to perform when the hook triggers

### ServerHeaders

These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.

### BackoffPlan

Controls retry behavior for failed server requests, including strategy, maximum retries, base delay, and status codes excluded from retries.

- `type` (enum, required) — This is the type of backoff plan to use. Defaults to fixed. @default fixed
  - Allowed values: `fixed`, `exponential`
- `maxRetries` (double, required) — This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0
- `baseDelaySeconds` (double, required) — Base delay in seconds. For fixed backoff, this is the delay between retries. For exponential backoff, this is the initial delay.
- `excludedStatusCodes` (list of BackoffPlanExcludedStatusCodesItems, optional) — HTTP status codes that should not trigger a retry. By default, any non-2xx status code not listed here can be retried.

### TransferDestinationNumberMessage

This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.

### TransferPlan

Controls how a call transfer is executed, including blind and warm transfer modes, dialing and SIP behavior, hold audio, context, summary, and failure handling.

- `mode` (enum, required) — This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default 'blind-transfer'
  - Allowed values: `blind-transfer`, `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-say-summary`, `warm-transfer-twiml`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`, `warm-transfer-experimental`
- `message` (TransferPlanMessage, optional) — This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.
- `timeout` (double, optional, default: 60) — This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60
- `sipVerb` (enum, optional, default: refer) — This specifies the SIP verb to use while transferring the call. - 'refer': Uses SIP REFER to transfer the call (default) - 'bye': Ends current call with SIP BYE - 'dial': Uses SIP DIAL to transfer the call
  - Allowed values: `refer`, `bye`, `dial`
- `dialTimeout` (double, optional, default: 60) — This sets the timeout for the dial operation in seconds. This is the duration the call will ring before timing out. Only applicable when `sipVerb='dial'`. Not applicable for SIP REFER or BYE. @default 60
- `holdAudioUrl` (string, optional) — This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.
- `transferCompleteAudioUrl` (string, optional) — This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like 'beep' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.
- `contextEngineeringPlan` (TransferPlanContextEngineeringPlan, optional) — This is the plan for manipulating the message context before initiating the warm transfer. Usage: * Used only when `mode` is `warm-transfer-experimental`. * These messages will automatically be added to the transferAssistant's system message. * If 'none', we will not add any transcript to the transferAssistant's system message. * If you want to provide your own messages, use transferAssistant.model.messages instead. @default \{ type: 'all' }
- `twiml` (string, optional) — This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: * Used only when `mode` is `warm-transfer-twiml`. * Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. * Maximum length is 4096 characters. Example: ``` <Say voice="alice" language="en-US">Hello, transferring a customer to you.</Say> <Pause length="2"/> <Say>They called about billing questions.</Say> ```
- `summaryPlan` (SummaryPlan, optional) — This is the plan for generating a summary of the call to present to the destination party. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header` or `warm-transfer-say-summary` or `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary` or `warm-transfer-experimental`.
- `sipHeadersInReferToEnabled` (boolean, optional) — This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false
- `fallbackPlan` (TransferFallbackPlan, optional) — This configures the fallback plan when the transfer fails (destination unreachable, busy, or not human). Usage: - Used when `mode` is `warm-transfer-experimental`. If not provided, a default message will be used. - Used for SIP cold transfers (`blind-transfer` modes) when transfer outcome detection and fallback are enabled for the organization: on a failed transfer, the assistant speaks `message`, then ends the call or continues with the customer per `endCallEnabled`.

### TransferDestinationSipMessage

This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.

### TransferDestinationSipSipHeaders

These are custom headers to be added to SIP refer during transfer call.

### PhoneNumberHookCallRingingDoItems

### PhoneNumberCallRingingHookFilter

Matches an incoming caller's phone number against one or more prefixes before a ringing hook runs.

- `type` (enum, required) — This is the type of filter - matches when the specified field starts with any of the given prefixes
  - Allowed values: `startsWith`
- `key` (enum, required) — The field to check. Currently only "number" (the caller's phone number) is supported.
  - Allowed values: `number`
- `startsWith` (list of string, required) — Array of prefixes to match. Do not include the + prefix. Inbound calls from numbers starting with any of these prefixes will trigger the hook actions.

### PhoneNumberCallEndingHookFilter

Matches the call's ended reason against configured assistant-request failure reasons before an ending hook runs.

- `type` (enum, required) — This is the type of filter - currently only "oneOf" is supported
  - Allowed values: `oneOf`
- `key` (enum, required) — This is the key to filter on - only "call.endedReason" is allowed for phone number call ending hooks
  - Allowed values: `call.endedReason`
- `oneOf` (enum, required) — This is the array of assistant-request related ended reasons to match against
  - Allowed values: `assistant-request-failed`, `assistant-request-returned-error`, `assistant-request-returned-unspeakable-error`, `assistant-request-returned-invalid-assistant`, `assistant-request-returned-no-assistant`, `assistant-request-returned-forwarding-phone-number`

### PhoneNumberHookCallEndingDo

This is the action to perform when the hook triggers

### BackoffPlanExcludedStatusCodesItems

### CustomMessage

A message spoken by the assistant with optional language-specific content variants.

- `type` (enum, required) — This is a custom message.
  - Allowed values: `custom-message`
- `contents` (list of CustomMessageContentsItems, optional) — This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment. This will override the `content` property.
- `content` (string, optional) — This is the content that the assistant will say when this message is triggered.

### TransferPlanMessage

This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.

### TransferPlanContextEngineeringPlan

This is the plan for manipulating the message context before initiating the warm transfer. Usage: * Used only when `mode` is `warm-transfer-experimental`. * These messages will automatically be added to the transferAssistant's system message. * If 'none', we will not add any transcript to the transferAssistant's system message. * If you want to provide your own messages, use transferAssistant.model.messages instead. @default \{ type: 'all' }

### SummaryPlan

Controls generation of a post-call summary, including prompt messages, enablement, and request timeout.

- `messages` (list of SummaryPlanMessagesItems, optional) — These are the messages used to generate the summary. @default: ` [ \{ "role": "system", "content": "You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary." }, \{ "role": "user", "content": "Here is the transcript:\n\n\{\{transcript}}\n\n. Here is the ended reason of the call:\n\n\{\{endedReason}}\n\n" } ]` You can customize by providing any messages you want. Here are the template variables available: * \{\{transcript}}: The transcript of the call from `call.artifact.transcript` * \{\{systemPrompt}}: The system prompt of the call from `assistant.model.messages[type=system].content` * \{\{messages}}: The messages of the call from `assistant.model.messages` * \{\{endedReason}}: The ended reason of the call from `call.endedReason`
- `enabled` (boolean, optional) — This determines whether a summary is generated and stored in `call.analysis.summary`. Defaults to true. Usage: - If you want to disable the summary, set this to false. @default true
- `timeoutSeconds` (double, optional) — This is how long the request is tried before giving up. When request times out, `call.analysis.summary` will be empty. Usage: - To guarantee the summary is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond. @default 5 seconds

### TransferFallbackPlan

Controls the message and end-call behavior used when a call transfer fails.

- `message` (TransferFallbackPlanMessage, required) — This is the message the assistant will deliver to the customer if the transfer fails.
- `endCallEnabled` (boolean, optional, default: true) — This controls what happens after delivering the failure message to the customer. - true: End the call after delivering the failure message (default) - false: Keep the assistant on the call to continue handling the customer's request @default true

### TransferPhoneNumberHookAction

A phone-number hook action that transfers the call to a phone number or SIP destination.

- `type` (enum, required) — This is the type of action - must be "transfer"
  - Allowed values: `transfer`
- `destination` (TransferPhoneNumberHookActionDestination, optional) — This is the destination details for the transfer - can be a phone number or SIP URI

### SayPhoneNumberHookAction

A phone-number hook action that speaks an exact message to the caller.

- `type` (enum, required) — This is the type of action - must be "say"
  - Allowed values: `say`
- `exact` (string, required) — This is the message to say

### CustomMessageContentsItems

### ContextEngineeringPlanLastNMessages

Includes a configured number of the most recent messages when constructing context for a handoff.

- `type` (enum, required) — Selects inclusion of the most recent messages.
  - Allowed values: `lastNMessages`
- `maxMessages` (double, required) — This is the maximum number of messages to include in the context engineering plan.

### ContextEngineeringPlanNone

Excludes prior conversation messages when constructing context for a handoff.

- `type` (enum, required) — Selects exclusion of prior conversation messages.
  - Allowed values: `none`

### ContextEngineeringPlanAll

Includes all available messages when constructing context for a handoff.

- `type` (enum, required) — Selects inclusion of all available messages.
  - Allowed values: `all`

### SummaryPlanMessagesItems

### TransferFallbackPlanMessage

This is the message the assistant will deliver to the customer if the transfer fails.

### TransferPhoneNumberHookActionDestination

This is the destination details for the transfer - can be a phone number or SIP URI

### TextContent

Localized text content used as a language-specific message variant.

- `type` (enum, required) — Selects text as the content type.
  - Allowed values: `text`
- `text` (string, required) — Text spoken or displayed for this content variant.
- `language` (enum, required) — Language code associated with this text variant.
  - Allowed values: `aa`, `ab`, `ae`, `af`, `ak`, `am`, `an`, `ar`, `as`, `av`, `ay`, `az`, `ba`, `be`, `bg`, `bh`, `bi`, `bm`, `bn`, `bo`, `br`, `bs`, `ca`, `ce`, `ch`, `co`, `cr`, `cs`, `cu`, `cv`, `cy`, `da`, `de`, `dv`, `dz`, `ee`, `el`, `en`, `eo`, `es`, `et`, `eu`, `fa`, `ff`, `fi`, `fj`, `fo`, `fr`, `fy`, `ga`, `gd`, `gl`, `gn`, `gu`, `gv`, `ha`, `he`, `hi`, `ho`, `hr`, `ht`, `hu`, `hy`, `hz`, `ia`, `id`, `ie`, `ig`, `ii`, `ik`, `io`, `is`, `it`, `iu`, `ja`, `jv`, `ka`, `kg`, `ki`, `kj`, `kk`, `kl`, `km`, `kn`, `ko`, `kr`, `ks`, `ku`, `kv`, `kw`, `ky`, `la`, `lb`, `lg`, `li`, `ln`, `lo`, `lt`, `lu`, `lv`, `mg`, `mh`, `mi`, `mk`, `ml`, `mn`, `mr`, `ms`, `mt`, `my`, `na`, `nb`, `nd`, `ne`, `ng`, `nl`, `nn`, `no`, `nr`, `nv`, `ny`, `oc`, `oj`, `om`, `or`, `os`, `pa`, `pi`, `pl`, `ps`, `pt`, `qu`, `rm`, `rn`, `ro`, `ru`, `rw`, `sa`, `sc`, `sd`, `se`, `sg`, `si`, `sk`, `sl`, `sm`, `sn`, `so`, `sq`, `sr`, `ss`, `st`, `su`, `sv`, `sw`, `ta`, `te`, `tg`, `th`, `ti`, `tk`, `tl`, `tn`, `to`, `tr`, `ts`, `tt`, `tw`, `ty`, `ug`, `uk`, `ur`, `uz`, `ve`, `vi`, `vo`, `wa`, `wo`, `xh`, `yi`, `yue`, `yo`, `za`, `zh`, `zu`

## Examples

**Response**

```json
{
  "results": [
    {
      "assistantId": "string",
      "createdAt": "2024-01-15T09:30:00Z",
      "credentialId": "string",
      "fallbackDestination": {
        "callerId": "string",
        "description": "string",
        "extension": "string",
        "message": "string",
        "name": "string",
        "number": "string",
        "numberE164CheckEnabled": true,
        "transferPlan": {
          "contextEngineeringPlan": {
            "maxMessages": 1.1,
            "type": "lastNMessages"
          },
          "dialTimeout": 60,
          "fallbackPlan": {
            "endCallEnabled": true,
            "message": "string"
          },
          "holdAudioUrl": "string",
          "message": "string",
          "mode": "blind-transfer",
          "sipHeadersInReferToEnabled": true,
          "sipVerb": "refer",
          "summaryPlan": {
            "enabled": true,
            "messages": [
              {}
            ],
            "timeoutSeconds": 1.1
          },
          "timeout": 60,
          "transferCompleteAudioUrl": "string",
          "twiml": "string"
        },
        "type": "number"
      },
      "hooks": [
        {
          "do": [
            {
              "destination": {
                "callerId": "string",
                "description": "string",
                "extension": "string",
                "message": "string",
                "name": "string",
                "number": "string",
                "numberE164CheckEnabled": true,
                "transferPlan": {
                  "contextEngineeringPlan": {
                    "maxMessages": 1.1,
                    "type": "lastNMessages"
                  },
                  "dialTimeout": 60,
                  "fallbackPlan": {
                    "endCallEnabled": true,
                    "message": {
                      "content": {},
                      "contents": {},
                      "type": {}
                    }
                  },
                  "holdAudioUrl": "string",
                  "message": "string",
                  "mode": "blind-transfer",
                  "sipHeadersInReferToEnabled": true,
                  "sipVerb": "refer",
                  "summaryPlan": {
                    "enabled": true,
                    "messages": [
                      {}
                    ],
                    "timeoutSeconds": 1.1
                  },
                  "timeout": 60,
                  "transferCompleteAudioUrl": "string",
                  "twiml": "string"
                },
                "type": "number"
              },
              "type": "transfer"
            }
          ],
          "filters": [
            {
              "key": "number",
              "startsWith": [
                "91",
                "86",
                "7"
              ],
              "type": "startsWith"
            }
          ],
          "on": "call.ringing"
        }
      ],
      "id": "string",
      "name": "string",
      "number": "string",
      "numberE164CheckEnabled": true,
      "orgId": "string",
      "provider": "byo-phone-number",
      "server": {
        "backoffPlan": {
          "baseDelaySeconds": 1,
          "excludedStatusCodes": [
            400,
            401,
            403,
            404
          ],
          "maxRetries": 0,
          "type": "fixed"
        },
        "credentialId": "550e8400-e29b-41d4-a716-446655440000",
        "encryptedPaths": [
          "string"
        ],
        "headers": {},
        "staticIpAddressesEnabled": false,
        "timeoutSeconds": 20,
        "url": "string"
      },
      "squadId": "string",
      "status": "active",
      "updatedAt": "2024-01-15T09:30:00Z",
      "workflowId": "string"
    }
  ],
  "metadata": {
    "itemsPerPage": 1.1,
    "totalItems": 1.1,
    "currentPage": 1.1,
    "totalPages": 1.1,
    "hasNextPage": true,
    "nextCursor": "string",
    "sortOrder": "ASC",
    "itemsBeyondRetention": true,
    "createdAtLe": "2024-01-15T09:30:00Z",
    "createdAtGe": "2024-01-15T09:30:00Z"
  }
}
```