openapi: 3.2.0 info: title: Sinch Webhooks API x-refined-note: - x-sinch-standards-version differs across the merged source definitions and was not carried version: '1.0' description: 'Operations tagged Webhooks across 6 of this provider''s published API definitions: sinch-conversation-api-openapi.yaml, sinch-porting-api-openapi.yaml, sinch-provisioning-api-openapi.yaml, sinch-voice-api-v2-openapi.yaml, original-sinch-conversation-openapi.yml, sinch-voice-api-v2-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://{region}.conversation.api.sinch.com variables: region: default: us enum: - us - eu - br description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app. - url: https://porting.api.sinch.com/v1/projects/{projectId} description: v1.0 of the porting API variables: projectId: description: The project with which you are working. default: YOUR_project_id - url: https://provisioning.api.sinch.com description: Production server - url: https://voice.api.sinch.com description: Endpoint which enables consuming the Voice API globally - Redirected by Sinch to the closest region. - url: https://us1.voice.api.sinch.com description: North America 1 - East - url: https://br1.voice.api.sinch.com description: South America 1 - East - url: https://eu1.voice.api.sinch.com description: Europe 1 - Central - url: https://sg1.voice.api.sinch.com description: Asia Pacific 1 - Southeast - url: https://au1.voice.api.sinch.com description: Australia & Oceania 1 - Southeast - url: https://us.conversation.api.sinch.com description: US Production Server - url: https://eu.conversation.api.sinch.com description: EU Production Server - url: https://br.conversation.api.sinch.com description: Brazil Production Server tags: - name: Webhooks paths: /v1/projects/{project_id}/apps/{app_id}/webhooks: parameters: - $ref: '#/components/parameters/project_id' - $ref: '#/components/parameters/app_id' get: description: List all webhooks for a given app as specified by the App ID. tags: - Webhooks summary: List webhooks operationId: Webhooks_ListWebhooks responses: '200': $ref: '#/components/responses/listWebhooksResponse' '400': $ref: '#/components/responses/400Error' '401': $ref: '#/components/responses/401Error' '403': $ref: '#/components/responses/403Error' '500': $ref: '#/components/responses/500Error' '501': $ref: '#/components/responses/501Error' x-codeSamples: - lang: Java source: "/**\n * Sinch Java Snippet\n *\n *

This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.eventdestinations;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.EventDestinationsService;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.response.EventDestinationsListResponse;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class List {\n\n private static final Logger LOGGER = Logger.getLogger(List.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the conversation application to list event destinations for\n String conversationApplicationId = \"APPLICATION_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n EventDestinationsService eventDestinationsService =\n client.conversation().v1().eventDestinations();\n\n LOGGER.info(\"List\");\n\n EventDestinationsListResponse response =\n eventDestinationsService.list(conversationApplicationId);\n\n LOGGER.info(\"Response: \");\n response.iterator().forEachRemaining(f -> LOGGER.info(f.toString()));\n }\n}\n" - lang: Node.js source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Conversation App to list Webhooks for\n const appId = 'CONVERSATION_APP_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.webhooks.list({\n app_id: appId,\n });\n if (!response.webhooks?.length) {\n console.log(`No Webhooks found for the Conversation App with ID ${appId}.`);\n return;\n }\n console.log(`✅ Found ${response.webhooks.length} Webhooks.`);\n response.webhooks.forEach((webhook) => {\n console.log(webhook);\n });\n } catch (err) {\n console.error(`❌ Failed to list the Webhooks for the Conversation App with ID ${appId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - Basic: [] - oAuth2: [] post: operationId: createWebhook summary: Create a Webhook description: Creates a new webhook for the specified app with trigger subscriptions. tags: - Webhooks parameters: - $ref: '#/components/parameters/ProjectId' - $ref: '#/components/parameters/AppId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateWebhookRequest' responses: '200': description: Webhook created content: application/json: schema: $ref: '#/components/schemas/Webhook_2' '400': description: Invalid request '401': description: Unauthorized security: - Basic: [] - oAuth2: [] servers: - url: https://{region}.conversation.api.sinch.com variables: region: default: us enum: - us - eu - br description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app. /v1/projects/{project_id}/webhooks: parameters: - $ref: '#/components/parameters/project_id' post: description: 'Creates a webhook for receiving callbacks on specific triggers. You can create up to 5 webhooks per app.' tags: - Webhooks summary: Create a new webhook operationId: Webhooks_CreateWebhook requestBody: content: application/json: schema: allOf: - $ref: '#/components/schemas/Webhook' - type: object required: - app_id description: Required. The Webhook to create required: true responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/Webhook' '400': $ref: '#/components/responses/400Error' '401': $ref: '#/components/responses/401Error' '403': $ref: '#/components/responses/403Error' '500': $ref: '#/components/responses/500Error' '501': $ref: '#/components/responses/501Error' x-codeSamples: - lang: Java source: "/**\n * Sinch Java Snippet\n *\n *

This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.eventdestinations;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.EventDestinationsService;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.EventDestination;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.EventDestinationTrigger;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.request.EventDestinationCreateRequest;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.Arrays;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Create {\n\n private static final Logger LOGGER = Logger.getLogger(Create.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the conversation application to create the event destination for\n String conversationApplicationId = \"APPLICATION_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n EventDestinationsService eventDestinationsService =\n client.conversation().v1().eventDestinations();\n\n EventDestinationCreateRequest eventDestinationCreateRequest =\n EventDestinationCreateRequest.builder()\n .setAppId(conversationApplicationId)\n .setTarget(\"https://foo.com\")\n .setTriggers(Arrays.asList(EventDestinationTrigger.CAPABILITY))\n .build();\n\n LOGGER.info(\"Create event destination: \" + eventDestinationCreateRequest);\n\n EventDestination response = eventDestinationsService.create(eventDestinationCreateRequest);\n\n LOGGER.info(\"Response: \" + response);\n }\n}\n" - lang: Node.js source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Conversation App to create the Webhook for\n const appId = 'CONVERSATION_APP_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.webhooks.create({\n webhookCreateRequestBody: {\n app_id: appId,\n target: 'https://foo.com/webhook',\n triggers: ['CAPABILITY'],\n },\n });\n console.log('✅ Successfully created the Webhook.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to create the Webhook for the Conversation App with ID ${appId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - Basic: [] - oAuth2: [] servers: - url: https://{region}.conversation.api.sinch.com variables: region: default: us enum: - us - eu - br description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app. /v1/projects/{project_id}/webhooks/{webhook_id}: parameters: - $ref: '#/components/parameters/project_id' - $ref: '#/components/parameters/webhook_id' get: description: Get a webhook as specified by the webhook ID. tags: - Webhooks summary: Get a webhook operationId: Webhooks_GetWebhook responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/Webhook' '400': $ref: '#/components/responses/400Error' '401': $ref: '#/components/responses/401Error' '403': $ref: '#/components/responses/403Error' '500': $ref: '#/components/responses/500Error' '501': $ref: '#/components/responses/501Error' x-codeSamples: - lang: Java source: "/**\n * Sinch Java Snippet\n *\n *

This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.eventdestinations;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.EventDestinationsService;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.EventDestination;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Get {\n\n private static final Logger LOGGER = Logger.getLogger(Get.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the conversation event destination to retrieve\n String eventDestinationId = \"EVENT_DESTINATION_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n EventDestinationsService eventDestinationsService =\n client.conversation().v1().eventDestinations();\n\n LOGGER.info(\n String.format(\"Get information about event destination with ID '%s'\", eventDestinationId));\n\n EventDestination response = eventDestinationsService.get(eventDestinationId);\n\n LOGGER.info(\"Response: \" + response);\n }\n}\n" - lang: Node.js source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Webhook to retrieve\n const webhookId = 'WEBHOOK_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.webhooks.get({\n webhook_id: webhookId,\n });\n console.log('✅ Successfully retrieved the Webhook.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to retrieve the Webhook with ID ${webhookId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - Basic: [] - oAuth2: [] patch: description: Updates an existing webhook as specified by the webhook ID. tags: - Webhooks summary: Update an existing webhook operationId: Webhooks_UpdateWebhook parameters: - $ref: '#/components/parameters/update_mask' requestBody: content: application/json: schema: $ref: '#/components/schemas/Webhook' description: Required. The Webhook to update required: true responses: '200': description: A successful response. content: application/json: schema: $ref: '#/components/schemas/Webhook' '400': $ref: '#/components/responses/400Error' '401': $ref: '#/components/responses/401Error' '403': $ref: '#/components/responses/403Error' '500': $ref: '#/components/responses/500Error' '501': $ref: '#/components/responses/501Error' x-codeSamples: - lang: Java source: "/**\n * Sinch Java Snippet\n *\n *

This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.eventdestinations;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.EventDestinationsService;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.EventDestination;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.EventDestinationTargetType;\nimport com.sinch.sdk.domains.conversation.models.v1.eventdestinations.EventDestinationTrigger;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.Arrays;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Update {\n\n private static final Logger LOGGER = Logger.getLogger(Update.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the conversation event destination to update\n String eventDestinationId = \"EVENT_DESTINATION_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n EventDestinationsService eventDestinationsService =\n client.conversation().v1().eventDestinations();\n\n EventDestination eventDestination =\n EventDestination.builder()\n .setTarget(\"https://foo.com\")\n .setTriggers(\n Arrays.asList(\n EventDestinationTrigger.CAPABILITY, EventDestinationTrigger.CHANNEL_EVENT))\n .setTargetType(EventDestinationTargetType.HTTP)\n .build();\n\n LOGGER.info(String.format(\"Update event destination with ID '%s'\", eventDestinationId));\n\n EventDestination response =\n eventDestinationsService.update(eventDestinationId, eventDestination);\n\n LOGGER.info(\"Response: \" + response);\n }\n}\n" - lang: Node.js source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Webhook to update\n const webhookId = 'WEBHOOK_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n const response = await sinch.conversation.webhooks.update({\n webhook_id: webhookId,\n webhookUpdateRequestBody: {\n target: 'https://foo.com/webhook_updated',\n triggers: ['MESSAGE_SUBMIT', 'MESSAGE_DELIVERY'],\n target_type: 'HTTP',\n },\n });\n console.log('✅ Successfully updated the Webhook.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to update the Webhook with ID ${webhookId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - Basic: [] - oAuth2: [] delete: description: Deletes a webhook as specified by the webhook ID. tags: - Webhooks summary: Delete an existing webhook operationId: Webhooks_DeleteWebhook responses: '200': description: A successful response. '400': $ref: '#/components/responses/400Error' '401': $ref: '#/components/responses/401Error' '403': $ref: '#/components/responses/403Error' '500': $ref: '#/components/responses/500Error' '501': $ref: '#/components/responses/501Error' x-codeSamples: - lang: Java source: "/**\n * Sinch Java Snippet\n *\n *

This snippet is available at https://github.com/sinch/sinch-sdk-java\n *\n *

See https://github.com/sinch/sinch-sdk-java/blob/main/examples/snippets/README.md for details\n */\npackage conversation.eventdestinations;\n\nimport com.sinch.sdk.SinchClient;\nimport com.sinch.sdk.domains.conversation.api.v1.EventDestinationsService;\nimport com.sinch.sdk.models.Configuration;\nimport com.sinch.sdk.models.ConversationRegion;\nimport java.util.logging.Logger;\nimport utils.Settings;\n\npublic class Delete {\n\n private static final Logger LOGGER = Logger.getLogger(Delete.class.getName());\n\n public static void main(String[] args) {\n\n String projectId = Settings.getProjectId().orElse(\"MY_PROJECT_ID\");\n String keyId = Settings.getKeyId().orElse(\"MY_KEY_ID\");\n String keySecret = Settings.getKeySecret().orElse(\"MY_KEY_SECRET\");\n String conversationRegion = Settings.getConversationRegion().orElse(\"MY_CONVERSATION_REGION\");\n\n // The ID of the event destination to delete\n String eventDestinationId = \"EVENT_DESTINATION_ID\";\n\n Configuration configuration =\n Configuration.builder()\n .setProjectId(projectId)\n .setKeyId(keyId)\n .setKeySecret(keySecret)\n .setConversationRegion(ConversationRegion.from(conversationRegion))\n .build();\n\n SinchClient client = new SinchClient(configuration);\n\n EventDestinationsService eventDestinationsService =\n client.conversation().v1().eventDestinations();\n\n LOGGER.info(\"Deleting event destination: \" + eventDestinationId);\n\n eventDestinationsService.delete(eventDestinationId);\n\n LOGGER.info(\"Done\");\n }\n}\n" - lang: Node.js source: "/**\n * Sinch Node.js Snippet\n * See: https://github.com/sinch/sinch-sdk-node/examples/snippets\n */\nimport { SinchClient } from '@sinch/sdk-core';\nimport * as dotenv from 'dotenv';\ndotenv.config();\n\nasync function main() {\n const projectId = process.env.SINCH_PROJECT_ID ?? 'MY_PROJECT_ID';\n const keyId = process.env.SINCH_KEY_ID ?? 'MY_KEY_ID';\n const keySecret = process.env.SINCH_KEY_SECRET ?? 'MY_KEY_SECRET';\n const conversationRegion = process.env.SINCH_CONVERSATION_REGION ?? 'MY_CONVERSATION_REGION';\n\n // The ID of the Webhook to delete\n const webhookId = 'WEBHOOK_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret, conversationRegion });\n\n try {\n await sinch.conversation.webhooks.delete({\n webhook_id: webhookId,\n });\n console.log('✅ Successfully deleted the Webhook.');\n } catch (err) {\n console.error(`❌ Failed to delete the Webhook with ID ${webhookId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - Basic: [] - oAuth2: [] servers: - url: https://{region}.conversation.api.sinch.com variables: region: default: us enum: - us - eu - br description: The {region} variable must be set to us, eu, or br, and it must match the region in which you created your Conversation API app. /v1/projects/{projectId}/webhooks: get: description: Returns a paginated list of webhooks for the specified project. If no page token is supplied then all registered webhooks (of maximum `15`) are returned in alphabetical order. operationId: WebhookWebhookController_listWebhooks_v1 parameters: - name: projectId required: true in: path description: The unique ID of the project. You can find this on the Sinch Dashboard. schema: type: string - name: pageToken required: false in: query schema: type: string description: The page token if retrieving the next page from a previous query. - name: pageSize required: false in: query schema: type: number minimum: 1 maximum: 15 description: The page size requested. responses: '200': description: List of webhooks content: application/json: schema: $ref: '#/components/schemas/WebhookWebhookListDto' examples: listWebhooksRes: summary: List all webhooks in project description: "\n Returns a paginated list of webhooks for the specified project. If no page token is supplied then all registered webhooks (of maximum `15`) are returned in alphabetical order.\n " value: previousPageToken: '{{TOKEN}}' nextPageToken: '{{TOKEN}}' pageSize: 1 totalSize: 5 webhooks: - id: '{{WEBHOOK_ID_1}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback1 triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED - id: '{{WEBHOOK_ID_2}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback2 triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: invalid_page_size-0: summary: InvalidPageSizeError value: errorCode: invalid_page_size message: Page size must be numeric. resolution: Use a integer value for pageSize parameter. invalid_page_token-1: summary: InvalidPageTokenError value: errorCode: invalid_page_token message: Invalid page token. resolution: The page token to use is provided in the previous query response, for new queries simply leave this field undefined. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: unauthorized_error-0: summary: UnauthorizedErrorError value: errorCode: unauthorized_error message: Unauthorized error. resolution: Verify that projectId is correct. '500': description: InternalServerError content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: internal_error-0: summary: InternalErrorError value: errorCode: internal_error message: Internal server error. resolution: Please wait and try again, if the error persist please contact support. summary: List all webhooks in project tags: - Webhooks x-badges: - name: GA position: after color: green security: - BasicAuth: [] BearerAuth: [] OAuth2Production: [] post: description: Register a new webhook for a project. The webhook will be used to communicate updates to resources. Maximum of `15` webhooks allowed per project. operationId: WebhookWebhookController_createWebhook_v1 parameters: - name: projectId required: true in: path description: The unique ID of the project. You can find this on the Sinch Dashboard. schema: type: string requestBody: required: true description: Webhook to register content: application/json: schema: $ref: '#/components/schemas/WebhookWebhookInputDto' examples: registerWebhookNoTriggerReq: summary: Register a webhook for all events value: secret: '{{WEBHOOK_SECRET}}' target: https://my.server.com/callback triggers: - ALL registerWebhookReq: summary: Register a webhook with specific event triggers value: secret: '{{WEBHOOK_SECRET}}' target: https://my.server.com/callback triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED responses: '201': description: Webhook created content: application/json: schema: $ref: '#/components/schemas/WebhookWebhookDto' examples: registerWebhookNoTriggerRes: summary: Register a webhook for all events description: "\n Example of a response when registering for all triggers.\n " value: id: '{{WEBHOOK_ID}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback triggers: - ALL registerWebhookRes: summary: Register a webhook with specific event triggers description: "\n Example of a response when registering for specific triggers.\n " value: id: '{{WEBHOOK_ID}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: invalid_input-0: summary: InvalidInputError value: errorCode: invalid_input message: Invalid input. resolution: Correct the validation errors and submit again. additionalInformation: validationErrors: - target must be a string - target must be a URL address invalid_payload-1: summary: InvalidPayloadError value: errorCode: invalid_payload message: Invalid payload. resolution: Correct payload and submit again. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: unauthorized_error-0: summary: UnauthorizedErrorError value: errorCode: unauthorized_error message: Unauthorized error. resolution: Verify that projectId is correct. '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_exists-0: summary: WebhookExistsError value: errorCode: webhook_exists message: Webhook with the provided target already exists. resolution: Webhooks must have a unique target. Change the target and submit again. '424': description: FailedDependency content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_limit_reached-0: summary: WebhookLimitReachedError value: errorCode: webhook_limit_reached message: Number of webhooks has reached the limit. resolution: Delete some webhooks to be able to add more. '500': description: InternalServerError content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: internal_error-0: summary: InternalErrorError value: errorCode: internal_error message: Internal server error. resolution: Please wait and try again, if the error persist please contact support. summary: Register a webhook for project tags: - Webhooks x-badges: - name: GA position: after color: green security: - BasicAuth: [] BearerAuth: [] OAuth2Production: [] servers: - url: https://provisioning.api.sinch.com description: Production server /v1/projects/{projectId}/webhooks/{webhookId}: get: description: Return an already created webhook. operationId: WebhookWebhookController_getWebhook_v1 parameters: - name: projectId required: true in: path description: The unique ID of the project. You can find this on the Sinch Dashboard. schema: type: string - name: webhookId required: true in: path description: The unique ID of the webhook. schema: type: string responses: '200': description: Webhook response content: application/json: schema: $ref: '#/components/schemas/WebhookWebhookDto' examples: triggers: summary: Webhook with specific event triggers description: "\n Example of a response for a webhook with specific triggers.\n " value: id: '{{WEBHOOK_ID}}' target: https://my.server.com/callback projectId: '{{PROJECT_ID}}' triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED noTriggers: summary: Webhook for all events description: "\n Example of a response for a webhook for all triggers.\n " value: id: '{{WEBHOOK_ID}}' target: https://my.server.com/callback projectId: '{{PROJECT_ID}}' triggers: - ALL '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: invalid_id_format-0: summary: InvalidIdFormatError value: errorCode: invalid_id_format message: Id is not in the expected format. resolution: webhookId param is in the wrong format. Confirm that you're sending the correct value. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: unauthorized_error-0: summary: UnauthorizedErrorError value: errorCode: unauthorized_error message: Unauthorized error. resolution: Verify that projectId is correct. '404': description: NotFound content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_not_found-0: summary: WebhookNotFoundError value: errorCode: webhook_not_found message: Webhook not found. resolution: Verify that the parameters are correct. '500': description: InternalServerError content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: internal_error-0: summary: InternalErrorError value: errorCode: internal_error message: Internal server error. resolution: Please wait and try again, if the error persist please contact support. summary: Get webhook tags: - Webhooks x-badges: - name: GA position: after color: green security: - BasicAuth: [] BearerAuth: [] OAuth2Production: [] delete: description: Deletes an already created webhook. operationId: WebhookWebhookController_deleteWebhook_v1 parameters: - name: projectId required: true in: path description: The unique ID of the project. You can find this on the Sinch Dashboard. schema: type: string - name: webhookId required: true in: path description: The unique ID of the webhook. schema: type: string responses: '204': description: Webhook deleted '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: invalid_id_format-0: summary: InvalidIdFormatError value: errorCode: invalid_id_format message: Id is not in the expected format. resolution: webhookId param is in the wrong format. Confirm that you're sending the correct value. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: unauthorized_error-0: summary: UnauthorizedErrorError value: errorCode: unauthorized_error message: Unauthorized error. resolution: Verify that projectId is correct. '404': description: NotFound content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_not_found-0: summary: WebhookNotFoundError value: errorCode: webhook_not_found message: Webhook not found. resolution: Verify that the parameters are correct. '500': description: InternalServerError content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: internal_error-0: summary: InternalErrorError value: errorCode: internal_error message: Internal server error. resolution: Please wait and try again, if the error persist please contact support. summary: Delete webhook tags: - Webhooks x-badges: - name: GA position: after color: green security: - BasicAuth: [] BearerAuth: [] OAuth2Production: [] put: description: Replace an already existing webhook. operationId: WebhookWebhookController_replaceWebhook_v1 parameters: - name: projectId required: true in: path description: The unique ID of the project. You can find this on the Sinch Dashboard. schema: type: string - name: webhookId required: true in: path description: The unique ID of the webhook. schema: type: string requestBody: required: true description: Webhook to replace content: application/json: schema: $ref: '#/components/schemas/WebhookWebhookInputDto' examples: updateWebhookReq: summary: Update a webhook with specific event triggers value: secret: '{{WEBHOOK_SECRET}}' target: https://my.server.com/callback triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED updateWebhookNoTriggerReq: summary: Update a webhook to listen to all events value: secret: '{{WEBHOOK_SECRET}}' target: https://my.server.com/callback triggers: - ALL responses: '200': description: Webhook response content: application/json: schema: $ref: '#/components/schemas/WebhookWebhookDto' examples: updateWebhookRes: summary: Update a webhook with specific event triggers description: "\n Example of a response for an update to specific triggers.\n " value: id: '{{WEBHOOK_ID}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED updateWebhookNoTriggerRes: summary: Update a webhook to listen to all events description: "\n Example of a response for an update to all triggers.\n " value: id: '{{WEBHOOK_ID}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback triggers: - ALL '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: invalid_input-0: summary: InvalidInputError value: errorCode: invalid_input message: Invalid input. resolution: Correct the validation errors and submit again. additionalInformation: validationErrors: - target must be a string - target must be a URL address invalid_payload-1: summary: InvalidPayloadError value: errorCode: invalid_payload message: Invalid payload. resolution: Correct payload and submit again. invalid_id_format-2: summary: InvalidIdFormatError value: errorCode: invalid_id_format message: Id is not in the expected format. resolution: webhookId param is in the wrong format. Confirm that you're sending the correct value. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: unauthorized_error-0: summary: UnauthorizedErrorError value: errorCode: unauthorized_error message: Unauthorized error. resolution: Verify that projectId is correct. '404': description: NotFound content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_not_found-0: summary: WebhookNotFoundError value: errorCode: webhook_not_found message: Webhook not found. resolution: Verify that the parameters are correct. '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_exists-0: summary: WebhookExistsError value: errorCode: webhook_exists message: Webhook with the provided target already exists. resolution: Webhooks must have a unique target. Change the target and submit again. '500': description: InternalServerError content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: internal_error-0: summary: InternalErrorError value: errorCode: internal_error message: Internal server error. resolution: Please wait and try again, if the error persist please contact support. summary: Replace webhook tags: - Webhooks x-badges: - name: GA position: after color: green security: - BasicAuth: [] BearerAuth: [] OAuth2Production: [] patch: description: Update an already existing webhook. operationId: WebhookWebhookController_updateWebhook_v1 parameters: - name: projectId required: true in: path description: The unique ID of the project. You can find this on the Sinch Dashboard. schema: type: string - name: webhookId required: true in: path description: The unique ID of the webhook. schema: type: string requestBody: required: true description: Webhook to update content: application/json: schema: $ref: '#/components/schemas/WebhookUpdateWebhookInputDto' examples: updateWebhookReq: summary: Update a webhook with specific event triggers value: secret: '{{WEBHOOK_SECRET}}' target: https://my.server.com/callback triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED updateWebhookNoTriggerReq: summary: Update a webhook to listen to all events value: secret: '{{WEBHOOK_SECRET}}' target: https://my.server.com/callback triggers: - ALL responses: '200': description: Webhook response content: application/json: schema: $ref: '#/components/schemas/WebhookWebhookDto' examples: updateWebhookRes: summary: Update a webhook with specific event triggers description: "\n Example of a response for an update to specific triggers.\n " value: id: '{{WEBHOOK_ID}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback triggers: - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_REJECTED updateWebhookNoTriggerRes: summary: Update a webhook to listen to all events description: "\n Example of a response for an update to all triggers.\n " value: id: '{{WEBHOOK_ID}}' projectId: '{{PROJECT_ID}}' target: https://my.server.com/callback triggers: - ALL '400': description: BadRequest content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: invalid_input-0: summary: InvalidInputError value: errorCode: invalid_input message: Invalid input. resolution: Correct the validation errors and submit again. additionalInformation: validationErrors: - target must be a string - target must be a URL address invalid_payload-1: summary: InvalidPayloadError value: errorCode: invalid_payload message: Invalid payload. resolution: Correct payload and submit again. invalid_id_format-2: summary: InvalidIdFormatError value: errorCode: invalid_id_format message: Id is not in the expected format. resolution: webhookId param is in the wrong format. Confirm that you're sending the correct value. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: unauthorized_error-0: summary: UnauthorizedErrorError value: errorCode: unauthorized_error message: Unauthorized error. resolution: Verify that projectId is correct. '404': description: NotFound content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_not_found-0: summary: WebhookNotFoundError value: errorCode: webhook_not_found message: Webhook not found. resolution: Verify that the parameters are correct. '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: webhook_exists-0: summary: WebhookExistsError value: errorCode: webhook_exists message: Webhook with the provided target already exists. resolution: Webhooks must have a unique target. Change the target and submit again. '500': description: InternalServerError content: application/json: schema: $ref: '#/components/schemas/WebhookPapiErrorDto' examples: internal_error-0: summary: InternalErrorError value: errorCode: internal_error message: Internal server error. resolution: Please wait and try again, if the error persist please contact support. summary: Update webhook tags: - Webhooks x-badges: - name: GA position: after color: green security: - BasicAuth: [] BearerAuth: [] OAuth2Production: [] servers: - url: https://provisioning.api.sinch.com description: Production server webhooks: OrderUpdated: post: operationId: order summary: Order Updated description: This is a webhook that will be called when an order is updated, it will contain the order and the status of the order. tags: - Webhooks requestBody: content: application/json: schema: $ref: '#/components/schemas/OrderWebhookStatusEvent' example: type: ORDER_UPDATED orderId: '897867' order: customerOrderReference: '123456' desiredPortSchedule: desiredPortDate: '2024-09-24' desiredPortTime: 09:00:00 status: PENDING onDemandActivation: false phoneNumbers: - phoneNumber: '+12345678901' portOutInfo: existingPortOutPin: '1234' endUser: name: John Doe streetName: Main St streetNum: '123' city: Anytown state: NY zipCode: '12345' voiceConfiguration: type: EST trunkId: '123456' servers: - url: https://porting.api.sinch.com/v1/projects/{projectId} description: v1.0 of the porting API variables: projectId: description: The project with which you are working. default: YOUR_project_id NumbersActivated: post: operationId: numbersActivated summary: Number activated description: This notification occurs if at least one number on the port order was activated. tags: - Webhooks requestBody: content: application/json: schema: $ref: '#/components/schemas/NumberStatusWebhookStatusEvent' example: type: NUMBERS_ACTIVATED orderId: '897867' phoneNumbers: - phoneNumber: '+12345678901' status: ACTIVATED activatedDate: '2024-09-24T14:00:00Z' servers: - url: https://porting.api.sinch.com/v1/projects/{projectId} description: v1.0 of the porting API variables: projectId: description: The project with which you are working. default: YOUR_project_id NumbersConfirmed: post: operationId: NumbersConfirmed summary: Number confirmed description: This notification occurs when at least one number on the port order was confirmed. This notification also occurs when the number is ready to be activated and `onDemandActivation` was set to true or if it will be activated at the specified confirmation date. tags: - Webhooks requestBody: content: application/json: schema: $ref: '#/components/schemas/NumberStatusWebhookStatusEvent' example: type: NUMBERS_CONFIRMED orderId: '897867' phoneNumbers: - phoneNumber: '+12345678901' status: CONFIRMED confirmedDate: '2024-09-24T12:00:00Z' servers: - url: https://porting.api.sinch.com/v1/projects/{projectId} description: v1.0 of the porting API variables: projectId: description: The project with which you are working. default: YOUR_project_id NumbersRejected: post: operationId: NumbersRejected summary: Number Rejected description: This notification occurs if at least one number on the port order was rejected. Look at rejected reasons for more details on what went wrong. tags: - Webhooks requestBody: content: application/json: schema: $ref: '#/components/schemas/NumberStatusWebhookStatusEvent' example: type: NUMBERS_REJECTED orderId: '897867' phoneNumbers: - phoneNumber: '+12345678901' status: REJECTED rejectReason: Invalid port-out PIN servers: - url: https://porting.api.sinch.com/v1/projects/{projectId} description: v1.0 of the porting API variables: projectId: description: The project with which you are working. default: YOUR_project_id NewOrderNote: post: operationId: NewOrderNote summary: Note added to order description: This notification occurs if a note was added to the order either by Sinch or by you. tags: - Webhooks requestBody: content: application/json: schema: $ref: '#/components/schemas/NewNoteWebhookStatusEvent' example: type: NEW_ORDER_NOTE orderId: '897867' note: This is a note servers: - url: https://porting.api.sinch.com/v1/projects/{projectId} description: v1.0 of the porting API variables: projectId: description: The project with which you are working. default: YOUR_project_id call.webhook: description: Webhook request sent from the Voice Platform to the customer's backend. post: tags: - Webhooks summary: Call webhook description: 'Receives webhook notifications for call events from the Voice Platform. ### Request signing Every webhook request is signed by the Voice Platform so that the receiving endpoint can verify that the request was sent by Sinch and was not altered in transit. The signature is carried in the `Authorization` header, using the `service` authentication scheme. The header value is the service identifier and the signature, separated by a colon: ``` Authorization: service : ``` | Element | Description | | --- | --- | | `` | Identifier of the service the webhook belongs to. Matches the `serviceId` segment of the `ce-source` header and the `call.serviceId` field of the request body. | | `` | Base64-encoded HMAC-SHA256 hash of the canonical request string, keyed with the service secret. | #### Signature ``` signature = Base64( HMAC-SHA256( secretBytes, UTF8(stringToSign) ) ) ``` `secretBytes` is the 16-byte binary value of the service secret, and the signed message is the UTF-8 encoding of `stringToSign`. The service secret is issued as a Base64 string, for example `F5wrP9SKYU6w8sbZXkp7GA==`. Base64-decoding it yields the 16 bytes of `secretBytes`. The decoded bytes are used as the HMAC key — signing with the characters of the Base64 string instead produces a different, invalid signature. #### Canonical string `stringToSign` is the concatenation of five parts. Each of the first four parts is terminated by a single line feed (`\n`); the last part is not followed by a line feed. ``` POST {contentMd5} {contentType} x-timestamp:{timestamp} {path} ``` | Part | Value | | --- | --- | | Method | The HTTP method, always `POST` for webhook requests. | | `{contentMd5}` | `Base64( MD5( UTF8(body) ) )` — the Base64-encoded MD5 digest of the raw request body. Empty when the request carries no body. | | `{contentType}` | The full value of the `Content-Type` header, including its parameters, for example `application/json; charset=utf-8`. Empty when the request carries no body. | | `{timestamp}` | The verbatim value of the `x-timestamp` request header, an ISO 8601 UTC timestamp with seven fractional-second digits, for example `2026-04-01T12:00:00.0000000Z`. The literal prefix `x-timestamp:` is part of the canonical string. | | `{path}` | The absolute path of the configured webhook URL, without scheme, host, query string or fragment, for example `/voice-webhooks`. | The MD5 digest acts as a checksum of the body inside the canonical string. The integrity and authenticity guarantee is provided by the HMAC-SHA256 signature computed over that string. The CloudEvents (`ce-*`) headers are not covered by the signature. #### Example A request delivered to `https://example.com/voice-webhooks` with the body ```json {"event":"call.incoming","call":{"callId":"01AN4Z07BY79KA1307SR9X4MV3"}} ``` `Content-Type: application/json; charset=utf-8` and `x-timestamp: 2026-04-01T12:00:00.0000000Z` produces the canonical string ``` POST CH5/FnzqzRJ81QlTLGAhAw== application/json; charset=utf-8 x-timestamp:2026-04-01T12:00:00.0000000Z /voice-webhooks ``` With the service secret `F5wrP9SKYU6w8sbZXkp7GA==`, the resulting header is ``` Authorization: service a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e:EWFtVTrykdhMTdyYSbn40GBJpf5UBeggO9T99sdwLyY= ``` #### Verification 1. Split the `Authorization` header value into the service identifier and the signature. 2. Rebuild `stringToSign` from the received request, using the raw request body exactly as delivered, before any parsing, re-serialization or whitespace normalization. 3. Recompute the signature with the secret of the identified service and compare it to the received value using a constant-time comparison. 4. Reject the request when the two values differ. 5. Reject requests whose `x-timestamp` lies outside an accepted clock-skew window, to limit replay of previously valid requests.' operationId: callWebhook parameters: - name: ce-specversion in: header required: true schema: type: string const: '1.0' description: CloudEvents specification version. - name: ce-type in: header required: true schema: type: string const: com.sinch.voice.call.control.v1 description: CloudEvents event type. - name: ce-source in: header required: true schema: type: string example: projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/services/6e124178-c29d-46a5-943c-5c2ae544aade description: 'URI identifying the context where the event originated. Format: `projects/{projectId}/services/{serviceId}`.' - name: ce-id in: header required: true schema: type: string format: uuid example: cb0c6a68-53de-4590-94a1-6e95df89fbac description: Unique identifier for this event instance. Use together with `ce-source` for deduplication. - name: ce-time in: header required: true schema: type: string format: date-time example: '2026-04-01T12:00:00+00:00' description: Timestamp (RFC 3339) when the event occurred. - name: x-timestamp in: header required: true schema: type: string example: '2026-04-01T12:00:00.0000000Z' description: Timestamp (ISO 8601, UTC) applied by the Voice Platform when the request was signed. Covered by the `Authorization` signature and required to recompute it. requestBody: content: application/json: schema: $ref: '#/components/schemas/webhookRequest' examples: callIncoming: summary: Inbound call arriving on the service value: event: call.incoming call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: INBOUND originationType: PHONE callType: PHONE from: type: PHONE phone: number: '+14155552671' to: type: PHONE phone: number: '+46735224800' callResult: INITIATED startTime: '2025-06-01T10:00:00Z' callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 callAnswered: summary: Outbound call answered by the recipient value: event: call.answered call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: OUTBOUND originationType: SERVER callType: PHONE from: type: PHONE phone: number: '+46735224800' to: type: PHONE phone: number: '+14155552671' callResult: IN_PROGRESS startTime: '2025-06-01T10:00:00Z' answerTime: '2025-06-01T10:00:05Z' callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 callBusy: summary: Outbound call recipient was busy value: event: call.busy call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: OUTBOUND originationType: SERVER callType: PHONE from: type: PHONE phone: number: '+46735224800' to: type: PHONE phone: number: '+14155552671' callResult: BUSY callReason: NOT_AVAILABLE startTime: '2025-06-01T10:00:00Z' endTime: '2025-06-01T10:00:04Z' callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 callRejected: summary: Outbound call rejected by the recipient value: event: call.rejected call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: OUTBOUND originationType: SERVER callType: PHONE from: type: PHONE phone: number: '+46735224800' to: type: PHONE phone: number: '+14155552671' callResult: REJECTED callReason: NOT_AVAILABLE startTime: '2025-06-01T10:00:00Z' endTime: '2025-06-01T10:00:06Z' callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 callTimeout: summary: Outbound call not answered within the dial timeout value: event: call.timeout call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: OUTBOUND originationType: SERVER callType: PHONE from: type: PHONE phone: number: '+46735224800' to: type: PHONE phone: number: '+14155552671' callResult: NO_ANSWER callReason: NOT_AVAILABLE startTime: '2025-06-01T10:00:00Z' endTime: '2025-06-01T10:00:30Z' callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 callHangup: summary: Call ended after being answered value: event: call.hangup call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: OUTBOUND originationType: SERVER callType: PHONE from: type: PHONE phone: number: '+46735224800' to: type: PHONE phone: number: '+14155552671' callResult: COMPLETED callReason: CALLEE_HANGUP startTime: '2025-06-01T10:00:00Z' answerTime: '2025-06-01T10:00:05Z' endTime: '2025-06-01T10:01:47Z' callDurationSeconds: 102 callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 callFailed: summary: Call could not be set up value: event: call.failed call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: OUTBOUND originationType: SERVER callType: PHONE from: type: PHONE phone: number: '+46735224800' to: type: PHONE phone: number: '+14155552671' callResult: FAILED callReason: ERROR startTime: '2025-06-01T10:00:00Z' callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 callWebhookDynamic: summary: Mid-call event triggered by the webhook SVAML command value: event: call.webhook.menu-selection call: callId: 01AN4Z07BY79KA1307SR9X4MV3 projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 serviceId: a74b1566-0f18-4f8e-9c23-8e6b5df8fd3e sessionId: 01AN4Z07BY79KA1307SR9X4MV2 direction: INBOUND originationType: PHONE callType: PHONE from: type: PHONE phone: number: '+14155552671' to: type: PHONE phone: number: '+46735224800' callResult: IN_PROGRESS startTime: '2025-06-01T10:00:00Z' answerTime: '2025-06-01T10:00:03Z' callRate: currencyCode: USD amount: '0.0060' callResourceUrl: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 responses: '200': description: 'Success. A SVAML document returned in response to a webhook. **Note:** `callName` and `events` only take effect in responses to webhooks triggered by an incoming call. In responses to other webhook types, they are ignored.' content: application/json: schema: $ref: '#/components/schemas/webhookResponse' examples: incomingCall: summary: Accept an incoming call and play a greeting (call.incoming), then hangup value: callName: incoming commands: - command: messages messages: - type: SAY say: text: Thank you for calling. Goodbye. voiceName: Emma events: onFinish: - command: hangup playMessageAndHangup: summary: Play a message then hang up (call.answered) value: commands: - command: messages messages: - type: SAY say: text: Hello! Your verification code is 4 2 7 8. Goodbye. voiceName: Emma events: onFinish: - command: hangup servers: - url: https://voice.api.sinch.com description: Endpoint which enables consuming the Voice API globally - Redirected by Sinch to the closest region. - url: https://us1.voice.api.sinch.com description: North America 1 - East - url: https://br1.voice.api.sinch.com description: South America 1 - East - url: https://eu1.voice.api.sinch.com description: Europe 1 - Central - url: https://sg1.voice.api.sinch.com description: Asia Pacific 1 - Southeast - url: https://au1.voice.api.sinch.com description: Australia & Oceania 1 - Southeast components: schemas: ListWebhooksResponse: type: object properties: webhooks: type: array description: List of webhooks belonging to a specific project ID and app ID items: $ref: '#/components/schemas/Webhook' ClientCredentials: type: object description: Optional. Used for OAuth2 authentication. required: - client_id - client_secret - endpoint properties: client_id: description: The Client ID that will be used in the OAuth2 Client Credentials flow. type: string client_secret: description: The Client Secret that will be used in the OAuth2 Client Credentials flow. type: string format: password endpoint: description: The endpoint that will be used in the OAuth2 Client Credentials flow. Expected to return a JSON with an access token and `expires_in` value (in seconds). The `expires_in` value, which must be a minimum of 30 seconds and a maximum of 3600 seconds, is how long Sinch will save the access token before asking for a new one. type: string scope: description: 'Optional. Space-separated string per RFC 6749. Used to limit the access granted by the token. Max length: 1024 characters. If blank or omitted, this is not included in the token request. ' type: string maxLength: 1024 response_type: description: 'Optional. When granting `client_credentials`, this is generally omitted. If you do provide a value, it will be forwarded to your OAuth provider as-is. Max length: 64 characters. ' type: string maxLength: 64 token_request_type: description: 'Optional. Controls how `client_id` and `client_secret` are sent to the token endpoint. Either `BASIC` or `FORM`. If not set or unrecognized, `BASIC` is used by default. ' type: string x-enumDescriptions: BASIC: Sent using the HTTP Authorization header (Basic auth). In this case, `client_id` and `client_secret` are NOT included in the form body. FORM: Sent in the form body as `client_id` and `client_secret`. No Authorization header is added. enum: - BASIC - FORM default: BASIC Webhook: description: Represents a destination for receiving callbacks from the Conversation API. type: object title: Webhook required: - target properties: app_id: description: The app that this webhook belongs to. type: string client_credentials: $ref: '#/components/schemas/ClientCredentials' id: description: The ID of the webhook. type: string readOnly: true secret: description: 'Optional secret be used to sign contents of webhooks sent by the Conversation API. You can then use the secret to verify the signature.' type: string format: password target: description: 'The target url where events should be sent to. Maximum URL length is 742. The conversation-api.*.sinch.com subdomains are forbidden.' type: string target_type: $ref: '#/components/schemas/WebhookTargetType' triggers: description: 'An array of triggers that should trigger the webhook and result in an event being sent to the target url. Refer to the list of [Webhook Triggers](https://developers.sinch.com/docs/conversation/callbacks/#webhook-triggers) for a complete list.' type: array items: $ref: '#/components/schemas/WebhookTrigger' runtimeError: type: object properties: error: type: object properties: code: type: integer format: int32 details: type: array items: $ref: '#/components/schemas/protobufAny' message: type: string status: type: string WebhookTargetType: type: string default: DISMISS x-enumDescriptions: DISMISS: Events won't be sent. HTTP: Events will be sent to an HTTP target. enum: - DISMISS - HTTP WebhookTrigger: description: Each webhook can subscribe to one or more of the following triggers type: string example: MESSAGE_DELIVERY x-enumDescriptions: UNSPECIFIED_TRIGGER: Using this value will cause errors. MESSAGE_DELIVERY: Subscribe to delivery receipts for a message sent. EVENT_DELIVERY: Subscribe to delivery receipts for a event sent. MESSAGE_INBOUND: Subscribe to inbound messages from end users on the underlying channels. EVENT_INBOUND: Subscribe to inbound events from end users on the underlying channels. CONVERSATION_START: Subscribe to an event that is triggered when a new conversation has been started. CONVERSATION_STOP: Subscribe to an event that is triggered when a active conversation has been stopped. CONTACT_CREATE: Subscribe to an event that is triggered when a new contact has been created. CONTACT_DELETE: Subscribe to an event that is triggered when a contact has been deleted. CONTACT_MERGE: Subscribe to an event that is triggered when a two contacts are merged. CONTACT_UPDATE: Subscribe to an event that is triggered when a contact is updated. UNSUPPORTED: Subscribe to callbacks that are not natively supported by the Conversation API. OPT_IN: Subscribe to opt_ins. OPT_OUT: Subscribe to opt_outs. CAPABILITY: Subscribe to see get capability results. CONVERSATION_DELETE: Subscribe to get an event when a conversation is deleted. CONTACT_IDENTITIES_DUPLICATION: Subscribe to get an event when contact identity duplications are found during message or event processing. CHANNEL_EVENT: Subscribe to direct channel event. SMART_CONVERSATION: Subscribe to [Smart conversation analysis](https://developers.sinch.com/docs/smart-conversations). MESSAGE_INBOUND_SMART_CONVERSATION_REDACTION: Subscribe to [analysis](https://developers.sinch.com/docs/smart-conversations) for messages from end-users. RECORD_NOTIFICATION: Subscribe to Record Notifications. MESSAGE_SUBMIT: Subscribe to message submit Notifications. enum: - UNSPECIFIED_TRIGGER - MESSAGE_DELIVERY - EVENT_DELIVERY - MESSAGE_INBOUND - EVENT_INBOUND - CONVERSATION_START - CONVERSATION_STOP - CONTACT_CREATE - CONTACT_DELETE - CONTACT_MERGE - CONTACT_UPDATE - UNSUPPORTED - OPT_IN - OPT_OUT - CAPABILITY - CONVERSATION_DELETE - CONTACT_IDENTITIES_DUPLICATION - CHANNEL_EVENT - SMART_CONVERSATION - MESSAGE_INBOUND_SMART_CONVERSATION_REDACTION - RECORD_NOTIFICATION - MESSAGE_SUBMIT protobufAny: type: object properties: type_url: type: string value: type: string format: byte OrderWebhookItem: type: object description: Order payload included in webhook events. Identical to OrderBaseItem but excludes `id`, since the order identifier is already present as `orderId` at the top level of the webhook event. required: - desiredPortSchedule properties: status: $ref: '#/components/schemas/OrderStatus' customerOrderReference: type: string description: Your reference you specified when creating the order example: '123456' default: '' onDemandActivation: type: boolean description: 'If you use onDemand activation you will need to make sure the numbers are both confirmed and released for activation, if you don''t use onDemand the numbers will be activated on the desiredPortDate is the recommended way. If true the numbers will be activated as when you call `:activate`, if false they will be activated on the desiredPortDate' default: false desiredPortSchedule: description: The date and time you want the numbers to be ported in. If you set a `defaultPortTime` and `defaultPortTimeZone` in defaults those settings will be used if not set per order. If you haven't set defaults and do not set the time and time zone on the order the system default will be used. **System Default Time:** 09:00:00 US/Eastern $ref: '#/components/schemas/DesiredPortDateTime' loaUploadedBy: type: string description: Name of the user uploading the LOA. example: john doe loaAttachmentDate: description: 'Date when the LOA was uploaded. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.' type: string format: date-time example: '2024-09-24T12:00:00Z' phoneNumbers: type: array title: Phone numbers description: The numbers for the order in e164 format items: $ref: '#/components/schemas/PhoneNumberMinItem' notes: readOnly: true description: Notes if any on the order, you will get notes if there is any problems with the order and you send notes as reply to those problems type: array items: $ref: '#/components/schemas/OrderNote' documents: readOnly: true description: Documents if any on the order, you will get documents if there is any problems with the order and you send documents as reply to those problems type: array items: $ref: '#/components/schemas/OrderDocumentBase' createdDate: readOnly: true description: The date the order was created, in `YYYY-MM-DD` format. type: string format: date example: '2024-09-24' resellerName: type: string description: '**This is requirement for canadian numbers only, we need to figure out what we expect here and where the customer can find this info**' default: '' OrderDocumentBase: type: object description: Response object containing information about the order document. properties: id: type: number readOnly: true description: The ID of the order document. documentName: type: string description: The name of the document. description: type: string description: A description of the contents of the document. ESTConfiguration: type: object title: EST description: When you want to use the number for elastic sip trunking properties: type: type: string enum: - EST x-enumDescriptions: EST: Indicates Elastic SIP Trunking capability. default: EST trunkId: type: string example: 01G65Z755AFWAKHE12NY0CQ9FH RTCConfiguration: type: object title: RTC description: If you want to use the number with programmable voice properties: type: type: string enum: - RTC x-enumDescriptions: RTC: Indicates programmable voice capability. default: RTC appId: type: string description: The app id from the dashboard where you want to use the number example: 6afd2da3-1692-4443-834c-8a2f386ec284 NumberStatusWebhookStatusEvent: allOf: - $ref: '#/components/schemas/WebhookEvent' - type: object properties: type: type: string description: The event that triggered the webhook enum: - NUMBERS_ACTIVATED - NUMBERS_CONFIRMED - NUMBERS_REJECTED default: NUMBERS_ACTIVATED phoneNumbers: type: array items: $ref: '#/components/schemas/NumberPortingStatusItem' NumberPortingStatusItem: type: object description: A phone number entry in a webhook status event. Contains only the fields relevant to the event type — no end user or port-out information is included since these events reflect system-side status changes. required: - phoneNumber properties: phoneNumber: type: string description: The phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format. format: e164 example: '+12345678901' status: type: string description: The porting status of the phone number. enum: - PENDING - CONFIRMED - REJECTED - ACTIVATED - CANCELED - EXCLUDED activatedDate: description: 'The date and time the number was activated. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.' type: string format: date-time example: '2024-09-24T14:00:00Z' confirmedDate: description: 'The date and time the number was confirmed. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.' type: string format: date-time example: '2024-09-24T12:00:00Z' rejectReason: type: string description: The reason the number was rejected. SmsConfiguration: type: object description: Configuration for what sms service id to use, and other sms related configurations properties: smsAppId: type: string WebhookEvent: type: object description: A webhook event. properties: type: type: string description: The event that triggered the webhook. enum: - ORDER_UPDATED - NUMBERS_ACTIVATED - NUMBERS_CONFIRMED - NUMBERS_REJECTED - NEW_ORDER_NOTE x-enumDescriptions: ORDER_UPDATED: The order was updated. This could be a status update or any other updates to a pending order. NUMBERS_ACTIVATED: At least one number was activated. NUMBERS_CONFIRMED: At least one number was confirmed. NUMBERS_REJECTED: At least one number was rejected. NEW_ORDER_NOTE: A new note was added to the order. orderId: type: string description: The order ID that was updated. DesiredPortDateTime: required: - desiredPortDate type: object properties: desiredPortDate: type: string description: The date you want the numbers to be ported in, in ISO format. example: '2025-01-31' desiredPortTime: type: string example: 09:00:00 description: The time you want the numbers to be ported in. desiredPortTimeZone: type: string enum: - US/Eastern - US/Central - US/Mountain - US/Pacific - GMT x-enumDescriptions: US/Eastern: US Eastern Timezone US/Central: US Central Timezone US/Mountain: US Mountain Timezone US/Pacific: US Pacific Timezone GMT: Greenwich Mean Time description: The time zone you want to use for the desired port time. example: US/Eastern PhoneNumberItem: type: object required: - phoneNumber - endUser - portOutInfo properties: phoneNumber: type: string description: The phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format. format: e164 example: '+12345678901' status: type: string description: The porting status of the phone number. default: PENDING readOnly: true enum: - PENDING - CONFIRMED - REJECTED - ACTIVATED - CANCELED - EXCLUDED x-enumDescriptions: PENDING: The number is pending, and can be updated. CONFIRMED: The number is confirmed, and can not be updated but if onDemand is true it can be activated. REJECTED: The number is rejected. Look at the rejectReason for more details. Reasons can be either its not portable or wrong port out information. ACTIVATED: The number is activated. CANCELED: The number is cancelled, either by the customer or by the system. EXCLUDED: The number is excluded from the order. Look at the exclusionReason for more details. exclusionReason: description: If the phone number is excluded or rejected, the status here would reflect as such. In this case, there would be an exclusion reason along with date of exclusion. type: string readOnly: true default: '' exclusionDate: description: 'The date and time the phone number was excluded or rejected. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`. Accompanied by `exclusionReason`.' type: string readOnly: true format: date-time example: '2024-09-24T00:00:00Z' countryCode: description: The ISO 3166-1 formatted country code of the phone number, for example, US or CA. At the moment, only North American numbers are supported. type: string readOnly: true example: US activatedDate: description: 'The date and time the number was activated. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.' type: string readOnly: true format: date-time example: '2024-09-24T14:00:00Z' confirmedDate: description: 'The date the number was confirmed. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.' type: string readOnly: true format: date-time example: '2024-09-24T12:00:00Z' activateUser: readOnly: true description: The user that activated the number. type: string voiceConfiguration: description: If specified, this will override the voice configuration for the order. $ref: '#/components/schemas/VoiceConfiguration' smsConfiguration: description: If specified, this will override the sms configuration for the order. $ref: '#/components/schemas/SmsConfiguration' endUser: description: If specified, this will override the endUser for the order. $ref: '#/components/schemas/EndUser' portOutInfo: $ref: '#/components/schemas/PortOutItem' features: $ref: '#/components/schemas/Feature' newPortOutPin: type: string rejectReason: readOnly: true type: string description: The reason the number was rejected. excludedFeatures: readOnly: true description: Features that are excluded for the phone number being ported. type: array items: type: object properties: featureName: description: The name of the excluded feature. type: string exclusionReason: description: The reason the feature was excluded. type: string phoneNumberGroup: readOnly: true type: string example: GW Verizon Grp1 focDate: description: 'Once the phone number has a firm order confirmation (FOC) date, it will be returned as part of the phone number details. Formatted as [ISO-8601](https://en.wikipedia.org/wiki/ISO_8601): `YYYY-MM-DDThh:mm:ss.SSSZ`.' readOnly: true type: string format: date-time example: '2024-09-24T12:00:00Z' PortOutItem: type: object description: The port out information at the previous carrier for the number. Usually only a port-out PIN is required. properties: existingPortOutPin: type: string description: The existing port-out PIN from the previous carrier. accountNum: type: string description: The account number associated with the number from the previous carrier. accountPhoneNumber: type: string description: The contact phone number on the account. authorizingName: type: string description: Name of the person authorizing the port-in. authorizingDate: type: string description: Date of authorizing the port-in (must be today or earlier and cannot be in the future), in `YYYY-MM-DD` format. format: date example: '2024-09-24' OrderWebhookStatusEvent: allOf: - $ref: '#/components/schemas/WebhookEvent' - type: object properties: type: type: string description: The event that triggered the webhook enum: - ORDER_UPDATED default: ORDER_UPDATED x-enumDescriptions: ORDER_UPDATED: The order was updated it can be status or any other updates to a pending order order: $ref: '#/components/schemas/OrderWebhookItem' EndUser: type: object required: - name - streetNum - streetName - city - state - zipCode properties: name: type: string description: The name of the end user can be a person's name or company name. Please note if you are not using this yourself it should be the name/company of the actual user. example: Joe Doe streetNum: description: The end user's street number. type: string example: '123' streetName: description: The end user's street name. type: string example: Main streetPreDir: description: The prefix direction in the end user's address, if any. type: string default: '' example: N streetType: description: The end user's street type, for example Road or Court. type: string default: '' example: Court streetPostDir: description: The suffix direction in the end user's address, if any. type: string default: '' example: SW locationType1: type: string description: Any additional location information, such as suite or apartment. example: Suite locationValue1: description: Any additional location information, such as suite number or apartment number. type: string example: '2134' locationType2: description: Field for additional location information, such as suite number or apartment number. type: string example: '' default: '' locationValue2: description: Field for additional location information, such as suite number or apartment number. type: string example: '' default: '' locationType3: description: Field for additional location information, such as suite number or apartment number. type: string example: '' default: '' locationValue3: description: Field for additional location information, such as suite number or apartment number. type: string example: '' default: '' city: description: The end user's city. type: string example: Anytown state: type: string description: The end user's state, using the two letter abbreviation. example: CA zipCode: description: The end user's zip code. type: string example: '12345' default: '' typeOfService: type: string description: The type of address. Available values are `B` for Business or `R` for Residence enum: - B - R x-enumDescriptions: B: Business R: Residence example: B default: B VoiceConfiguration: description: Configuration for voice discriminator: propertyName: type mapping: RTC: '#/components/schemas/RTCConfiguration' EST: '#/components/schemas/ESTConfiguration' FAX: '#/components/schemas/FAXConfiguration' oneOf: - $ref: '#/components/schemas/RTCConfiguration' - $ref: '#/components/schemas/ESTConfiguration' - $ref: '#/components/schemas/FAXConfiguration' NewNoteWebhookStatusEvent: allOf: - $ref: '#/components/schemas/WebhookEvent' - type: object properties: type: type: string description: The event that triggered the webhook enum: - NEW_ORDER_NOTE default: NEW_ORDER_NOTE note: type: string description: The note that was added. FAXConfiguration: type: object title: FAX description: When you want to use the number for fax properties: type: type: string enum: - FAX x-enumDescriptions: FAX: Indicates Fax capability. default: FAX serviceId: type: string example: 01G65Z755GHWAKHE12NY0CQO0T Feature: type: object properties: e911: type: object description: An object describing the emergency 911 contact address associated with the number. properties: name: type: string description: The contact name. streetNum: type: string description: The street number for the emergency address. example: '12345' streetInfo: type: string description: The street name of the emergency location. example: Main St location: type: string description: The location for address. example: Apt 5 city: type: string description: The city of the emergency location. example: Springfield state: type: string description: The state or province of the emergency location. example: IL postalCode: type: string description: The postal code of the emergency location. example: '62701' postalCodePlusFour: type: string description: The postal code of the emergency location. example: '1234' enhStreetNum: description: The validated street number. type: string readOnly: true enhStreetInfo: description: The validated street. type: string readOnly: true enhLocation: description: The validated street location. type: string readOnly: true enhCity: description: The validated city. type: string readOnly: true enhState: description: The validated state. type: string readOnly: true enhPostalCode: description: The validated postal code. type: string readOnly: true enhPostalCodePlusFour: description: The validated postal code +4 digits. type: string readOnly: true OrderStatus: type: string description: The current status of the port order. enum: - PENDING - CONFIRMED - COMPLETED - CANCELED readOnly: true x-enumDescriptions: ORDER_BUILDING: The order is being created PENDING: The order is pending, and can be updated CONFIRMED: The order is confirmed, and can not be updated but if onDemand is true it can be activated COMPLETED: The order is completed, the port has completed and the numbers are active CANCELED: The order is cancelled, either by the customer or by the system OrderNote: type: object properties: note: type: string description: The message of the note. createdTime: type: string description: The date and time when the note was created in UTC ISO https://www.ietf.org/rfc/rfc3339.txt. createdBy: type: string description: The user who created the note. PhoneNumberMinItem: type: object description: The minimum required fields for a phone number to be ported. required: - phoneNumber - endUser allOf: - $ref: '#/components/schemas/PhoneNumberItem' WebhookUpdateWebhookInputDto: type: object properties: target: type: object description: A valid target url where events should be sent to. maxLength: 742 minLength: 1 format: url uniqueItems: false secret: type: object description: Secret to be used to sign contents of webhooks sent by the provisioning API. You can then use the secret to verify the signature. Please not that secret should have a high entropy to be considered secure. maxLength: 128 minLength: 1 uniqueItems: false triggers: type: array x-enumDescriptions: BUNDLE_DONE: Webhook event triggered when a bundle processing flow is completed. RCS_BRAND_REGISTRATION_PROCESS_STATUS_UPDATED: Webhook event triggered when the RCS brand registration process status changes. RCS_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to an RCS sender. RCS_SENDER_OPERATOR_STATUS_UPDATED: Webhook event triggered when an RCS sender operator status changes. RCS_SENDER_STATUS_UPDATED: Webhook event triggered when an RCS sender status changes. RCS_ACCOUNT_COMMENT_ADDED: Webhook event triggered when a new comment is added to an RCS account. KAKAOTALK_SENDER_ACTIVE: Webhook event triggered when a KakaoTalk sender becomes active. KAKAOTALK_SENDER_INACTIVE: Webhook event triggered when a KakaoTalk sender becomes inactive. KAKAOTALK_SENDER_REJECTED: Webhook event triggered when a KakaoTalk sender is rejected. KAKAOTALK_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to a KakaoTalk sender. KAKAOTALK_TEMPLATE_APPROVED: Webhook event triggered when a KakaoTalk template is approved. KAKAOTALK_TEMPLATE_COMMENT_ADDED: Webhook event triggered when a new comment is added to a KakaoTalk template. KAKAOTALK_TEMPLATE_REJECTED: Webhook event triggered when a KakaoTalk template is rejected. WHATSAPP_ACCOUNT_ONBOARDED: Webhook event triggered when a WhatsApp account onboarding is completed. WHATSAPP_ACCOUNT_PENDING_VERIFICATION: Webhook event triggered when a WhatsApp account is pending verification. WHATSAPP_ACCOUNT_REJECTED: Webhook event triggered when a WhatsApp account is rejected. WHATSAPP_ACCOUNT_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp account. WHATSAPP_ACCOUNT_DAILY_LIMIT_CHANGED: Webhook event triggered when a WhatsApp account daily messaging limit changes. WHATSAPP_WABA_ACCOUNT_CHANGED: Webhook event triggered when the linked WhatsApp Business Account changes. WHATSAPP_SENDER_ACTIVE: Webhook event triggered when a WhatsApp sender becomes active. WHATSAPP_SENDER_INACTIVE: Webhook event triggered when a WhatsApp sender becomes inactive. WHATSAPP_SENDER_REJECTED: Webhook event triggered when a WhatsApp sender is rejected. WHATSAPP_SENDER_DELETED: Webhook event triggered when a WhatsApp sender is deleted. WHATSAPP_SENDER_DISPLAY_NAME_UPDATED: Webhook event triggered when a WhatsApp sender display name is updated. WHATSAPP_SENDER_ERROR: Webhook event triggered when a WhatsApp sender enters an error state. WHATSAPP_SENDER_PENDING_VERIFICATION: Webhook event triggered when a WhatsApp sender is pending verification. WHATSAPP_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp sender. WHATSAPP_SENDER_DAILY_LIMIT_CHANGED: Webhook event triggered when a WhatsApp sender daily messaging limit changes. WHATSAPP_SENDER_QUALITY_RATING_CHANGED: Webhook event triggered when a WhatsApp sender quality rating changes. WHATSAPP_SENDER_USERNAME_UPDATED: Webhook event triggered when a WhatsApp sender username is updated. WHATSAPP_TEMPLATE_APPROVED: Webhook event triggered when a WhatsApp template is approved. WHATSAPP_TEMPLATE_REJECTED: Webhook event triggered when a WhatsApp template is rejected. WHATSAPP_TEMPLATE_DELETED: Webhook event triggered when a WhatsApp template is deleted. WHATSAPP_TEMPLATE_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp template. WHATSAPP_TEMPLATE_STATUS_UPDATED: Webhook event triggered when a WhatsApp template status changes. WHATSAPP_TEMPLATE_CATEGORY_UPDATED: Webhook event triggered when a WhatsApp template category changes. WHATSAPP_TEMPLATE_CATEGORY_FUTURE_UPDATE: Webhook event triggered when a future WhatsApp template category update is scheduled. WHATSAPP_TEMPLATE_QUALITY_SCORE_UPDATED: Webhook event triggered when a WhatsApp template quality score changes. ALL: Webhook event triggered for all supported events. uniqueItems: true minItems: 1 description: 'List of triggers you want to be notified about on your webhook. To be able to listen to all type of events use `ALL`. - Common: `ALL` - Bundles: `BUNDLE_DONE` - WhatsApp Sender: `WHATSAPP_SENDER_ACTIVE`, `WHATSAPP_SENDER_COMMENT_ADDED`, `WHATSAPP_SENDER_DAILY_LIMIT_CHANGED`, `WHATSAPP_SENDER_DELETED`, `WHATSAPP_SENDER_DISPLAY_NAME_UPDATED`, `WHATSAPP_SENDER_ERROR`, `WHATSAPP_SENDER_INACTIVE`, `WHATSAPP_SENDER_PENDING_VERIFICATION`, `WHATSAPP_SENDER_QUALITY_RATING_CHANGED`, `WHATSAPP_SENDER_REJECTED` or `WHATSAPP_SENDER_USERNAME_UPDATED` - WhatsApp Template: `WHATSAPP_TEMPLATE_APPROVED`, `WHATSAPP_TEMPLATE_CATEGORY_FUTURE_UPDATE`, `WHATSAPP_TEMPLATE_CATEGORY_UPDATED`, `WHATSAPP_TEMPLATE_COMMENT_ADDED`, `WHATSAPP_TEMPLATE_DELETED`, `WHATSAPP_TEMPLATE_QUALITY_SCORE_UPDATED`, `WHATSAPP_TEMPLATE_REJECTED` or `WHATSAPP_TEMPLATE_STATUS_UPDATED` - WhatsApp Account: `WHATSAPP_ACCOUNT_COMMENT_ADDED`, `WHATSAPP_ACCOUNT_DAILY_LIMIT_CHANGED`, `WHATSAPP_ACCOUNT_ONBOARDED`, `WHATSAPP_ACCOUNT_PENDING_VERIFICATION`, `WHATSAPP_ACCOUNT_REJECTED` or `WHATSAPP_WABA_ACCOUNT_CHANGED` - RCS Sender: `RCS_BRAND_REGISTRATION_PROCESS_STATUS_UPDATED`, `RCS_SENDER_COMMENT_ADDED`, `RCS_SENDER_OPERATOR_STATUS_UPDATED` or `RCS_SENDER_STATUS_UPDATED` - KakaoTalk Sender: `KAKAOTALK_SENDER_ACTIVE`, `KAKAOTALK_SENDER_COMMENT_ADDED`, `KAKAOTALK_SENDER_INACTIVE` or `KAKAOTALK_SENDER_REJECTED` - KakaoTalk Template: `KAKAOTALK_TEMPLATE_APPROVED`, `KAKAOTALK_TEMPLATE_COMMENT_ADDED` or `KAKAOTALK_TEMPLATE_REJECTED`' items: $ref: '#/components/schemas/WebhookWebhookTriggersEnum' WebhookWebhookInputDto: type: object properties: target: type: string description: A valid target url where events should be sent to. maxLength: 742 minLength: 1 format: url uniqueItems: false secret: type: string description: Secret to be used to sign contents of webhooks sent by the provisioning API. You can then use the secret to verify the signature. Please not that secret should have a high entropy to be considered secure. maxLength: 128 minLength: 1 uniqueItems: false triggers: type: array x-enumDescriptions: BUNDLE_DONE: Webhook event triggered when a bundle processing flow is completed. RCS_BRAND_REGISTRATION_PROCESS_STATUS_UPDATED: Webhook event triggered when the RCS brand registration process status changes. RCS_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to an RCS sender. RCS_SENDER_OPERATOR_STATUS_UPDATED: Webhook event triggered when an RCS sender operator status changes. RCS_SENDER_STATUS_UPDATED: Webhook event triggered when an RCS sender status changes. RCS_ACCOUNT_COMMENT_ADDED: Webhook event triggered when a new comment is added to an RCS account. KAKAOTALK_SENDER_ACTIVE: Webhook event triggered when a KakaoTalk sender becomes active. KAKAOTALK_SENDER_INACTIVE: Webhook event triggered when a KakaoTalk sender becomes inactive. KAKAOTALK_SENDER_REJECTED: Webhook event triggered when a KakaoTalk sender is rejected. KAKAOTALK_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to a KakaoTalk sender. KAKAOTALK_TEMPLATE_APPROVED: Webhook event triggered when a KakaoTalk template is approved. KAKAOTALK_TEMPLATE_COMMENT_ADDED: Webhook event triggered when a new comment is added to a KakaoTalk template. KAKAOTALK_TEMPLATE_REJECTED: Webhook event triggered when a KakaoTalk template is rejected. WHATSAPP_ACCOUNT_ONBOARDED: Webhook event triggered when a WhatsApp account onboarding is completed. WHATSAPP_ACCOUNT_PENDING_VERIFICATION: Webhook event triggered when a WhatsApp account is pending verification. WHATSAPP_ACCOUNT_REJECTED: Webhook event triggered when a WhatsApp account is rejected. WHATSAPP_ACCOUNT_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp account. WHATSAPP_ACCOUNT_DAILY_LIMIT_CHANGED: Webhook event triggered when a WhatsApp account daily messaging limit changes. WHATSAPP_WABA_ACCOUNT_CHANGED: Webhook event triggered when the linked WhatsApp Business Account changes. WHATSAPP_SENDER_ACTIVE: Webhook event triggered when a WhatsApp sender becomes active. WHATSAPP_SENDER_INACTIVE: Webhook event triggered when a WhatsApp sender becomes inactive. WHATSAPP_SENDER_REJECTED: Webhook event triggered when a WhatsApp sender is rejected. WHATSAPP_SENDER_DELETED: Webhook event triggered when a WhatsApp sender is deleted. WHATSAPP_SENDER_DISPLAY_NAME_UPDATED: Webhook event triggered when a WhatsApp sender display name is updated. WHATSAPP_SENDER_ERROR: Webhook event triggered when a WhatsApp sender enters an error state. WHATSAPP_SENDER_PENDING_VERIFICATION: Webhook event triggered when a WhatsApp sender is pending verification. WHATSAPP_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp sender. WHATSAPP_SENDER_DAILY_LIMIT_CHANGED: Webhook event triggered when a WhatsApp sender daily messaging limit changes. WHATSAPP_SENDER_QUALITY_RATING_CHANGED: Webhook event triggered when a WhatsApp sender quality rating changes. WHATSAPP_SENDER_USERNAME_UPDATED: Webhook event triggered when a WhatsApp sender username is updated. WHATSAPP_TEMPLATE_APPROVED: Webhook event triggered when a WhatsApp template is approved. WHATSAPP_TEMPLATE_REJECTED: Webhook event triggered when a WhatsApp template is rejected. WHATSAPP_TEMPLATE_DELETED: Webhook event triggered when a WhatsApp template is deleted. WHATSAPP_TEMPLATE_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp template. WHATSAPP_TEMPLATE_STATUS_UPDATED: Webhook event triggered when a WhatsApp template status changes. WHATSAPP_TEMPLATE_CATEGORY_UPDATED: Webhook event triggered when a WhatsApp template category changes. WHATSAPP_TEMPLATE_CATEGORY_FUTURE_UPDATE: Webhook event triggered when a future WhatsApp template category update is scheduled. WHATSAPP_TEMPLATE_QUALITY_SCORE_UPDATED: Webhook event triggered when a WhatsApp template quality score changes. ALL: Webhook event triggered for all supported events. uniqueItems: true minItems: 1 description: 'List of triggers you want to be notified about on your webhook. To be able to listen to all type of events use `ALL`. - Common: `ALL` - Bundles: `BUNDLE_DONE` - WhatsApp Sender: `WHATSAPP_SENDER_ACTIVE`, `WHATSAPP_SENDER_COMMENT_ADDED`, `WHATSAPP_SENDER_DAILY_LIMIT_CHANGED`, `WHATSAPP_SENDER_DELETED`, `WHATSAPP_SENDER_DISPLAY_NAME_UPDATED`, `WHATSAPP_SENDER_ERROR`, `WHATSAPP_SENDER_INACTIVE`, `WHATSAPP_SENDER_PENDING_VERIFICATION`, `WHATSAPP_SENDER_QUALITY_RATING_CHANGED`, `WHATSAPP_SENDER_REJECTED` or `WHATSAPP_SENDER_USERNAME_UPDATED` - WhatsApp Template: `WHATSAPP_TEMPLATE_APPROVED`, `WHATSAPP_TEMPLATE_CATEGORY_FUTURE_UPDATE`, `WHATSAPP_TEMPLATE_CATEGORY_UPDATED`, `WHATSAPP_TEMPLATE_COMMENT_ADDED`, `WHATSAPP_TEMPLATE_DELETED`, `WHATSAPP_TEMPLATE_QUALITY_SCORE_UPDATED`, `WHATSAPP_TEMPLATE_REJECTED` or `WHATSAPP_TEMPLATE_STATUS_UPDATED` - WhatsApp Account: `WHATSAPP_ACCOUNT_COMMENT_ADDED`, `WHATSAPP_ACCOUNT_DAILY_LIMIT_CHANGED`, `WHATSAPP_ACCOUNT_ONBOARDED`, `WHATSAPP_ACCOUNT_PENDING_VERIFICATION`, `WHATSAPP_ACCOUNT_REJECTED` or `WHATSAPP_WABA_ACCOUNT_CHANGED` - RCS Sender: `RCS_BRAND_REGISTRATION_PROCESS_STATUS_UPDATED`, `RCS_SENDER_COMMENT_ADDED`, `RCS_SENDER_OPERATOR_STATUS_UPDATED` or `RCS_SENDER_STATUS_UPDATED` - KakaoTalk Sender: `KAKAOTALK_SENDER_ACTIVE`, `KAKAOTALK_SENDER_COMMENT_ADDED`, `KAKAOTALK_SENDER_INACTIVE` or `KAKAOTALK_SENDER_REJECTED` - KakaoTalk Template: `KAKAOTALK_TEMPLATE_APPROVED`, `KAKAOTALK_TEMPLATE_COMMENT_ADDED` or `KAKAOTALK_TEMPLATE_REJECTED`' items: $ref: '#/components/schemas/WebhookWebhookTriggersEnum' required: - target - secret - triggers WebhookPapiErrorDto: type: object properties: errorCode: type: string description: Error code identifying the type of error. uniqueItems: false message: type: string description: Human-readable error message. uniqueItems: false resolution: type: string description: Suggested resolution for the error. uniqueItems: false additionalInformation: type: object additionalProperties: oneOf: - type: array items: type: string description: Additional context about the error. uniqueItems: false required: - errorCode - message - resolution WebhookWebhookDto: type: object properties: id: type: string description: The ID of the webhook. uniqueItems: false target: type: string description: The target url where events will be sent to. uniqueItems: false projectId: type: string description: The project that this webhook belongs to. uniqueItems: false triggers: type: array x-enumDescriptions: BUNDLE_DONE: Webhook event triggered when a bundle processing flow is completed. RCS_BRAND_REGISTRATION_PROCESS_STATUS_UPDATED: Webhook event triggered when the RCS brand registration process status changes. RCS_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to an RCS sender. RCS_SENDER_OPERATOR_STATUS_UPDATED: Webhook event triggered when an RCS sender operator status changes. RCS_SENDER_STATUS_UPDATED: Webhook event triggered when an RCS sender status changes. RCS_ACCOUNT_COMMENT_ADDED: Webhook event triggered when a new comment is added to an RCS account. KAKAOTALK_SENDER_ACTIVE: Webhook event triggered when a KakaoTalk sender becomes active. KAKAOTALK_SENDER_INACTIVE: Webhook event triggered when a KakaoTalk sender becomes inactive. KAKAOTALK_SENDER_REJECTED: Webhook event triggered when a KakaoTalk sender is rejected. KAKAOTALK_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to a KakaoTalk sender. KAKAOTALK_TEMPLATE_APPROVED: Webhook event triggered when a KakaoTalk template is approved. KAKAOTALK_TEMPLATE_COMMENT_ADDED: Webhook event triggered when a new comment is added to a KakaoTalk template. KAKAOTALK_TEMPLATE_REJECTED: Webhook event triggered when a KakaoTalk template is rejected. WHATSAPP_ACCOUNT_ONBOARDED: Webhook event triggered when a WhatsApp account onboarding is completed. WHATSAPP_ACCOUNT_PENDING_VERIFICATION: Webhook event triggered when a WhatsApp account is pending verification. WHATSAPP_ACCOUNT_REJECTED: Webhook event triggered when a WhatsApp account is rejected. WHATSAPP_ACCOUNT_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp account. WHATSAPP_ACCOUNT_DAILY_LIMIT_CHANGED: Webhook event triggered when a WhatsApp account daily messaging limit changes. WHATSAPP_WABA_ACCOUNT_CHANGED: Webhook event triggered when the linked WhatsApp Business Account changes. WHATSAPP_SENDER_ACTIVE: Webhook event triggered when a WhatsApp sender becomes active. WHATSAPP_SENDER_INACTIVE: Webhook event triggered when a WhatsApp sender becomes inactive. WHATSAPP_SENDER_REJECTED: Webhook event triggered when a WhatsApp sender is rejected. WHATSAPP_SENDER_DELETED: Webhook event triggered when a WhatsApp sender is deleted. WHATSAPP_SENDER_DISPLAY_NAME_UPDATED: Webhook event triggered when a WhatsApp sender display name is updated. WHATSAPP_SENDER_ERROR: Webhook event triggered when a WhatsApp sender enters an error state. WHATSAPP_SENDER_PENDING_VERIFICATION: Webhook event triggered when a WhatsApp sender is pending verification. WHATSAPP_SENDER_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp sender. WHATSAPP_SENDER_DAILY_LIMIT_CHANGED: Webhook event triggered when a WhatsApp sender daily messaging limit changes. WHATSAPP_SENDER_QUALITY_RATING_CHANGED: Webhook event triggered when a WhatsApp sender quality rating changes. WHATSAPP_SENDER_USERNAME_UPDATED: Webhook event triggered when a WhatsApp sender username is updated. WHATSAPP_TEMPLATE_APPROVED: Webhook event triggered when a WhatsApp template is approved. WHATSAPP_TEMPLATE_REJECTED: Webhook event triggered when a WhatsApp template is rejected. WHATSAPP_TEMPLATE_DELETED: Webhook event triggered when a WhatsApp template is deleted. WHATSAPP_TEMPLATE_COMMENT_ADDED: Webhook event triggered when a new comment is added to a WhatsApp template. WHATSAPP_TEMPLATE_STATUS_UPDATED: Webhook event triggered when a WhatsApp template status changes. WHATSAPP_TEMPLATE_CATEGORY_UPDATED: Webhook event triggered when a WhatsApp template category changes. WHATSAPP_TEMPLATE_CATEGORY_FUTURE_UPDATE: Webhook event triggered when a future WhatsApp template category update is scheduled. WHATSAPP_TEMPLATE_QUALITY_SCORE_UPDATED: Webhook event triggered when a WhatsApp template quality score changes. ALL: Webhook event triggered for all supported events. uniqueItems: true description: List of triggers this webhook is triggered by. items: $ref: '#/components/schemas/WebhookWebhookTriggersEnum' required: - id - target - projectId - triggers WebhookWebhookTriggersEnum: type: string enum: - ALL - BUNDLE_DONE - KAKAOTALK_SENDER_ACTIVE - KAKAOTALK_SENDER_COMMENT_ADDED - KAKAOTALK_SENDER_INACTIVE - KAKAOTALK_SENDER_REJECTED - KAKAOTALK_TEMPLATE_APPROVED - KAKAOTALK_TEMPLATE_COMMENT_ADDED - KAKAOTALK_TEMPLATE_REJECTED - RCS_BRAND_REGISTRATION_PROCESS_STATUS_UPDATED - RCS_SENDER_COMMENT_ADDED - RCS_SENDER_OPERATOR_STATUS_UPDATED - RCS_SENDER_STATUS_UPDATED - RCS_ACCOUNT_COMMENT_ADDED - WHATSAPP_ACCOUNT_COMMENT_ADDED - WHATSAPP_ACCOUNT_DAILY_LIMIT_CHANGED - WHATSAPP_ACCOUNT_ONBOARDED - WHATSAPP_ACCOUNT_PENDING_VERIFICATION - WHATSAPP_ACCOUNT_REJECTED - WHATSAPP_WABA_ACCOUNT_CHANGED - WHATSAPP_SENDER_ACTIVE - WHATSAPP_SENDER_COMMENT_ADDED - WHATSAPP_SENDER_DAILY_LIMIT_CHANGED - WHATSAPP_SENDER_DELETED - WHATSAPP_SENDER_DISPLAY_NAME_UPDATED - WHATSAPP_SENDER_ERROR - WHATSAPP_SENDER_INACTIVE - WHATSAPP_SENDER_PENDING_VERIFICATION - WHATSAPP_SENDER_QUALITY_RATING_CHANGED - WHATSAPP_SENDER_REJECTED - WHATSAPP_SENDER_USERNAME_UPDATED - WHATSAPP_TEMPLATE_APPROVED - WHATSAPP_TEMPLATE_CATEGORY_FUTURE_UPDATE - WHATSAPP_TEMPLATE_CATEGORY_UPDATED - WHATSAPP_TEMPLATE_COMMENT_ADDED - WHATSAPP_TEMPLATE_DELETED - WHATSAPP_TEMPLATE_QUALITY_SCORE_UPDATED - WHATSAPP_TEMPLATE_REJECTED - WHATSAPP_TEMPLATE_STATUS_UPDATED description: List of triggers this webhook is triggered by. WebhookWebhookListDto: type: object properties: totalSize: type: number description: Total size of the entries matching the search query. uniqueItems: false pageSize: type: number description: Requested size of the page. uniqueItems: false previousPageToken: type: string description: Encoded token to use in list request to fetch previous batch of entries. uniqueItems: false nextPageToken: type: string description: Encoded token to use in list request to fetch next batch of entries. uniqueItems: false webhooks: uniqueItems: false type: array items: $ref: '#/components/schemas/WebhookWebhookDto' required: - totalSize - pageSize - webhooks recordingOptions: title: Recording Options type: object additionalProperties: false description: Recording options for this recording. required: - destination - destinationUrl - credentials properties: format: $ref: '#/components/schemas/recordingFormat' recordingType: $ref: '#/components/schemas/recordingType' destination: $ref: '#/components/schemas/recordingDestination' destinationUrl: type: string description: Destination URL for the recording. example: s3://voice-recordings-prod/calls credentials: type: string description: Credentials to third party storage. example: accessKeyId:secretAccessKey:eu-central-1 transcriptionOptions: $ref: '#/components/schemas/transcriptionOptions' amdEvents: type: object additionalProperties: false title: AMD Events description: SVAML commands to execute based on the answering machine detection result. These events define different call flows depending on whether a human, machine, beep, or unknown entity answers the call. properties: onHuman: description: SVAML commands to be executed when a human is detected $ref: '#/components/schemas/svamlCommands' onMachine: description: SVAML commands to be executed when a machine is detected $ref: '#/components/schemas/svamlCommands' onBeep: description: SVAML commands to be executed when a beep is detected $ref: '#/components/schemas/svamlCommands' onUnknown: description: SVAML commands to be executed when an unknown event is detected $ref: '#/components/schemas/svamlCommands' typesOfMessages: type: array title: Message List description: Ordered list of messages to play. minItems: 1 maxItems: 10 items: $ref: '#/components/schemas/message' answer: type: object additionalProperties: false title: Answer description: Answers an inbound call leg. This is a non-blocking command — execution continues to the next command in the sequence immediately after the answer is initiated. required: - command properties: command: type: string const: answer description: Answer call examples: - command: answer stopMessages: type: object additionalProperties: false title: Stop Messages description: 'Stops a message sequence started by a `messages` command. It will also cancel any messages with specified `messagesName` that will appear in the call session in the future. This is a non-blocking command.' required: - command - messagesName properties: command: type: string const: stopMessages description: Command to stop playing messages messagesName: type: string description: Name of the message sequence to stop, as set by `messagesName` in the `messages` command. minLength: 1 maxLength: 32 pattern: ^\S+$ examples: - command: stopMessages messagesName: my-messages projectId: title: Project ID type: string format: uuid description: The `Id` of the project associated with the call. examples: - 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 originationType: title: Origination Type x-category: call x-usage: call type: string description: 'Indicates the origin/source of the call. This describes **how the call was initiated** (PSTN or via the API).' enum: - PHONE - SIP - SERVER x-enumDescriptions: PHONE: The call originated from the telephone network (PSTN). SIP: The call originated from a SIP trunk. SERVER: The call originated through the Sinch API. examples: - PHONE sipFrom: type: object additionalProperties: false title: SIP Origin required: - type - sip properties: type: type: string const: SIP description: Indicates the call originated from a SIP (Session Initiation Protocol) endpoint. sip: type: object additionalProperties: false required: - endpoint properties: endpoint: type: string description: SIP URI of the originating endpoint. Both `sip:` (unencrypted) and `sips:` (TLS-encrypted) schemes are supported. format: uri pattern: '^sips?:' maxLength: 192 displayName: type: string description: Display name presented to the called party as the caller identity. Transmitted as the display name part of the SIP `From` header (for example, `Alice `). maxLength: 64 example: Alice examples: - type: SIP sip: endpoint: sip:user@example.com displayName: Alice to: title: To description: Call destination - Phone Number or Stream URI oneOf: - $ref: '#/components/schemas/phone' - $ref: '#/components/schemas/sip' - $ref: '#/components/schemas/stream' - $ref: '#/components/schemas/voiceRelay' discriminator: propertyName: type mapping: PHONE: '#/components/schemas/phone' SIP: '#/components/schemas/sip' STREAM: '#/components/schemas/stream' VOICE_RELAY: '#/components/schemas/voiceRelay' callResult: title: Call Result description: 'The outcome/state of the call. This field includes both **transitional** states (during call setup and execution) and **final** states (when the call has ended).' type: string enum: - QUEUED - INITIATED - IN_PROGRESS - COMPLETED - REJECTED - NO_ANSWER - CANCEL - BUSY - FAILED x-enumDescriptions: QUEUED: The call is queued for initiation. This is a transitional state. INITIATED: The call is connecting but the recipient has not yet answered. This is a transitional state. IN_PROGRESS: The call has been answered and is in progress. This is a transitional state. COMPLETED: The call was answered and is ended. This is a final state. REJECTED: The call was rejected by the recipient. NO_ANSWER: The call was not answered by the recipient. CANCEL: The call was cancelled. BUSY: The call was not answered because the recipient was busy. FAILED: The call could not be completed. examples: - IN_PROGRESS stopRecording: type: object additionalProperties: false title: Stop Recording description: Stops a recording previously started by a `startRecording` command. This is a non-blocking command — execution continues to the next command in the sequence immediately after the stop is initiated. required: - command - recordingName properties: command: type: string const: stopRecording description: Command to stop recording on the channel recordingName: type: string description: Name of the recording to stop, as set by `recordingName` in the `startRecording` command. minLength: 1 maxLength: 32 pattern: ^\S+$ example: my-recording menu: type: object additionalProperties: false title: Run menus description: 'Defines a set of named menus and executes them starting from startMenu. This is a blocking command — execution waits for the menu to complete before proceeding to the next command. Each menu item configures prompts, input collection, timeout handling, and repeat behavior.' required: - command - startMenu - menus properties: command: type: string const: menu description: Executes menu-based input collection using the configured menu definitions. startMenu: type: string minLength: 1 maxLength: 16 description: Name of the menu to execute first. Must match a key in menus. menus: type: object propertyNames: type: string maxLength: 16 description: Map of menu definitions keyed by menu name. additionalProperties: $ref: '#/components/schemas/menuItem' examples: - command: menu startMenu: main menus: main: prompt: allowBargeIn: true messages: - type: SAY say: text: Press 1 for sales or 2 for support. voiceName: Emma repeatPrompt: allowBargeIn: true messages: - type: SAY say: text: Invalid option. Press 1 for sales or 2 for support. voiceName: Emma inputTimeoutDurationSeconds: 5 repeatCount: 2 minimumInputLength: 1 maximumInputLength: 1 inputMethods: - DTMF matches: '1': - command: messages messages: - type: SAY say: text: Connecting to sales. voiceName: Emma - command: dial callName: sales to: type: PHONE phone: number: '+15551234567' '2': - command: messages messages: - type: SAY say: text: Connecting to support. voiceName: Emma - command: dial callName: support to: type: PHONE phone: number: '+15557654321' onFail: - command: messages messages: - type: SAY say: text: Sorry, no valid selection was received. voiceName: Emma - command: hangup webhookRequest: x-category: webhooks x-usage: call type: object additionalProperties: false title: Webhook event payload description: The event payload delivered to the webhook endpoint. required: - event - call properties: event: description: 'Identifies the type of call event that triggered this webhook notification. Call-related webhook events always start with `call.` followed by the type of event that triggered them. Events triggered by the `webhook` SVAML command are dynamic and follow the pattern `call.webhook.`.' oneOf: - type: string enum: - call.incoming - call.answered - call.busy - call.rejected - call.timeout - call.hangup - call.failed - call.amd.human - call.amd.machine - call.amd.beep - call.amd.unknown - call.message.finished - call.recording.finished - call.recording.failed - call.menu x-enumDescriptions: call.incoming: Triggered when an inbound call arrives on a service configured with a webhook URL. call.answered: Triggered when an outbound call is answered by the recipient. call.busy: Triggered when the outbound call recipient is busy. call.rejected: Triggered when the outbound call is rejected by the recipient. call.timeout: Triggered when the outbound call was not answered within the dial timeout. call.hangup: Triggered when the call is disconnected. call.failed: Triggered when the call could not be set up. call.amd.human: Triggered when answering machine detection determines that a human answered the call. call.amd.machine: Triggered when answering machine detection determines that a machine answered the call. call.amd.beep: Triggered when answering machine detection detects a voicemail beep. call.amd.unknown: Triggered when answering machine detection cannot determine whether a human, machine, or beep was detected. call.message.finished: Triggered when all messages in a `messages` sequence have finished playing. call.recording.finished: Triggered when a recording is successfully stopped. This event does not guarantee that the recorded file has been delivered to the configured destination yet. call.recording.failed: Triggered when recording could not be started. call.menu: Triggered when a menu completes and input is received from the user or the menu fails. - type: string pattern: ^call\.webhook\. description: Dynamic event name from a `webhook` SVAML command, prefixed with `call.webhook.`. example: call.incoming call: description: The current state of the call at the time the event was triggered. $ref: '#/components/schemas/call' menu: type: object description: 'Information about the menu interaction that triggered the webhook, including the menu name and the input sequence received from the user. This property is also included for webhooks triggered by the `webhook` command within a menu context.' required: - menuName - input properties: menuName: type: string description: The name of the menu that triggered this webhook event. input: type: string description: The input sequence gathered from the user by the menu. stream: type: object additionalProperties: false title: Stream description: Routes the call to a WebSocket stream endpoint for real-time audio processing. required: - type - stream properties: type: type: string const: STREAM description: Routes the call to a WebSocket stream endpoint for real-time audio processing. stream: type: object additionalProperties: false required: - endpoint properties: endpoint: type: string description: WebSocket endpoint that will accept the incoming connection for real-time audio streaming. Must be a valid WebSocket URL using either `ws://` or `wss://` (recommended). The URL must be reachable from the public internet and capable of handling the negotiated stream protocol. example: wss://example.com streamOptions: type: object additionalProperties: false properties: version: type: integer description: Defines the version of the stream protocol. default: 1 example: 1 codec: type: string const: PCM description: 'Defines the audio codec/format used for the stream audio payload. Currently, only `PCM` is supported (uncompressed raw audio). Use `sampleRate` to configure the sampling rate for the stream.' sampleRate: type: integer description: "Defines the audio sampling rate (Hz) used for the stream.\n\nFor calls that traverse the PSTN, audio is typically sampled at 8 kHz, so using a higher value will not improve perceived quality. \nHigher sample rates can be useful for non-PSTN scenarios (for example, SIP/streaming paths), but will increase bandwidth usage and processing load." enum: - 8000 - 16000 - 24000 - 44100 - 48000 - 96000 x-enumDescriptions: '8000': 8 kHz (standard for PSTN calls) '16000': 16 kHz (wideband audio) '24000': 24 kHz (super-wideband audio) '44100': 44.1 kHz (CD quality audio) '48000': 48 kHz (professional audio quality) '96000': 96 kHz (high-resolution audio) default: 8000 example: 16000 callHeaders: $ref: '#/components/schemas/callHeaders' examples: - endpoint: wss://example.com streamOptions: version: 1 codec: PCM sampleRate: 8000 callHeaders: - key: my-key value: my-key-value examples: - type: STREAM stream: endpoint: wss://example.com streamOptions: version: 1 codec: PCM sampleRate: 16000 callHeaders: - key: my-key value: my-key-value money: title: Money description: A monetary amount with an associated currency code. type: object additionalProperties: false required: - currencyCode - amount properties: currencyCode: type: string description: The 3-letter currency code defined in [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html). example: USD amount: type: string pattern: ^\d+(\.\d{1,4})?$ description: The monetary amount as a string to preserve precision. Supports up to 4 decimal places (e.g., "10.5000", "0.9999"). example: '0.0123' svamlCommands: type: array title: SVAML Commands description: 'An ordered list of SVAML v2 (Sinch Voice Application Markup Language) commands that describe a call flow. Commands are executed sequentially in the order they are defined. **Blocking vs. non-blocking:** Some commands block execution until they complete (`pause`, `webhook`, `menu`, `gotoMenu`), while others return immediately and run in parallel (`dial`, `messages`, `amd`, `answer`, `hangup`, `startRecording`, `stopRecording`, `bridgeCall`, `stopMessages`). Each command''s description specifies its behavior. **Nesting scope:** Commands that appear inside event handlers (e.g., `dial.events.onAnswer`, `messages.events.onFinish`) form independent sequences and execute in their own context — they are not continuations of the parent sequence.' items: $ref: '#/components/schemas/svamlCommand' batchId: title: Batch ID type: string format: ulid description: The ID of the batch. examples: - 01BX5ZZKBKACTAV9WEVGEMMVRC sip: type: object additionalProperties: false title: SIP Endpoint required: - type - sip properties: type: type: string const: SIP description: Routes the call to a SIP (Session Initiation Protocol) endpoint. sip: type: object additionalProperties: false required: - endpoint properties: endpoint: type: string description: SIP URI of the destination endpoint. Both `sip:` (unencrypted) and `sips:` (TLS-encrypted) schemes are supported. format: uri maxLength: 256 pattern: '^sips?:' transport: type: string description: 'Transport protocol to use for the SIP signalling channel. If omitted, the platform selects a default based on the URI scheme: `UDP` for `sip:` and `TLS` for `sips:`. Setting this explicitly overrides that default — for example, to force `TCP` for a `sip:` URI or to use `TLS` without switching to the `sips:` scheme.' enum: - UDP - TCP - TLS x-enumDescriptions: UDP: Connectionless transport. Lowest overhead; suitable for most standard SIP deployments. TCP: Connection-oriented transport. More reliable for large SIP messages or NAT traversal scenarios. TLS: Encrypted transport. Provides confidentiality and integrity for SIP signalling. callHeaders: $ref: '#/components/schemas/sipCallHeaders' examples: - type: SIP sip: endpoint: sip:user@example.com transport: TCP callHeaders: - key: X-Correlation-Id value: '12345' - key: X-Call-Routing value: forwarded voiceRelay: type: object additionalProperties: false title: Voice Relay description: Routes the call through the Voice Relay service, enabling real-time speech-to-text (STT) and text-to-speech (TTS) via a WebSocket connection to the application backend. required: - type - voiceRelay properties: type: type: string const: VOICE_RELAY description: Connects to the Voice Relay service to enable STT and TTS services... voiceRelay: type: object additionalProperties: false required: - endpoint - ttsVoice - sttLanguage properties: endpoint: type: string format: uri description: URL to the server that will accept the web-socket request example: wss://acme.com/agent enableInterruptions: type: boolean description: 'Allow "barge-in" during text-to-speech (TTS) playback. When `true`, TTS playback is interrupted as soon as inbound speech is detected, unless the currently playing content is marked as uninterruptible. When `false`, TTS playback continues uninterrupted, but an interruption signal is still sent over the WebSocket so the client application can choose to stop playback manually if needed.' default: true example: true ttsVoice: description: "Name of the voice to be used when synthesizing speech. \n\nThis is the default voice used, if no override voice is provided in the web-socket TTS message." $ref: '#/components/schemas/voiceName' sttLanguage: type: string pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$ description: 'BCP-47 language tag used for speech-to-text transcription of the inbound audio. This value determines which language model is used for transcription.' example: en-US callHeaders: $ref: '#/components/schemas/callHeaders' examples: - type: VOICE_RELAY voiceRelay: endpoint: wss://acme.com/agent enableInterruptions: true ttsVoice: Emma sttLanguage: en-US callHeaders: - key: my-key value: my-key-value messages: type: object additionalProperties: false title: Messages description: "Plays one or more messages on the call. Multiple messages in the array are played sequentially in order.\n\nThis is a non-blocking command — the next command in the sequence executes immediately while messages play in parallel. \nPlayback outcomes are handled via the `events` property. The `onFinish` event can be used to run a command after all messages complete." required: - command - messages properties: command: type: string const: messages description: Command to play a message on the channel messagesName: type: string description: 'Name of the message for identification and reference within the call session. This name is used to uniquely identify the message and must be unique within the current call session. This name can be referenced in other commands (e.g., `stopMessages`) to control this specific message.' minLength: 1 maxLength: 32 pattern: ^\S+$ example: my-messages messages: $ref: '#/components/schemas/typesOfMessages' events: $ref: '#/components/schemas/messageEvents' examples: - command: messages messagesName: greeting-sequence messages: - type: SAY say: text: Hello! Your call is being connected. voiceName: Emma - type: PLAY play: url: https://example.com/audio/hold-music.mp3 - type: SAY say: text: Thank you for waiting. format: SSML voiceName: Emma serviceId: title: Service ID type: string format: uuid description: The ID of the service used. examples: - 6e124178-c29d-46a5-943c-5c2ae544aade amd: type: object additionalProperties: false title: Answering Machine Detection description: 'AMD (Answering Machine Detection) command to detect what answered the call. Possible outcomes are: human, machine, beep, or unknown. This is a non-blocking command — the next command in the sequence executes immediately while detection runs in parallel. Results are delivered via the `events` property.' required: - command properties: command: type: string const: amd description: Command to run Answering Machine Detection on the call events: $ref: '#/components/schemas/amdEvents' examples: - command: amd events: onHuman: - command: pause durationMilliseconds: 1000 - command: bridgeCall bridgeName: my-bridge onBeep: - command: messages messagesName: my-amd-messages messages: - type: SAY say: text: Hello, this is a test message voiceName: Emma message: type: object title: Message description: A single message item. The required payload depends on `type`. oneOf: - $ref: '#/components/schemas/messageSay' - $ref: '#/components/schemas/messagePlay' discriminator: propertyName: type mapping: SAY: '#/components/schemas/messageSay' PLAY: '#/components/schemas/messagePlay' phone: type: object additionalProperties: false title: Phone description: Routes the call to a phone number on the Public Switched Telephone Network (PSTN). required: - type - phone properties: type: type: string const: PHONE description: Routes the call to a phone number on the Public Switched Telephone Network (PSTN). The number must be in E.164 format. phone: type: object additionalProperties: false required: - number properties: number: $ref: '#/components/schemas/phoneNumber' examples: - type: PHONE phone: number: '+4673522488' callReason: title: Call Reason description: 'Reason explaining **why** the call ended in the given `callResult`. `callResult` describes **what** happened (state/outcome). `callReason` provides additional context about the underlying cause (for example, who terminated the call, routing issues, or validation errors).' type: string enum: - OK - NOT_AVAILABLE - CALLER_HANGUP - CALLEE_HANGUP - MANAGER_HANGUP - DID_NOT_FOUND - INVALID_SCRIPT - UNKNOWN_PRODUCT - NO_MORE_ROUTES - ERROR x-enumDescriptions: OK: The call was completed successfully. NOT_AVAILABLE: The callee was not available. CALLER_HANGUP: The caller hung up the call. CALLEE_HANGUP: The callee hung up the call. MANAGER_HANGUP: The call was ended by the call manager. DID_NOT_FOUND: The DID number was not found. INVALID_SCRIPT: The SVAML script was invalid. UNKNOWN_PRODUCT: The product associated with the call is unknown. NO_MORE_ROUTES: There are no more routes to complete the call. ERROR: An error occurred during the call. examples: - OK recordingType: title: Recording Type description: The type of recording to perform. type: string enum: - COMBINED - INBOUND - OUTBOUND x-enumDescriptions: COMBINED: Record inbound and outbound voice streams. INBOUND: Record inbound voice stream only. OUTBOUND: Record outbound voice stream only. default: COMBINED menuPrompt: type: object additionalProperties: false title: Menu Prompt description: Prompt configuration for menu playback, including prompt messages and barge-in behavior. required: - messages properties: allowBargeIn: type: boolean description: 'Controls whether input can interrupt prompt playback. When enabled, playback stops as soon as input is detected and the input is evaluated immediately if matching conditions are met. When disabled, input is still collected during playback and evaluated after playback finishes.' default: true messages: $ref: '#/components/schemas/typesOfMessages' messageEvents: type: object additionalProperties: false title: Message Events description: 'SVAML commands to execute based on message playback outcomes. ' properties: onFinish: description: 'Commands to execute when all messages in the sequence have finished playing. ' $ref: '#/components/schemas/svamlCommands' menuItem: type: object additionalProperties: false title: Menu Item description: 'Defines a single menu step, including prompts, input handling rules, input-to-command matches, and failure handling. Each collected input is matched against the values in the `matches` property. If no match succeeds, the `onFail` commands are executed. If neither `matches` nor `onFail` is defined and the service call behavior is set to `WEBHOOK`, a webhook request is sent including the collected input.' properties: prompt: $ref: '#/components/schemas/menuPrompt' description: 'Prompt played when this menu starts. This prompt is also used as the repeat prompt when repeatPrompt is not defined for the menu.' repeatPrompt: $ref: '#/components/schemas/menuPrompt' description: 'Prompt played when the menu is repeated. Repeats occur when input times out or when the provided input does not match any menu match item.' inputTimeoutDurationSeconds: type: integer description: Maximum number of seconds to wait for user input before the input attempt times out. minimum: 1 maximum: 60 default: 5 example: 10 repeatCount: type: integer description: 'Maximum number of times the menu is repeated. A repeat occurs when input times out or when the provided input does not match any menu match item.' minimum: 0 maximum: 10 default: 2 example: 3 minimumInputLength: type: integer description: Minimum number of input characters required before the menu evaluates the collected input. minimum: 1 maximum: 100 default: 1 example: 3 maximumInputLength: type: integer description: Maximum number of input characters that triggers the menu to evaluate the collected input. minimum: 1 maximum: 100 default: 1 example: 10 terminatingSequence: type: string pattern: ^[0-9*#]+$ description: 'Character sequence that signals the end of input and triggers immediate evaluation. Useful when variable-length input is allowed and shorter valid options should be submitted without waiting for timeout or maximum length. The terminating sequence value is included in the evaluated input.' maxLength: 10 inputMethods: type: array description: Input methods accepted for this menu when collecting user input. default: - DTMF items: type: string enum: - DTMF x-enumDescriptions: DTMF: Collect input from keypad tones (Dual-Tone Multi-Frequency). matches: type: object description: 'Items matched against the collected input. Maximum number of allowed match expressions is 50. Defined as a dictionary where each property name is a literal or a regular expression string. Values are evaluated in the order they are defined.' maxProperties: 50 propertyNames: type: string minLength: 1 maxLength: 256 description: 'A regular expression or literal string to match against the collected user input. Must not be empty. Property keys are evaluated sequentially in the order defined. The first key that matches the input will trigger its associated SVAML commands. **Note**: Use `\\*` to match the DTMF star tone (*).' additionalProperties: $ref: '#/components/schemas/svamlCommands' onFail: $ref: '#/components/schemas/svamlCommands' description: 'SVAML commands executed when the menu fails to collect a matching input. This handler runs after the repeat limit is reached without any input matching a menu match item.' recordingDestination: title: Recording Destination type: string description: Select target service to receive recorded and transcribed files enum: - AWS - GCP - AZURE x-enumDescriptions: AWS: Store recordings in Amazon Web Services S3 bucket. Use `s3` as schema for the URL. GCP: Store recordings in Google Cloud Platform Storage. Use `gs` as schema for the URL. AZURE: Store recordings in Microsoft Azure Blob Storage. Use `azure` as schema for the URL. default: AWS examples: - AWS webhookResponse: type: object title: Webhook Response description: 'A SVAML document returned in response to a webhook. **Note:** `callName` and `events` only take effect in responses to webhooks triggered by an incoming call. In responses to other webhook types, they are ignored.' allOf: - $ref: '#/components/schemas/svamlInput' webhookFallbackUrl: title: Webhook Fallback URL type: string format: uri description: 'Fallback webhook URL used when the primary webhook URL fails. A failed request is re-sent to this URL immediately. After repeated consecutive failures of the primary URL, requests are sent only here until the primary URL recovers. See *Timeouts and failover* in the **Webhooks** section for the authoritative algorithm.' examples: - https://example.com/fallback voiceName: type: string description: Sinch Voice Name to use for text-to-speech. Each voice is tied to a specific language variant, gender, and pricing model (Free/Standard or Paid/Generative). See [https://developers.sinch.com/docs/voice-2.0/api-reference/text-to-speech-voices#text-to-speech-voices](https://developers.sinch.com/docs/voice-2.0/api-reference/text-to-speech-voices#currently-available-languages) for details example: Emma enum: - Aarav - Aarav_2 - Aarohi - Aarti - Aarti_2 - Aarti_3 - Aashi - Abbi - Abdullah - Abeo - Abril - Achara - Ada - Ada_2 - Adam - Adam_2 - Aditi - Adri - Adriano - Agnieszka - Ahmet - Aigul - Ainhoa - Alain - Alba - Aled - Aleksandar - Alessio - Alessio_2 - Alex - Alfie - Ali - Alina - Alloy - Alloy_2 - Alonso - Alvaro - Amal - Amala - Amanda - Amany - Amber - Ambre - Ameha - Amina - Amy - Amy_2 - Amy_3 - Ana - Anahit - Ananya - Ananya_2 - Anbu - Ander - Andre - Andre_2 - Andrea - Andres - Andrew - Andrew_2 - Andrew_3 - Andrew_4 - Angelo - Anila - Annette - Antoine - Antonin - Antonio - Anu - Aoi - Arabella - Ardi - Aria - Aria_2 - Ariane - Arjun - Arjun_2 - Arjun_3 - Arlet - Arnau - Arnaud - Arthur - Arya - Arya_2 - Asad - Ashley - Asilia - Astrid - Athina - Ava - Ava_2 - Ava_3 - Avri - Ayanda - Ayanda_2 - Aysha - Babek - Banu - Bashkar - Bassel - Bataa - Beatrice - Beatriz - Belkys - Bella - Benigno - Bernd - Bianca - Bianca_2 - Bianca_3 - Blessica - BongJin - Borislav - Brandon - Brandon_2 - Bree - Brenda - Brian - Brian_2 - Brian_3 - Brigitte - Bryan - Bryan_2 - Bryan_3 - Burcu - Calimero - Camila - Camilla - Camilla_2 - Camilla_3 - Candela - Carla - Carlos - Carlota - Carly - Carmen - Cataldo - Catalina - Cecilio - Celeste - Celine - Celine_2 - Chantal - Chanthavong - Charline - Chilemba - Christel - Christoph - Christopher - Christopher_2 - Clara - Claude - Colette - Colm - Conchita - Connor - Conrad - Cora - Cora_2 - Coralie - Cristiano - Daichi - Dalia - Dalia_2 - Daniel - Daniel_2 - Danielle - Danielle_2 - Dario - Dariya - Darren - Daudi - Daulet - Davis - Davis_2 - Davis_3 - Dena - Denise - Derek - Dhwani - Diego - Dilara - Dimas - Dmitry - Donato - Dora - Duarte - Duncan - Dustin - Echo - Eka - Elena - Elias - Elimu - Elin - Elizabeth - Elke - Elliot - Eloise - Elsa - Elsie - Elvira - Elza - Emel - Emil - Emilio - Emily - Emma - Emma_2 - Emma_3 - Emma_4 - Enric - Enrique - Eric - Estrella - Ethan - Evelyn - Everita - Ewa - Ewa_2 - Ezinne - Fabio - Fabiola - Fable - Fabrice - Fahed - Farid - Fatima - Federico - Fenna - Fernanda - Fiamma - Filiz - Finn - Florian - Florian_2 - Florin - Francisca - Freya - Gabrielle - Gabrielle_2 - Gabrijela - Gadis - Gagan - Gemma - Gemma_2 - Geraint - Gerard - Gerardo - Gianni - Giorgi - Giorgio - Giovanna - Gisela - Giuseppe - Giuseppe_2 - Gonzalo - GookMin - Goran - Grace - Gregory - Gudrun - Gul - GulNawaz - Gunnar - Guy - Gwyneth - Hala - Hamdan - Hamed - Hannah - Hannah_2 - Hans - Harri - Hayk - Hedi - Hemkala - Henri - Hila - Hillevi - HiuGaai - Hiujin - HiuMaan - HoaiMy - Hollie - HsiaoChen - HsiaoYu - Humberto - Hyunsu - Hyunsu_2 - Hyunsu_3 - Ida - Ilir - Iman - Imani - Imelda - Ines - Ines_2 - Ingrid - InJoon - Irene - Irma - Isabella - Isabella_2 - Isabella_3 - Isabelle - Isabelle_2 - Iselin - Isidora - Ismael - Ivy - Ivy_2 - Jacek - Jacob - Jacqueline - Jajang - Jamal - James - Jan - Jane - Jane_2 - Jann - Jasmine - Jasmine_2 - Jason - Javier - Jean - Jenny - Jenny_2 - Jenny_3 - Jeppe - Jerome - Jihye - JiMin - Jimmie - Jitka - Joana - Joanna - Joanna_2 - Joanna_3 - Joanne - Joey - Joey_2 - Jonas - Jorge - Jorge_2 - Joseph - Josephine - Juan - Julio - Justin - Justin_2 - Kai - Kajal - Kajal_2 - Kalina - Kani - Karina - Karl - Karla - Kasper - Katja - Kavya - Kavya_2 - Kazuha - Keita - Ken - Kendra - Kendra_2 - Keomany - Kert - Kevin - Killian - Kim - Kimberly - Kimberly_2 - Klarissa - Klaus - Kumar - Kunal - Kunal_2 - Laia - Laila - Laith - Larissa - Latifa - Laura - Laura_2 - Layla - Lea - Lea_2 - Lea_3 - Leah - Leila - Leni - Lennart - Leonas - Leticia - Lewis - Lia - Liam - Lian - Lian_2 - Libby - Liberto - Lisa - Lisa_2 - Lisandro - Liv - Livia - Livia_2 - Lola - Lorena - Lorenzio - Lorenzo - Lotte - Louisa - Lucia - Lucia_2 - Lucia_3 - Luciano - Lucien - Luis - Lukas - Luke - Luna - Luna_2 - Lupe - Lupe_2 - Lupe_3 - Maarten - Macerio - Macerio_2 - Madhur - Madina - Mads - Maisie - Maja - Manohar - Manuel - Manuela - Marcello - Marcelo - Marek - Margarita - Maria - Marija - Marina - Mario - Marlene - Marta - Maryam - Masaru - Mateo - Mathieu - Matthew - Matthew_2 - Matthew_3 - Mattias - Maurice - Maxim - Maya - Mayu - Mekdes - Mia - Mia_2 - Mia_3 - Michelle - Midhun - Miguel - Mitchell - Mizuki - Moaz - Mohan - Molly - Monica - Mouna - Muuse - Nabanita - Naja - NamMinh - Nanami - Nanami_2 - Nancy - Nancy_2 - Naoki - Natasha - Neerja - Neerja_2 - Neil - Nestoras - Nia - Niamh - Niamh_2 - Nicholas - Nicholas_2 - Nicolau - Nicole - Nil - Nilar - Nils - Niranjan - Niwat - Noah - Noemi - Noora - Noura - Nova - Nova_2 - Nuria - Ojas - Ola - Ola_2 - Oliver - Olivia - Ollie - Ollie_2 - Omar - Ona - Onyx - Orla - Osman - Ostap - Pallavi - Palmira - Paloma - Paola - Pedro - Pedro_2 - Pelayo - Penelope - Pernille - Petra - Phoebe - Phoebe_2 - Pierina - Piseth - Polina - Prabhat - Prabhat_2 - Pradeep - Premwadee - Priyom - Rafiki - Ralf - Rami - Ramona - Rana - Raquel - Raveena - Reem - Rehaan - Rehaan_2 - Rehema - Remi - Remi_2 - Remy - Remy_2 - Renata - Ricardo - Rinaldo - Roberto - Rodrigo - Roger - Roi - Rok - Rosa - Ruben - Russell - Ruth - Ruth_2 - Ryan - Ryan_2 - Sabela - Sabrina - Sabrina_2 - Sagar - Saleh - Salli - Salli_2 - Salli_3 - Salma - Salman - Salome - Sam - Sameera - Samuel - Sana - Sapna - Sara - Saranya - Sardor - Saul - Sebastian - Selma - SeoHyeon - Seoyeon - Seoyeon_2 - Seoyeon_3 - Seraphina - Seraphina_2 - Serena - Serena_2 - Sergio - Sergio_2 - Shakir - Shimmer - Shiori - Shruti - Siqiniq - Siqiniq_2 - Siti - Sobhana - Soffie - Sofia - Sofie - Sonia - SoonBok - Sophie - Sophie_2 - Srecko - Sreymom - Steffan - Steffan_2 - Steffan_3 - Stephen - Stephen_2 - Subhasini - Sukant - SunHi - SunHi_2 - Surya - Suvi - Svetlana - Swara - Sylvie - Sylvie_2 - Taim - Takumi - Takumi_2 - Tamas - Tania - Tanishaa - Tanja - Taqqiq - Taqqiq_2 - Tatyana - Teo - Teresa - Thalita - Thalita_2 - Thalita_3 - Thando - Themba - Thiago - Thierry - Thierry_2 - Thiha - Thilini - Thomas - Tiana - Tiffany - Tim - Tina - Tomas - Tomoko - Tony - Triana - Tristan - Tristan_ES - Tristan_ES_2 - Tuti - Tyler - Ubax - Uzma - Vaani - Valentina - Valerio - Valluvar - Venba - Vera - Vesna - Vicki - Vicki_2 - Vicki_3 - Victor - Viktoria - Vitoria - Vitoria_2 - Vivienne - Vivienne_2 - Vlasta - WanLung - Wayne - Willem - William - William_2 - Xiaochen - Xiaochen_2 - Xiaochen_3 - Xiaochen_4 - Xiaohan - Xiaohan_2 - Xiaomeng - XiaoMin - Xiaomo - Xiaoqiu - Xiaorou - Xiaorui - Xiaoshuang - Xiaoshuang_2 - Xiaoshuang_3 - Xiaotong - Xiaoxiao - Xiaoxiao_2 - Xiaoxiao_3 - Xiaoxiao_4 - Xiaoxiao_5 - Xiaoyan - Xiaoyi - Xiaoyi_2 - Xiaoyou - Xiaoyou_2 - Xiaoyou_3 - Xiaoyu - Xiaoyu_2 - Xiaozhen - Ximena - Ximena_ES - Ximena_ES_2 - Ximena_ES_3 - Yago - Yan - Yara - Yashica - Yasmin - Yesui - Yolanda - YuJin - Yundeng - Yunfan - Yunfan_2 - Yunfeng - Yunhan - Yunhao - YunJhe - Yunjian - Yunjie - YunSong - Yunxi - Yunxi_2 - Yunxia - Yunxia_2 - Yunxiang - Yunxiao - Yunxiao_2 - Yunyang - Yunye - Yunye_2 - Yunyi - Yunyi_2 - Yunze - Yunzhe - Yves - Yvette - Zariyah - Zayd - Zeina - Zhiyu - Zhiyu_2 - Zofia - Zuri x-enumDescriptions: Aarav: Male voice for Hindi (India) (Free voice) Aarav_2: Male voice for English (India) (Free voice) Aarohi: Female voice for Marathi (India) (Free voice) Aarti: Female voice for Hindi (India) (Free voice) Aarti_2: Female voice for English (India) (Free voice) Aarti_3: Female voice for English (India) (Free voice) Aashi: Female voice for English (India) (Free voice) Abbi: Female voice for English (United Kingdom) (Free voice) Abdullah: Male voice for Arabic (Oman) (Free voice) Abeo: Male voice for English (Nigeria) (Free voice) Abril: Female voice for Spanish (Spain) (Free voice) Achara: Female voice for Thai (Thailand) (Free voice) Ada: Female voice for English (United Kingdom) (Free voice) Ada_2: Female voice for English (United Kingdom) (Paid voice) Adam: Male voice for English (United States) (Free voice) Adam_2: Male voice for English (United States) (Paid voice) Aditi: Female voice for English (India) (Free voice) Adri: Female voice for Afrikaans (South Africa) (Free voice) Adriano: Male voice for Italian (Italy) (Free voice) Agnieszka: Female voice for Polish (Poland) (Free voice) Ahmet: Male voice for Turkish (Türkiye) (Free voice) Aigul: Female voice for Kazakh (Kazakhstan) (Free voice) Ainhoa: Female voice for Basque (Free voice) Alain: Male voice for French (France) (Free voice) Alba: Female voice for Catalan (Free voice) Aled: Male voice for Welsh (United Kingdom) (Free voice) Aleksandar: Male voice for Macedonian (North Macedonia) (Free voice) Alessio: Male voice for Italian (Italy) (Free voice) Alessio_2: Male voice for Italian (Italy) (Paid voice) Alex: Male voice for Spanish (Peru) (Free voice) Alfie: Male voice for English (United Kingdom) (Free voice) Ali: Male voice for Arabic (Bahrain) (Free voice) Alina: Female voice for Romanian (Romania) (Free voice) Alloy: Male voice for English (United States) (Free voice) Alloy_2: Male voice for English (United States) (Paid voice) Alonso: Male voice for Spanish (United States) (Free voice) Alvaro: Male voice for Spanish (Spain) (Free voice) Amal: Female voice for Arabic (Qatar) (Free voice) Amala: Female voice for German (Germany) (Free voice) Amanda: Female voice for English (United States) (Free voice) Amany: Female voice for Arabic (Syria) (Free voice) Amber: Female voice for English (United States) (Free voice) Ambre: Female voice for French (France) (Paid voice) Ameha: Male voice for Amharic (Ethiopia) (Free voice) Amina: Female voice for Arabic (Algeria) (Free voice) Amy: Female voice for English (United Kingdom) (Free voice) Amy_2: Female voice for English (United Kingdom) (Free voice) Amy_3: Female voice for English (United Kingdom) (Paid voice) Ana: Female voice for English (United States) (Free voice) Anahit: Female voice for Armenian (Armenia) (Free voice) Ananya: Female voice for Hindi (India) (Free voice) Ananya_2: Female voice for English (India) (Free voice) Anbu: Male voice for Tamil (Singapore) (Free voice) Ander: Male voice for Basque (Free voice) Andre: Male voice for Spanish (Mexico) (Free voice) Andre_2: Male voice for Spanish (Mexico) (Paid voice) Andrea: Female voice for Spanish (Ecuador) (Free voice) Andres: Male voice for Spanish (Guatemala) (Free voice) Andrew: Male voice for English (United States) (Free voice) Andrew_2: Male voice for English (United States) (Free voice) Andrew_3: Male voice for English (United States) (Paid voice) Andrew_4: Male voice for English (United States) (Paid voice) Angelo: Male voice for Filipino (Philippines) (Free voice) Anila: Female voice for Albanian (Albania) (Free voice) Annette: Female voice for English (Australia) (Free voice) Antoine: Male voice for French (Canada) (Free voice) Antonin: Male voice for Czech (Czechia) (Free voice) Antonio: Male voice for Portuguese (Brazil) (Free voice) Anu: Female voice for Estonian (Estonia) (Free voice) Aoi: Female voice for Japanese (Japan) (Free voice) Arabella: Female voice for Spanish (Spain) (Free voice) Ardi: Male voice for Indonesian (Indonesia) (Free voice) Aria: Female voice for English (United States) (Free voice) Aria_2: Female voice for English (United States) (Paid voice) Ariane: Female voice for French (Switzerland) (Free voice) Arjun: Male voice for English (India) (Free voice) Arjun_2: Male voice for English (India) (Free voice) Arjun_3: Male voice for Hindi (India) (Free voice) Arlet: Female voice for Catalan (Free voice) Arnau: Male voice for Spanish (Spain) (Free voice) Arnaud: Male voice for Dutch (Belgium) (Free voice) Arthur: Male voice for English (United Kingdom) (Free voice) Arya: Female voice for English (New Zealand) (Free voice) Arya_2: Female voice for English (New Zealand) (Paid voice) Asad: Male voice for Urdu (Pakistan) (Free voice) Ashley: Female voice for English (United States) (Free voice) Asilia: Female voice for English (Kenya) (Free voice) Astrid: Female voice for Swedish (Sweden) (Free voice) Athina: Female voice for Greek (Greece) (Free voice) Ava: Female voice for English (United States) (Free voice) Ava_2: Female voice for English (United States) (Free voice) Ava_3: Female voice for English (United States) (Paid voice) Avri: Male voice for Hebrew (Israel) (Free voice) Ayanda: Female voice for English (South Africa) (Free voice) Ayanda_2: Female voice for English (South Africa) (Paid voice) Aysha: Female voice for Arabic (Oman) (Free voice) Babek: Male voice for Azerbaijani (Latin, Azerbaijan) (Free voice) Banu: Female voice for Azerbaijani (Latin, Azerbaijan) (Free voice) Bashkar: Male voice for Bengali (India) (Free voice) Bassel: Male voice for Arabic (Iraq) (Free voice) Bataa: Male voice for Mongolian (Mongolia) (Free voice) Beatrice: Female voice for Italian (Italy) (Paid voice) Beatriz: Female voice for Spanish (Mexico) (Free voice) Belkys: Female voice for Spanish (Cuba) (Free voice) Bella: Female voice for English (United Kingdom) (Free voice) Benigno: Male voice for Italian (Italy) (Free voice) Bernd: Male voice for German (Germany) (Free voice) Bianca: Female voice for Italian (Italy) (Free voice) Bianca_2: Female voice for Italian (Italy) (Free voice) Bianca_3: Female voice for Italian (Italy) (Paid voice) Blessica: Female voice for Filipino (Philippines) (Free voice) BongJin: Male voice for Korean (Korea) (Free voice) Borislav: Male voice for Bulgarian (Bulgaria) (Free voice) Brandon: Male voice for English (United States) (Free voice) Brandon_2: Male voice for English (United States) (Free voice) Bree: Female voice for English (United States) (Paid voice) Brenda: Female voice for Portuguese (Brazil) (Free voice) Brian: Male voice for English (United States) (Free voice) Brian_2: Male voice for English (United States) (Free voice) Brian_3: Male voice for English (United States) (Paid voice) Brigitte: Female voice for French (France) (Free voice) Bryan: Male voice for English (United Kingdom) (Free voice) Bryan_2: Male voice for English (United Kingdom) (Free voice) Bryan_3: Male voice for English (United Kingdom) (Paid voice) Burcu: Female voice for Turkish (Türkiye) (Free voice) Calimero: Male voice for Italian (Italy) (Free voice) Camila: Female voice for Spanish (Peru) (Free voice) Camilla: Female voice for Portuguese (Brazil) (Free voice) Camilla_2: Female voice for Portuguese (Brazil) (Free voice) Camilla_3: Female voice for Portuguese (Brazil) (Paid voice) Candela: Female voice for Spanish (Mexico) (Free voice) Carla: Female voice for Italian (Italy) (Free voice) Carlos: Male voice for Spanish (Honduras) (Free voice) Carlota: Female voice for Spanish (Mexico) (Free voice) Carly: Female voice for English (Australia) (Free voice) Carmen: Female voice for Romanian (Romania) (Free voice) Cataldo: Male voice for Italian (Italy) (Free voice) Catalina: Female voice for Spanish (Chile) (Free voice) Cecilio: Male voice for Spanish (Mexico) (Free voice) Celeste: Female voice for French (France) (Free voice) Celine: Female voice for French (France) (Free voice) Celine_2: Female voice for French (France) (Paid voice) Chantal: Female voice for French (Canada) (Free voice) Chanthavong: Male voice for Lao (Laos) (Free voice) Charline: Female voice for French (Belgium) (Free voice) Chilemba: Male voice for English (Kenya) (Free voice) Christel: Female voice for Danish (Denmark) (Free voice) Christoph: Male voice for German (Germany) (Free voice) Christopher: Male voice for English (United States) (Free voice) Christopher_2: Male voice for English (United States) (Free voice) Clara: Female voice for English (Canada) (Free voice) Claude: Male voice for French (France) (Free voice) Colette: Female voice for Dutch (Netherlands) (Free voice) Colm: Male voice for Irish (Ireland) (Free voice) Conchita: Female voice for Spanish (Castilian) (Free voice) Connor: Male voice for English (Ireland) (Free voice) Conrad: Male voice for German (Germany) (Free voice) Cora: Female voice for English (United States) (Free voice) Cora_2: Female voice for English (United States) (Free voice) Coralie: Female voice for French (France) (Free voice) Cristiano: Male voice for Portuguese (Brazil) (Free voice) Daichi: Male voice for Japanese (Japan) (Free voice) Dalia: Female voice for Spanish (Mexico) (Free voice) Dalia_2: Female voice for Spanish (Mexico) (Free voice) Daniel: Male voice for German (Germany) (Free voice) Daniel_2: Male voice for German (Germany) (Paid voice) Danielle: Female voice for English (United States) (Free voice) Danielle_2: Female voice for English (United States) (Paid voice) Dario: Male voice for Spanish (Spain) (Free voice) Dariya: Female voice for Russian (Russia) (Free voice) Darren: Male voice for English (Australia) (Free voice) Daudi: Male voice for Swahili (Tanzania) (Free voice) Daulet: Male voice for Kazakh (Kazakhstan) (Free voice) Davis: Male voice for English (United States) (Free voice) Davis_2: Male voice for English (United States) (Free voice) Davis_3: Male voice for English (United States) (Paid voice) Dena: Female voice for Dutch (Belgium) (Free voice) Denise: Female voice for French (France) (Free voice) Derek: Male voice for English (United States) (Free voice) Dhwani: Female voice for Gujarati (India) (Free voice) Diego: Male voice for Italian (Italy) (Free voice) Dilara: Female voice for Persian (Iran) (Free voice) Dimas: Male voice for Javanese (Latin, Indonesia) (Free voice) Dmitry: Male voice for Russian (Russia) (Free voice) Donato: Male voice for Portuguese (Brazil) (Free voice) Dora: Female voice for Icelandic (Iceland) (Free voice) Duarte: Male voice for Portuguese (Portugal) (Free voice) Duncan: Male voice for English (Australia) (Free voice) Dustin: Male voice for English (United States) (Free voice) Echo: Male voice for English (United States) (Free voice) Eka: Female voice for Georgian (Georgia) (Free voice) Elena: Female voice for Spanish (Argentina) (Free voice) Elias: Male voice for Spanish (Spain) (Free voice) Elimu: Male voice for English (Tanzania) (Free voice) Elin: Female voice for Swedish (Sweden) (Free voice) Elizabeth: Female voice for English (United States) (Free voice) Elke: Female voice for German (Germany) (Free voice) Elliot: Male voice for English (United Kingdom) (Free voice) Eloise: Female voice for French (France) (Free voice) Elsa: Female voice for Italian (Italy) (Free voice) Elsie: Female voice for English (Australia) (Free voice) Elvira: Female voice for Spanish (Spain) (Free voice) Elza: Female voice for Portuguese (Brazil) (Free voice) Emel: Female voice for Turkish (Türkiye) (Free voice) Emil: Male voice for Romanian (Romania) (Free voice) Emilio: Male voice for Spanish (Dominican Republic) (Free voice) Emily: Female voice for English (Ireland) (Free voice) Emma: Female voice for English (United States) (Free voice) Emma_2: Female voice for English (United States) (Free voice) Emma_3: Female voice for English (United States) (Paid voice) Emma_4: Female voice for English (United States) (Paid voice) Enric: Male voice for Catalan (Free voice) Enrique: Male voice for Spanish (Castilian) (Free voice) Eric: Male voice for English (United States) (Free voice) Estrella: Female voice for Spanish (Spain) (Free voice) Ethan: Male voice for English (United Kingdom) (Free voice) Evelyn: Female voice for English (United States) (Free voice) Everita: Female voice for Latvian (Latvia) (Free voice) Ewa: Female voice for Polish (Poland) (Free voice) Ewa_2: Female voice for Polish (Poland) (Paid voice) Ezinne: Female voice for English (Nigeria) (Free voice) Fabio: Male voice for Portuguese (Brazil) (Free voice) Fabiola: Female voice for Italian (Italy) (Free voice) Fable: Neutral voice for English (United States) (Free voice) Fabrice: Male voice for French (Switzerland) (Free voice) Fahed: Male voice for Arabic (Kuwait) (Free voice) Farid: Male voice for Persian (Iran) (Free voice) Fatima: Female voice for Arabic (United Arab Emirates) (Free voice) Federico: Male voice for Spanish (Nicaragua) (Free voice) Fenna: Female voice for Dutch (Netherlands) (Free voice) Fernanda: Female voice for Portuguese (Portugal) (Free voice) Fiamma: Female voice for Italian (Italy) (Free voice) Filiz: Female voice for Turkish (Türkiye) (Free voice) Finn: Male voice for Norwegian (Norway) (Free voice) Florian: Male voice for German (Germany) (Free voice) Florian_2: Male voice for German (Germany) (Paid voice) Florin: Male voice for French (France) (Paid voice) Francisca: Female voice for Portuguese (Brazil) (Free voice) Freya: Female voice for English (Australia) (Free voice) Gabrielle: Female voice for French (Canada) (Free voice) Gabrielle_2: Female voice for French (Canada) (Paid voice) Gabrijela: Female voice for Croatian (Croatia) (Free voice) Gadis: Female voice for Indonesian (Indonesia) (Free voice) Gagan: Male voice for Kannada (India) (Free voice) Gemma: Female voice for English (United Kingdom) (Free voice) Gemma_2: Female voice for English (United Kingdom) (Free voice) Geraint: Male voice for Welsh (United Kingdom) (Free voice) Gerard: Male voice for French (Belgium) (Free voice) Gerardo: Male voice for Spanish (Mexico) (Free voice) Gianni: Male voice for Italian (Italy) (Free voice) Giorgi: Male voice for Georgian (Georgia) (Free voice) Giorgio: Male voice for Italian (Italy) (Free voice) Giovanna: Female voice for Portuguese (Brazil) (Free voice) Gisela: Female voice for German (Germany) (Free voice) Giuseppe: Male voice for Italian (Italy) (Free voice) Giuseppe_2: Male voice for Italian (Italy) (Free voice) Gonzalo: Male voice for Spanish (Colombia) (Free voice) GookMin: Male voice for Korean (Korea) (Free voice) Goran: Male voice for Bosnian (Bosnia and Herzegovina) (Free voice) Grace: Female voice for Maltese (Malta) (Free voice) Gregory: Male voice for English (United States) (Free voice) Gudrun: Female voice for Icelandic (Iceland) (Free voice) Gul: Female voice for Urdu (India) (Free voice) GulNawaz: Male voice for Pashto (Afghanistan) (Free voice) Gunnar: Male voice for Icelandic (Iceland) (Free voice) Guy: Male voice for English (United States) (Free voice) Gwyneth: Female voice for Welsh (United Kingdom) (Free voice) Hala: Female voice for Arabic (Saudi Arabia) (Free voice) Hamdan: Male voice for Arabic (United Arab Emirates) (Free voice) Hamed: Male voice for Arabic (Saudi Arabia) (Free voice) Hannah: Female voice for German (Austria) (Free voice) Hannah_2: Female voice for German (Austria) (Paid voice) Hans: Male voice for German (Germany) (Free voice) Harri: Male voice for Finnish (Finland) (Free voice) Hayk: Male voice for Armenian (Armenia) (Free voice) Hedi: Male voice for Arabic (Tunisia) (Free voice) Hemkala: Female voice for Nepali (Nepal) (Free voice) Henri: Male voice for French (France) (Free voice) Hila: Female voice for Hebrew (Israel) (Free voice) Hillevi: Female voice for Swedish (Sweden) (Free voice) HiuGaai: Female voice for Chinese (Cantonese, Traditional) (Free voice) Hiujin: Female voice for Chinese (Cantonese) (Free voice) HiuMaan: Female voice for Chinese (Cantonese, Traditional) (Free voice) HoaiMy: Female voice for Vietnamese (Vietnam) (Free voice) Hollie: Female voice for English (United Kingdom) (Free voice) HsiaoChen: Female voice for Chinese (Taiwanese Mandarin, Traditional) (Free voice) HsiaoYu: Female voice for Chinese (Taiwanese Mandarin, Traditional) (Free voice) Humberto: Male voice for Portuguese (Brazil) (Free voice) Hyunsu: Male voice for Korean (Korea) (Free voice) Hyunsu_2: Male voice for Korean (Korea) (Free voice) Hyunsu_3: Male voice for Korean (Korea) (Paid voice) Ida: Female voice for Norwegian (Norway) (Free voice) Ilir: Male voice for Albanian (Albania) (Free voice) Iman: Female voice for Arabic (Libya) (Free voice) Imani: Female voice for English (Tanzania) (Free voice) Imelda: Female voice for Italian (Italy) (Free voice) Ines: Female voice for Portuguese (Brazil) (Free voice) Ines_2: Female voice for Portuguese (Brazil) (Free voice) Ingrid: Female voice for German (Austria) (Free voice) InJoon: Male voice for Korean (Korea) (Free voice) Irene: Female voice for Spanish (Spain) (Free voice) Irma: Female voice for Italian (Italy) (Free voice) Isabella: Female voice for Italian (Italy) (Free voice) Isabella_2: Female voice for Italian (Italy) (Free voice) Isabella_3: Female voice for Italian (Italy) (Paid voice) Isabelle: Female voice for French (Belgium) (Free voice) Isabelle_2: Female voice for French (Belgium) (Paid voice) Iselin: Female voice for Norwegian (Norway) (Free voice) Isidora: Female voice for Spanish (Spain) (Free voice) Ismael: Male voice for Arabic (Algeria) (Free voice) Ivy: Female voice for English (United States) (Free voice) Ivy_2: Female voice for English (United States) (Free voice) Jacek: Male voice for Polish (Poland) (Free voice) Jacob: Male voice for English (United States) (Free voice) Jacqueline: Female voice for French (France) (Free voice) Jajang: Male voice for Sundanese (Indonesia) (Free voice) Jamal: Male voice for Arabic (Morocco) (Free voice) James: Male voice for English (Philippines) (Free voice) Jan: Male voice for German (Switzerland) (Free voice) Jane: Female voice for English (United States) (Free voice) Jane_2: Female voice for English (United States) (Paid voice) Jann: Male voice for Polish (Poland) (Free voice) Jasmine: Female voice for English (Singapore) (Free voice) Jasmine_2: Female voice for English (Singapore) (Paid voice) Jason: Male voice for English (United States) (Free voice) Javier: Male voice for Spanish (Equatorial Guinea) (Free voice) Jean: Male voice for French (Canada) (Free voice) Jenny: Female voice for English (United States) (Free voice) Jenny_2: Female voice for English (United States) (Free voice) Jenny_3: Female voice for English (United States) (Paid voice) Jeppe: Male voice for Danish (Denmark) (Free voice) Jerome: Male voice for French (France) (Free voice) Jihye: Female voice for Korean (Korea) (Free voice) JiMin: Female voice for Korean (Korea) (Free voice) Jimmie: Male voice for English (United States) (Free voice) Jitka: Female voice for Czech (Czechia) (Free voice) Joana: Female voice for Catalan (Free voice) Joanna: Female voice for English (United States) (Free voice) Joanna_2: Female voice for English (United States) (Free voice) Joanna_3: Female voice for English (United States) (Paid voice) Joanne: Female voice for English (Australia) (Free voice) Joey: Male voice for English (United States) (Free voice) Joey_2: Male voice for English (United States) (Free voice) Jonas: Male voice for German (Austria) (Free voice) Jorge: Male voice for Spanish (Mexico) (Free voice) Jorge_2: Male voice for Spanish (Mexico) (Free voice) Joseph: Male voice for Maltese (Malta) (Free voice) Josephine: Female voice for French (France) (Free voice) Juan: Male voice for Spanish (Costa Rica) (Free voice) Julio: Male voice for Portuguese (Brazil) (Free voice) Justin: Male voice for English (United States) (Free voice) Justin_2: Male voice for English (United States) (Free voice) Kai: Male voice for English (United States) (Free voice) Kajal: Female voice for English (India) (Free voice) Kajal_2: Female voice for English (India) (Paid voice) Kalina: Female voice for Bulgarian (Bulgaria) (Free voice) Kani: Female voice for Tamil (Malaysia) (Free voice) Karina: Female voice for Spanish (Puerto Rico) (Free voice) Karl: Male voice for Icelandic (Iceland) (Free voice) Karla: Female voice for Spanish (Honduras) (Free voice) Kasper: Male voice for German (Germany) (Free voice) Katja: Female voice for German (Germany) (Free voice) Kavya: Female voice for Hindi (India) (Free voice) Kavya_2: Female voice for English (India) (Free voice) Kazuha: Female voice for Japanese (Japan) (Free voice) Keita: Male voice for Japanese (Japan) (Free voice) Ken: Male voice for English (Australia) (Free voice) Kendra: Female voice for English (United States) (Free voice) Kendra_2: Female voice for English (United States) (Free voice) Keomany: Female voice for Lao (Laos) (Free voice) Kert: Male voice for Estonian (Estonia) (Free voice) Kevin: Male voice for English (United States) (Free voice) Killian: Male voice for German (Germany) (Free voice) Kim: Female voice for English (Australia) (Free voice) Kimberly: Female voice for English (United States) (Free voice) Kimberly_2: Female voice for English (United States) (Free voice) Klarissa: Female voice for German (Germany) (Free voice) Klaus: Male voice for German (Germany) (Free voice) Kumar: Male voice for Tamil (Sri Lanka) (Free voice) Kunal: Male voice for Hindi (India) (Free voice) Kunal_2: Male voice for English (India) (Free voice) Laia: Female voice for Spanish (Spain) (Free voice) Laila: Female voice for Arabic (Bahrain) (Free voice) Laith: Male voice for Arabic (Syria) (Free voice) Larissa: Female voice for Spanish (Mexico) (Free voice) Latifa: Female voice for Pashto (Afghanistan) (Free voice) Laura: Female voice for Dutch (Netherlands) (Free voice) Laura_2: Female voice for Dutch (Netherlands) (Paid voice) Layla: Female voice for Arabic (Lebanon) (Free voice) Lea: Female voice for French (France) (Free voice) Lea_2: Female voice for French (France) (Free voice) Lea_3: Female voice for French (France) (Paid voice) Leah: Female voice for English (South Africa) (Free voice) Leila: Female voice for Portuguese (Brazil) (Free voice) Leni: Female voice for German (Switzerland) (Free voice) Lennart: Male voice for German (Germany) (Paid voice) Leonas: Male voice for Lithuanian (Lithuania) (Free voice) Leticia: Female voice for Portuguese (Brazil) (Free voice) Lewis: Male voice for English (United States) (Free voice) Lia: Female voice for Spanish (Spain) (Free voice) Liam: Male voice for English (Canada) (Free voice) Lian: Male voice for French (Canada) (Free voice) Lian_2: Male voice for French (Canada) (Paid voice) Libby: Female voice for English (United Kingdom) (Free voice) Liberto: Male voice for Spanish (Mexico) (Free voice) Lisa: Female voice for Dutch (Belgium) (Free voice) Lisa_2: Female voice for Dutch (Belgium) (Paid voice) Lisandro: Male voice for Italian (Italy) (Free voice) Liv: Female voice for Norwegian (Norway) (Free voice) Livia: Female voice for English (Australia) (Free voice) Livia_2: Female voice for English (Australia) (Paid voice) Lola: Female voice for English (United States) (Free voice) Lorena: Female voice for Spanish (El Salvador) (Free voice) Lorenzio: Male voice for Italian (Italy) (Paid voice) Lorenzo: Male voice for Spanish (Chile) (Free voice) Lotte: Female voice for Dutch (Netherlands) (Free voice) Louisa: Female voice for German (Germany) (Free voice) Lucia: Female voice for Spanish (Castilian) (Free voice) Lucia_2: Female voice for Spanish (Castilian) (Free voice) Lucia_3: Female voice for Spanish (Castilian) (Paid voice) Luciano: Male voice for Spanish (Mexico) (Free voice) Lucien: Male voice for French (France) (Free voice) Luis: Male voice for Spanish (Ecuador) (Free voice) Lukas: Male voice for Slovak (Slovakia) (Free voice) Luke: Male voice for English (South Africa) (Free voice) Luna: Female voice for English (Singapore) (Free voice) Luna_2: Female voice for English (United States) (Free voice) Lupe: Female voice for Spanish (United States) (Free voice) Lupe_2: Female voice for Spanish (United States) (Free voice) Lupe_3: Female voice for Spanish (United States) (Paid voice) Maarten: Male voice for Dutch (Netherlands) (Free voice) Macerio: Male voice for Portuguese (Brazil) (Free voice) Macerio_2: Male voice for Portuguese (Brazil) (Paid voice) Madhur: Male voice for Hindi (India) (Free voice) Madina: Female voice for Uzbek (Latin, Uzbekistan) (Free voice) Mads: Male voice for Danish (Denmark) (Free voice) Maisie: Female voice for English (United Kingdom) (Free voice) Maja: Female voice for German (Germany) (Free voice) Manohar: Male voice for Marathi (India) (Free voice) Manuel: Male voice for Spanish (Cuba) (Free voice) Manuela: Female voice for Portuguese (Brazil) (Free voice) Marcello: Male voice for Italian (Italy) (Free voice) Marcelo: Male voice for Spanish (Bolivia) (Free voice) Marek: Male voice for Polish (Poland) (Free voice) Margarita: Female voice for Spanish (Panama) (Free voice) Maria: Female voice for Spanish (Costa Rica) (Free voice) Marija: Female voice for Macedonian (North Macedonia) (Free voice) Marina: Female voice for Spanish (Mexico) (Free voice) Mario: Male voice for Spanish (Paraguay) (Free voice) Marlene: Female voice for German (Germany) (Free voice) Marta: Female voice for Spanish (Guatemala) (Free voice) Maryam: Female voice for Arabic (Yemen) (Free voice) Masaru: Male voice for Japanese (Japan) (Paid voice) Mateo: Male voice for Spanish (Uruguay) (Free voice) Mathieu: Male voice for French (France) (Free voice) Matthew: Male voice for English (United States) (Free voice) Matthew_2: Male voice for English (United States) (Free voice) Matthew_3: Male voice for English (United States) (Paid voice) Mattias: Male voice for Swedish (Sweden) (Free voice) Maurice: Male voice for French (France) (Free voice) Maxim: Male voice for Russian (Russia) (Free voice) Maya: Female voice for Polish (Poland) (Free voice) Mayu: Female voice for Japanese (Japan) (Free voice) Mekdes: Female voice for Amharic (Ethiopia) (Free voice) Mia: Female voice for Spanish (Mexico) (Free voice) Mia_2: Female voice for Spanish (Mexico) (Free voice) Mia_3: Female voice for Spanish (Mexico) (Paid voice) Michelle: Female voice for English (United States) (Free voice) Midhun: Male voice for Malayalam (India) (Free voice) Miguel: Male voice for Spanish (United States) (Free voice) Mitchell: Male voice for English (New Zealand) (Free voice) Mizuki: Female voice for Japanese (Japan) (Free voice) Moaz: Male voice for Arabic (Qatar) (Free voice) Mohan: Male voice for Telugu (India) (Free voice) Molly: Female voice for English (New Zealand) (Free voice) Monica: Female voice for English (United States) (Free voice) Mouna: Female voice for Arabic (Morocco) (Free voice) Muuse: Male voice for Somali (Somalia) (Free voice) Nabanita: Female voice for Bangla (Bangladesh) (Free voice) Naja: Female voice for Danish (Denmark) (Free voice) NamMinh: Male voice for Vietnamese (Vietnam) (Free voice) Nanami: Female voice for Japanese (Japan) (Free voice) Nanami_2: Female voice for Japanese (Japan) (Paid voice) Nancy: Female voice for English (United States) (Free voice) Nancy_2: Female voice for English (United States) (Free voice) Naoki: Male voice for Japanese (Japan) (Free voice) Natasha: Female voice for English (Australia) (Free voice) Neerja: Female voice for English (India) (Free voice) Neerja_2: Female voice for English (India) (Free voice) Neil: Male voice for English (Australia) (Free voice) Nestoras: Male voice for Greek (Greece) (Free voice) Nia: Female voice for Welsh (United Kingdom) (Free voice) Niamh: Female voice for English (Ireland) (Free voice) Niamh_2: Female voice for English (Ireland) (Paid voice) Nicholas: Male voice for Serbian (Cyrillic, Serbia) (Free voice) Nicholas_2: Male voice for Serbian (Latin, Serbia) (Free voice) Nicolau: Male voice for Portuguese (Brazil) (Free voice) Nicole: Female voice for English (Australia) (Free voice) Nil: Male voice for Spanish (Spain) (Free voice) Nilar: Female voice for Burmese (Myanmar) (Free voice) Nils: Male voice for Latvian (Latvia) (Free voice) Niranjan: Male voice for Gujarati (India) (Free voice) Niwat: Male voice for Thai (Thailand) (Free voice) Noah: Male voice for English (United Kingdom) (Free voice) Noemi: Female voice for Hungarian (Hungary) (Free voice) Noora: Female voice for Finnish (Finland) (Free voice) Noura: Female voice for Arabic (Kuwait) (Free voice) Nova: Female voice for English (United States) (Free voice) Nova_2: Female voice for English (United States) (Paid voice) Nuria: Female voice for Spanish (Mexico) (Free voice) Ojas: Male voice for Punjabi (India) (Free voice) Ola: Female voice for Polish (Poland) (Free voice) Ola_2: Female voice for Polish (Poland) (Paid voice) Oliver: Male voice for English (United Kingdom) (Free voice) Olivia: Female voice for English (United Kingdom) (Free voice) Ollie: Male voice for English (United Kingdom) (Free voice) Ollie_2: Male voice for English (United Kingdom) (Paid voice) Omar: Male voice for Arabic (Libya) (Free voice) Ona: Female voice for Lithuanian (Lithuania) (Free voice) Onyx: Male voice for English (United States) (Free voice) Orla: Female voice for Irish (Ireland) (Free voice) Osman: Male voice for Malay (Malaysia) (Free voice) Ostap: Male voice for Ukrainian (Ukraine) (Free voice) Pallavi: Female voice for Tamil (India) (Free voice) Palmira: Female voice for Italian (Italy) (Free voice) Paloma: Female voice for Spanish (United States) (Free voice) Paola: Female voice for Spanish (Venezuela) (Free voice) Pedro: Male voice for Spanish (United States) (Free voice) Pedro_2: Male voice for Spanish (United States) (Paid voice) Pelayo: Male voice for Spanish (Mexico) (Free voice) Penelope: Female voice for Spanish (United States) (Free voice) Pernille: Female voice for Norwegian (Norway) (Free voice) Petra: Female voice for Slovenian (Slovenia) (Free voice) Phoebe: Female voice for English (United States) (Free voice) Phoebe_2: Female voice for English (United States) (Paid voice) Pierina: Female voice for Italian (Italy) (Free voice) Piseth: Male voice for Khmer (Cambodia) (Free voice) Polina: Female voice for Ukrainian (Ukraine) (Free voice) Prabhat: Male voice for English (India) (Free voice) Prabhat_2: Male voice for English (India) (Free voice) Pradeep: Male voice for Bangla (Bangladesh) (Free voice) Premwadee: Female voice for Thai (Thailand) (Free voice) Priyom: Male voice for Assamese (India) (Free voice) Rafiki: Male voice for Swahili (Kenya) (Free voice) Ralf: Male voice for German (Germany) (Free voice) Rami: Male voice for Arabic (Lebanon) (Free voice) Ramona: Female voice for Spanish (Dominican Republic) (Free voice) Rana: Female voice for Arabic (Iraq) (Free voice) Raquel: Female voice for Portuguese (Portugal) (Free voice) Raveena: Female voice for English (India) (Free voice) Reem: Female voice for Arabic (Tunisia) (Free voice) Rehaan: Male voice for Hindi (India) (Free voice) Rehaan_2: Male voice for English (India) (Free voice) Rehema: Female voice for Swahili (Tanzania) (Free voice) Remi: Male voice for French (France) (Free voice) Remi_2: Male voice for French (France) (Paid voice) Remy: Male voice for French (France) (Free voice) Remy_2: Male voice for French (France) (Paid voice) Renata: Female voice for Spanish (Mexico) (Free voice) Ricardo: Male voice for Portuguese (Brazil) (Free voice) Rinaldo: Male voice for Italian (Italy) (Free voice) Roberto: Male voice for Spanish (Panama) (Free voice) Rodrigo: Male voice for Spanish (El Salvador) (Free voice) Roger: Male voice for English (United States) (Free voice) Roi: Male voice for Galician (Free voice) Rok: Male voice for Slovenian (Slovenia) (Free voice) Rosa: Female voice for English (Philippines) (Free voice) Ruben: Male voice for Dutch (Netherlands) (Free voice) Russell: Male voice for English (Australia) (Free voice) Ruth: Female voice for English (United States) (Free voice) Ruth_2: Female voice for English (United States) (Paid voice) Ryan: Male voice for English (United States) (Free voice) Ryan_2: Male voice for English (United Kingdom) (Free voice) Sabela: Female voice for Galician (Free voice) Sabrina: Female voice for German (Switzerland) (Free voice) Sabrina_2: Female voice for German (Switzerland) (Paid voice) Sagar: Male voice for Nepali (Nepal) (Free voice) Saleh: Male voice for Arabic (Yemen) (Free voice) Salli: Female voice for English (United States) (Free voice) Salli_2: Female voice for English (United States) (Free voice) Salli_3: Female voice for English (United States) (Paid voice) Salma: Female voice for Arabic (Egypt) (Free voice) Salman: Male voice for Urdu (India) (Free voice) Salome: Female voice for Spanish (Colombia) (Free voice) Sam: Male voice for English (Hong Kong SAR) (Free voice) Sameera: Male voice for Sinhala (Sri Lanka) (Free voice) Samuel: Male voice for English (United States) (Free voice) Sana: Female voice for Arabic (Jordan) (Free voice) Sapna: Female voice for Kannada (India) (Free voice) Sara: Female voice for English (United States) (Free voice) Saranya: Female voice for Tamil (Sri Lanka) (Free voice) Sardor: Male voice for Uzbek (Latin, Uzbekistan) (Free voice) Saul: Male voice for Spanish (Spain) (Free voice) Sebastian: Male voice for Spanish (Venezuela) (Free voice) Selma: Female voice for Finnish (Finland) (Free voice) SeoHyeon: Female voice for Korean (Korea) (Free voice) Seoyeon: Female voice for Korean (Korea) (Free voice) Seoyeon_2: Female voice for Korean (Korea) (Free voice) Seoyeon_3: Female voice for Korean (Korea) (Paid voice) Seraphina: Female voice for German (Germany) (Free voice) Seraphina_2: Female voice for German (Germany) (Paid voice) Serena: Female voice for English (United States) (Free voice) Serena_2: Female voice for English (United States) (Paid voice) Sergio: Male voice for Spanish (Castilian) (Free voice) Sergio_2: Male voice for Spanish (Castilian) (Paid voice) Shakir: Male voice for Arabic (Egypt) (Free voice) Shimmer: Female voice for English (United States) (Free voice) Shiori: Female voice for Japanese (Japan) (Free voice) Shruti: Female voice for Telugu (India) (Free voice) Siqiniq: Female voice for Inuktitut (Syllabics, Canada) (Free voice) Siqiniq_2: Female voice for Inuktitut (Latin, Canada) (Free voice) Siti: Female voice for Javanese (Latin, Indonesia) (Free voice) Sobhana: Female voice for Malayalam (India) (Free voice) Soffie: Female voice for Danish (Denmark) (Free voice) Sofia: Female voice for Spanish (Bolivia) (Free voice) Sofie: Female voice for Swedish (Sweden) (Free voice) Sonia: Female voice for English (United Kingdom) (Free voice) SoonBok: Female voice for Korean (Korea) (Free voice) Sophie: Female voice for Serbian (Cyrillic, Serbia) (Free voice) Sophie_2: Female voice for Serbian (Latin, Serbia) (Free voice) Srecko: Male voice for Croatian (Croatia) (Free voice) Sreymom: Female voice for Khmer (Cambodia) (Free voice) Steffan: Male voice for English (United States) (Free voice) Steffan_2: Male voice for English (United States) (Free voice) Steffan_3: Male voice for English (United States) (Paid voice) Stephen: Male voice for English (United States) (Free voice) Stephen_2: Male voice for English (United States) (Paid voice) Subhasini: Female voice for Odia (India) (Free voice) Sukant: Male voice for Odia (India) (Free voice) SunHi: Female voice for Korean (Korea) (Free voice) SunHi_2: Female voice for Korean (Korea) (Paid voice) Surya: Male voice for Tamil (Malaysia) (Free voice) Suvi: Female voice for Finnish (Finland) (Free voice) Svetlana: Female voice for Russian (Russia) (Free voice) Swara: Female voice for Hindi (India) (Free voice) Sylvie: Female voice for French (Canada) (Free voice) Sylvie_2: Female voice for French (Canada) (Paid voice) Taim: Male voice for Arabic (Jordan) (Free voice) Takumi: Male voice for Japanese (Japan) (Free voice) Takumi_2: Male voice for Japanese (Japan) (Free voice) Tamas: Male voice for Hungarian (Hungary) (Free voice) Tania: Female voice for Spanish (Paraguay) (Free voice) Tanishaa: Female voice for Bengali (India) (Free voice) Tanja: Female voice for German (Germany) (Free voice) Taqqiq: Male voice for Inuktitut (Syllabics, Canada) (Free voice) Taqqiq_2: Male voice for Inuktitut (Latin, Canada) (Free voice) Tatyana: Female voice for Russian (Russia) (Free voice) Teo: Male voice for Spanish (Spain) (Free voice) Teresa: Female voice for Spanish (Equatorial Guinea) (Free voice) Thalita: Female voice for Portuguese (Brazil) (Free voice) Thalita_2: Female voice for Portuguese (Brazil) (Free voice) Thalita_3: Female voice for Portuguese (Brazil) (Paid voice) Thando: Female voice for Zulu (South Africa) (Free voice) Themba: Male voice for Zulu (South Africa) (Free voice) Thiago: Male voice for Portuguese (Brazil) (Free voice) Thierry: Male voice for French (Canada) (Free voice) Thierry_2: Male voice for French (Canada) (Paid voice) Thiha: Male voice for Burmese (Myanmar) (Free voice) Thilini: Female voice for Sinhala (Sri Lanka) (Free voice) Thomas: Male voice for English (United Kingdom) (Free voice) Tiana: Female voice for English (United States) (Free voice) Tiffany: Female voice for English (United States) (Paid voice) Tim: Male voice for English (Australia) (Free voice) Tina: Female voice for English (Australia) (Free voice) Tomas: Male voice for Spanish (Argentina) (Free voice) Tomoko: Female voice for Japanese (Japan) (Free voice) Tony: Male voice for English (United States) (Free voice) Triana: Female voice for Spanish (Spain) (Free voice) Tristan: Male voice for Spanish (Mexico) (Paid voice) Tristan_ES: Male voice for Spanish (Spain) (Free voice) Tristan_ES_2: Male voice for Spanish (Spain) (Paid voice) Tuti: Female voice for Sundanese (Indonesia) (Free voice) Tyler: Male voice for English (United States) (Free voice) Ubax: Female voice for Somali (Somalia) (Free voice) Uzma: Female voice for Urdu (Pakistan) (Free voice) Vaani: Female voice for Punjabi (India) (Free voice) Valentina: Female voice for Spanish (Uruguay) (Free voice) Valerio: Male voice for Portuguese (Brazil) (Free voice) Valluvar: Male voice for Tamil (India) (Free voice) Venba: Female voice for Tamil (Singapore) (Free voice) Vera: Female voice for Spanish (Spain) (Free voice) Vesna: Female voice for Bosnian (Bosnia and Herzegovina) (Free voice) Vicki: Female voice for German (Germany) (Free voice) Vicki_2: Female voice for German (Germany) (Free voice) Vicki_3: Female voice for German (Germany) (Paid voice) Victor: Male voice for Spanish (Puerto Rico) (Free voice) Viktoria: Female voice for Slovak (Slovakia) (Free voice) Vitoria: Female voice for Portuguese (Brazil) (Free voice) Vitoria_2: Female voice for Portuguese (Brazil) (Free voice) Vivienne: Female voice for French (France) (Free voice) Vivienne_2: Female voice for French (France) (Paid voice) Vlasta: Female voice for Czech (Czechia) (Free voice) WanLung: Male voice for Chinese (Cantonese, Traditional) (Free voice) Wayne: Male voice for English (Singapore) (Free voice) Willem: Male voice for Afrikaans (South Africa) (Free voice) William: Male voice for English (Australia) (Free voice) William_2: Male voice for English (Australia) (Free voice) Xiaochen: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaochen_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaochen_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaochen_4: Female voice for Chinese (Mandarin, Simplified) (Paid voice) Xiaohan: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaohan_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaomeng: Female voice for Chinese (Mandarin, Simplified) (Free voice) XiaoMin: Female voice for Chinese (Cantonese, Simplified) (Free voice) Xiaomo: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoqiu: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaorou: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaorui: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoshuang: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoshuang_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoshuang_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaotong: Female voice for Chinese (Wu, Simplified) (Free voice) Xiaoxiao: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_4: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_5: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyan: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyi: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyi_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyou: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyou_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyou_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyu: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyu_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaozhen: Female voice for Chinese (Mandarin, Simplified) (Free voice) Ximena: Female voice for Spanish (Mexico) (Paid voice) Ximena_ES: Female voice for Spanish (Spain) (Free voice) Ximena_ES_2: Female voice for Spanish (Spain) (Free voice) Ximena_ES_3: Female voice for Spanish (Spain) (Paid voice) Yago: Male voice for Spanish (Mexico) (Free voice) Yan: Female voice for English (Hong Kong SAR) (Free voice) Yara: Female voice for Portuguese (Brazil) (Free voice) Yashica: Female voice for Assamese (India) (Free voice) Yasmin: Female voice for Malay (Malaysia) (Free voice) Yesui: Female voice for Mongolian (Mongolia) (Free voice) Yolanda: Female voice for Spanish (Nicaragua) (Free voice) YuJin: Female voice for Korean (Korea) (Free voice) Yundeng: Male voice for Chinese (Zhongyuan Mandarin Henan, Simplified) (Free voice) Yunfan: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunfan_2: Male voice for Chinese (Mandarin, Simplified) (Paid voice) Yunfeng: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunhan: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunhao: Male voice for Chinese (Mandarin, Simplified) (Free voice) YunJhe: Male voice for Chinese (Taiwanese Mandarin, Traditional) (Free voice) Yunjian: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunjie: Male voice for Chinese (Mandarin, Simplified) (Free voice) YunSong: Male voice for Chinese (Cantonese, Simplified) (Free voice) Yunxi: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxi_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxia: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxia_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxiang: Male voice for Chinese (Jilu Mandarin, Simplified) (Free voice) Yunxiao: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxiao_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunyang: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunye: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunye_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunyi: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunyi_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunze: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunzhe: Male voice for Chinese (Wu, Simplified) (Free voice) Yves: Male voice for French (France) (Free voice) Yvette: Female voice for French (France) (Free voice) Zariyah: Female voice for Arabic (Saudi Arabia) (Free voice) Zayd: Male voice for Arabic (Saudi Arabia) (Free voice) Zeina: Female voice for Arabic (Saudi Arabia) (Free voice) Zhiyu: Female voice for Chinese (Mandarin) (Free voice) Zhiyu_2: Female voice for Chinese (Mandarin) (Free voice) Zofia: Female voice for Polish (Poland) (Free voice) Zuri: Female voice for Swahili (Kenya) (Free voice) callType: title: Call Type x-category: call x-usage: call type: string description: 'The type of channel used for the call. This value indicates what kind of endpoint the call is connected to (PSTN phone number or WebSocket stream).' enum: - PHONE - SIP - STREAM - VOICE_RELAY x-enumDescriptions: PHONE: A call from or to the telephone network. SIP: A call from or to a SIP endpoint. STREAM: A call to a stream. VOICE_RELAY: A call to voice relay service. examples: - PHONE pause: type: object additionalProperties: false title: Pause description: 'Delays execution of the next command in the sequence for a specified duration. This is a blocking command — no further commands execute until the pause completes. The pause does not affect call audio; the call remains connected and audio continues uninterrupted.' required: - command - durationMilliseconds properties: command: type: string const: pause description: Pause execution. durationMilliseconds: type: integer minimum: 1 description: Duration of the pause in milliseconds. example: 1000 examples: - command: pause durationMilliseconds: 1500 dial: type: object additionalProperties: false title: Dial description: 'Initiates a new outbound call leg within the current session. This is a non-blocking command — the next command in the sequence executes immediately while the call is being established in parallel. Call lifecycle events (answer, busy, reject, timeout, hangup, failure) are handled via the `events` property. The `from` and `to` endpoint types should ideally match. If they differ, the platform attempts to convert the `from` value to be compatible with the `to` type. For example, PSTN supports only E.164 phone numbers, so a SIP address such as `sip:46701234567@acme.se` can be converted to an E.164 number. If the `from` value cannot be converted, it defaults to null (anonymous).' required: - command - to properties: command: type: string const: dial description: Command to initiate a new call callName: type: string minLength: 1 maxLength: 32 pattern: ^\S+$ example: outgoing description: 'Identifier for this call leg within the session. Must be unique across all active call legs in the session. Other commands (e.g., `hangup`) can reference this name to target this specific leg.' from: $ref: '#/components/schemas/from' to: $ref: '#/components/schemas/to' dialTimeoutDurationSeconds: type: integer minimum: 1 maximum: 60 description: Maximum time in seconds to wait for the call to be answered. If the timeout expires without an answer, the `onTimeout` event is triggered. example: 15 maxCallDurationSeconds: type: integer minimum: 1 maximum: 14400 description: Maximum duration of the call in seconds. The call is terminated automatically when this limit is reached. example: 3600 events: $ref: '#/components/schemas/callEvents' examples: - command: dial callName: destination from: type: PHONE phone: number: '+15551234567' to: type: PHONE phone: number: '+15559876543' dialTimeoutDurationSeconds: 30 maxCallDurationSeconds: 3600 events: onAnswer: - command: messages messages: - type: SAY say: text: Your call has connected. voiceName: Emma callId: title: Call ID type: string format: ulid description: The `Id`` of the call. examples: - 01ARZ3NDEKTSV4RRFFQ69G5FAA recordingFormat: title: Recording Format description: Audio format for this recording. type: string enum: - MP3 - WAV x-enumDescriptions: MP3: MPEG Audio Layer III compressed audio format. WAV: Waveform Audio File Format, uncompressed audio. default: MP3 examples: - MP3 call: type: object additionalProperties: false title: Call Resource description: Call details required: - callId - projectId - serviceId - sessionId - direction - originationType - callType - callResult - startTime - callRate - callResourceUrl properties: callId: $ref: '#/components/schemas/callId' projectId: $ref: '#/components/schemas/projectId' serviceId: $ref: '#/components/schemas/serviceId' sessionId: $ref: '#/components/schemas/sessionId' callName: type: string minLength: 1 maxLength: 32 pattern: ^\S+$ description: 'The name identifying this call leg within the session, as assigned by the `callName` property in the `dial` command or in the SVAML response to an incoming call webhook. Omitted for calls that were not assigned a name.' example: origin bridgeName: type: string description: The name of the bridge the call belongs to. Omitted for calls not assigned to any bridge. example: my-bridge batchId: $ref: '#/components/schemas/batchId' from: $ref: '#/components/schemas/from' to: $ref: '#/components/schemas/to' startTime: type: string format: date-time description: Timestamp (RFC 3339) indicating when the call was created and call setup was initiated (start of the call attempt). example: '2025-01-01 00:00:00+00:00' updateTime: type: string format: date-time description: 'Timestamp (RFC 3339) indicating when the call was last updated. Omitted if no updates were performed on this call.' example: '2025-01-01 00:00:00+00:00' callType: $ref: '#/components/schemas/callType' direction: $ref: '#/components/schemas/callDirection' answerTime: type: string format: date-time description: 'Timestamp (RFC 3339) indicating when the call was answered. Omitted if the call was not answered.' example: '2025-01-01 00:00:00+00:00' endTime: type: string format: date-time description: 'Timestamp (RFC 3339) indicating when the call ended. Omitted for ongoing calls.' example: '2025-01-01 00:00:00+00:00' callDurationSeconds: type: integer description: Duration of the call in seconds example: 42 callResult: $ref: '#/components/schemas/callResult' callReason: $ref: '#/components/schemas/callReason' originationType: $ref: '#/components/schemas/originationType' callRate: $ref: '#/components/schemas/money' description: The rate charged for this call, expressed as a monetary amount **per minute** in the specified currency. callResourceUrl: type: string format: uri description: Absolute URI to this call resource. Use this URL to retrieve the call details example: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01AN4Z07BY79KA1307SR9X4MV3 recordingEvents: type: object additionalProperties: false title: Recording Events description: 'SVAML commands to execute based on recording lifecycle outcomes. ' properties: onFinish: description: 'Commands to execute when the recording is successfully stopped. Note that this does not mean that the file is delivered to the configured destination yet. ' $ref: '#/components/schemas/svamlCommands' onFailure: description: 'Commands to execute if the recording fails to start. If omitted, failures are silently ignored and the call flow continues. ' $ref: '#/components/schemas/svamlCommands' bridgeCall: type: object additionalProperties: false title: Add call to bridge description: 'Adds the current call to a bridge, enabling bidirectional audio communication with other calls in the same session. This is a non-blocking command — execution continues to the next command in the sequence immediately after the call joins the bridge. Bridges are created automatically when referenced by name. If a bridge with the specified name already exists, the call joins that bridge; otherwise, a new bridge is created.' required: - command - bridgeName properties: command: type: string const: bridgeCall description: Command to add the call to a bridge bridgeName: type: string minLength: 1 maxLength: 32 pattern: ^\S+$ description: Name of the bridge to join. If no bridge with this name exists in the session, a new one is created automatically. examples: - command: bridgeCall bridgeName: my_bridge svamlCommand: title: SVAML Command type: object description: 'A single SVAML (Sinch Voice Application Markup Language) command that controls call behavior. The `command` property acts as a discriminator and determines which command schema applies. When multiple commands appear in a `svamlCommands` array, they execute sequentially in order. **Available commands:** - `dial` — Initiate an outbound call leg within the session. - `messages` — Play one or more TTS or audio messages on the call. - `stopMessages` — Stop a currently playing message sequence. - `webhook` — Trigger a mid-call webhook to the application backend for dynamic call control. - `amd` — Detect whether the call was answered by a human or an answering machine. - `hangup` — End the call or a specific call leg within the session. - `answer` — Explicitly answer an incoming call leg before executing further commands. - `pause` — Delay script execution without affecting call audio. - `startRecording` — Begin recording the call. - `stopRecording` — Stop an active call recording. - `bridgeCall` — Add the call to a named bridge for multi-party audio. - `menu` — Run menu-based input collection and route the call based on collected input. - `gotoMenu` — Switch execution to another named menu within the current menu context.' oneOf: - $ref: '#/components/schemas/amd' - $ref: '#/components/schemas/dial' - $ref: '#/components/schemas/messages' - $ref: '#/components/schemas/stopMessages' - $ref: '#/components/schemas/webhook' - $ref: '#/components/schemas/hangup' - $ref: '#/components/schemas/answer' - $ref: '#/components/schemas/pause' - $ref: '#/components/schemas/startRecording' - $ref: '#/components/schemas/stopRecording' - $ref: '#/components/schemas/bridgeCall' - $ref: '#/components/schemas/menu' - $ref: '#/components/schemas/gotoMenu' discriminator: propertyName: command mapping: amd: '#/components/schemas/amd' dial: '#/components/schemas/dial' messages: '#/components/schemas/messages' stopMessages: '#/components/schemas/stopMessages' webhook: '#/components/schemas/webhook' hangup: '#/components/schemas/hangup' answer: '#/components/schemas/answer' pause: '#/components/schemas/pause' startRecording: '#/components/schemas/startRecording' stopRecording: '#/components/schemas/stopRecording' bridgeCall: '#/components/schemas/bridgeCall' menu: '#/components/schemas/menu' gotoMenu: '#/components/schemas/gotoMenu' gotoMenu: type: object additionalProperties: false title: Goto Menu description: 'Switches execution to another menu within the current menu context. The menu name must be a menu defined in the `menu` command. This is a blocking command — execution waits for the menu to complete before proceeding to the next command. **Important**: this command can only be called within a menu execution context.' required: - command - menuName properties: command: type: string const: gotoMenu description: Switch execution to another menu within the current menu context. menuName: type: string description: Name of the target menu to execute next. Must match a key in menus. minLength: 1 maxLength: 16 callHeaders: type: array description: Custom headers to be sent in the call setup. maxItems: 16 items: type: object additionalProperties: false required: - key properties: key: type: string minLength: 1 maxLength: 255 pattern: '[\x20-\x7e\t]+$' description: Name of the header. example: headerKey value: type: string maxLength: 255 pattern: '[\x20-\x7e\t]*$' description: Value of the header. example: headerValue examples: - - key: headerKey value: headerValue - key: anotherKey value: anotherValue svamlInput: type: object additionalProperties: false title: SVAML Input description: A SVAML v2 (Sinch Voice Application Markup Language) document describing a call flow. Contains the ordered list of commands to execute, an optional call name, and optional event handlers. required: - commands properties: commands: allOf: - $ref: '#/components/schemas/svamlCommands' minItems: 1 description: The ordered list of SVAML commands to execute. Contains at least one command. callName: type: string minLength: 1 maxLength: 32 pattern: ^\S+$ example: incoming description: Name of the call. events: type: object description: Commands to execute on specific events for this call. properties: onHangup: $ref: '#/components/schemas/svamlCommands' description: SVAML commands to be executed when the call is hung up. sipCallHeaders: type: array description: Custom SIP headers to be sent in the call setup. maxItems: 16 items: type: object additionalProperties: false required: - key properties: key: type: string minLength: 1 maxLength: 255 pattern: ^[-A-Za-z0-9.!%*_+`'~]+$ description: Name of the SIP header. example: X-Correlation-Id value: type: string maxLength: 255 description: Value of the SIP header. example: '12345' examples: - - key: X-Correlation-Id value: '12345' - key: X-Call-Routing value: forwarded sessionId: title: Session ID type: string format: ulid description: The ID of the session. examples: - 01BX5ZZKBKACTAV9WEVGEMMVRB messageSay: type: object title: Say Message description: A text-to-speech (TTS) message item. The platform synthesizes the provided text into speech and plays it on the call. additionalProperties: false required: - type - say properties: type: type: string const: SAY description: Text-to-speech message to be played during the call. say: type: object additionalProperties: false title: Say required: - text - voiceName properties: text: type: string description: 'The text to be synthesized into speech. If `format` is `TEXT` (default), provide plain text. If `format` is `SSML`, provide a valid SSML document (for example, `...`).' maxLength: 600 example: Hello world format: type: string description: Format of the message enum: - TEXT - SSML x-enumDescriptions: TEXT: Plain text format for the message. SSML: Speech Synthesis Markup Language format for advanced text-to-speech control. default: TEXT voiceName: description: The name of the voice to use for text-to-speech synthesis. $ref: '#/components/schemas/voiceName' examples: - type: SAY say: text: Hello, this is a test message voiceName: Emma - type: SAY say: text: Hello, this is a test message format: SSML voiceName: Brian callEvents: type: object additionalProperties: false title: Call Events Webhook description: Webhook to handle call events, used when callBehaviors are set to WEBHOOK properties: onAnswer: description: SVAML commands to be executed when the call is answered $ref: '#/components/schemas/svamlCommands' onBusy: description: SVAML commands to be executed when the call is busy $ref: '#/components/schemas/svamlCommands' onReject: description: SVAML commands to be executed when the call is rejected $ref: '#/components/schemas/svamlCommands' onTimeout: description: SVAML commands to be executed when the call is timed out $ref: '#/components/schemas/svamlCommands' onHangup: description: SVAML commands to be executed when the call is hung up $ref: '#/components/schemas/svamlCommands' onFailure: description: SVAML commands to be executed when the call fails $ref: '#/components/schemas/svamlCommands' webhook: type: object additionalProperties: false title: Webhook description: 'Triggers a mid-call webhook to the application backend, allowing it to return a new set of SVAML commands that control the remainder of the call flow. This is a blocking command — execution pauses until a response is received from the webhook endpoint. The next command in the sequence runs only after the backend responds. Webhook requests use a 5-second timeout. If a `fallbackUrl` is provided, a failed request is re-sent to it — see *Timeouts and failover* in the **Webhooks** section for the authoritative algorithm.' required: - command - webhookName - url properties: command: type: string const: webhook description: Command to trigger a mid-call webhook webhookName: type: string minLength: 1 maxLength: 64 pattern: ^\S+$ description: 'Name for this webhook event. When triggered, the webhook request''s `event` property will contain this name prepended with `call.webhook.`. For example, if `webhookName` is set to `"my.custom.event"`, the event will be delivered as `"call.webhook.my.custom.event"`.' url: type: string description: URL of the webhook endpoint to send the mid-call event to. format: uri fallbackUrl: $ref: '#/components/schemas/webhookFallbackUrl' examples: - command: webhook webhookName: my.custom.event url: https://example.com/webhook fallbackUrl: https://example.com/fallback phoneNumber: title: Phone Number type: string pattern: ^\+[1-9]\d{1,14}$ minLength: 3 maxLength: 16 description: E.164 Phone number examples: - '+4673522488' from: description: Call origin - Phone Number or SIP endpoint oneOf: - $ref: '#/components/schemas/phone' - $ref: '#/components/schemas/sipFrom' discriminator: propertyName: type mapping: PHONE: '#/components/schemas/phone' SIP: '#/components/schemas/sipFrom' callDirection: title: Call Direction type: string description: Indicates the direction of the call. enum: - INBOUND - OUTBOUND x-enumDescriptions: INBOUND: A call initiated towards the Sinch Calling Platform. OUTBOUND: A call initiated from the Sinch Calling Platform. examples: - OUTBOUND startRecording: type: object additionalProperties: false title: Start Recording required: - command - recordingOptions description: Starts recording the call. This is a non-blocking command — execution continues to the next command in the sequence immediately after recording begins. properties: command: type: string const: startRecording description: Command to start recording on the channel recordingName: type: string description: 'Identifier for this recording within the session. Must be unique across active recordings in the session. Other commands (e.g., `stopRecording`) reference this name to target a specific recording. Setting the recording name is useful for stopping the recording using the `stopRecording` command. If name is not set, recording can only be stopped when the call is disconnected.' minLength: 1 maxLength: 32 pattern: ^\S+$ example: my-recording recordingOptions: $ref: '#/components/schemas/recordingOptions' events: $ref: '#/components/schemas/recordingEvents' examples: - command: startRecording recordingName: customer-support-recording recordingOptions: format: MP3 recordingType: COMBINED destination: AWS destinationUrl: s3://voice-recordings-prod/calls credentials: accessKeyId:secretAccessKey:eu-central-1 transcriptionOptions: isEnabled: true locale: en-US events: onFinish: - command: hangup onFailure: - command: messages messages: - type: SAY say: text: Recording could not be started for this call. voiceName: Emma messagePlay: type: object title: Play Message description: An audio file playback message item. The platform fetches and plays the audio file at the provided URL on the call. additionalProperties: false required: - type - play properties: type: type: string const: PLAY description: Audio file playback during the call. play: type: object additionalProperties: false title: Play required: - url properties: url: type: string description: URL of the media to send examples: - type: PLAY play: url: https://example.com/media.mp3 hangup: type: object additionalProperties: false description: 'Ends a call leg. This is a non-blocking command — execution continues to the next command in the sequence even though the call has been ended. The `onHangup` event is triggered for the call leg that was ended. Any subsequent commands that target the ended call leg (such as `messages` or other media commands) are valid but will not be executed. Commands that operate independently — such as initiating a new call with `dial` — will execute normally. This makes it possible, for example, to end one call and immediately start another within the same sequence.' title: Hangup required: - command properties: command: type: string const: hangup description: Hangup call callName: type: string description: 'Name of the call leg to end, as set by `callName` in the `dial` command. If omitted, the current call leg is ended.' minLength: 1 maxLength: 32 pattern: ^\S+$ example: origin examples: - command: hangup callName: origin transcriptionOptions: title: Transcription Options description: Configuration for automatic speech-to-text transcription of the recording. type: object additionalProperties: false required: - isEnabled properties: isEnabled: type: boolean description: If true, the recording will be transcribed to text. example: true locale: type: string description: Language code in BCP-47 format. default: en-US example: en-US WebhookList: type: object properties: webhooks: type: array description: List of webhooks items: $ref: '#/components/schemas/Webhook_2' CreateWebhookRequest: type: object required: - app_id - target - triggers properties: app_id: type: string description: The app ID target: type: string format: uri description: The webhook target URL target_type: type: string enum: - HTTP - GRPC description: The target type default: HTTP triggers: type: array description: Event triggers to subscribe to items: type: string secret: type: string description: Secret for HMAC validation UpdateWebhookRequest: type: object properties: target: type: string format: uri description: Updated target URL target_type: type: string description: Updated target type triggers: type: array description: Updated trigger list items: type: string secret: type: string description: Updated secret Webhook_2: type: object properties: id: type: string description: The unique webhook identifier app_id: type: string description: The app this webhook belongs to target: type: string format: uri description: The webhook target URL target_type: type: string enum: - HTTP - GRPC description: The target type triggers: type: array description: List of event triggers this webhook subscribes to items: type: string enum: - MESSAGE_INBOUND - EVENT_INBOUND - MESSAGE_DELIVERY - MESSAGE_SUBMIT - CONTACT_CREATE - CONTACT_DELETE - CONTACT_MERGE - CONTACT_UPDATE - CONVERSATION_START - CONVERSATION_STOP - CONVERSATION_DELETE - CAPABILITY - OPT_IN - OPT_OUT - CHANNEL_EVENT - CONTACT_IDENTITIES_DUPLICATION - UNSUPPORTED - RECORD_NOTIFICATION - SMART_CONVERSATIONS secret: type: string description: Secret for HMAC signature validation responses: 403Error: description: Correct credentials but you don't have access to the requested resource. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information. content: application/json: schema: $ref: '#/components/schemas/runtimeError' example: code: 403 message: You do not have access to the requested resource. status: UNAUTHORIZED details: [] 400Error: description: Malformed request. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information. content: application/json: schema: $ref: '#/components/schemas/runtimeError' example: code: 400 message: Malformed request status: INVALID_REQUEST details: [] listWebhooksResponse: description: A successful response. content: application/json: schema: $ref: '#/components/schemas/ListWebhooksResponse' 401Error: description: Incorrect credentials. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information. content: application/json: schema: type: object 501Error: description: Something went wrong on our end, try again with exponential back-off. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information. content: application/json: schema: $ref: '#/components/schemas/runtimeError' example: code: 501 message: There was an internal server error. status: INTERNAL_ERROR details: [] 500Error: description: Correct credentials but you don't have access to the requested resource. See [common error responses](https://developers.sinch.com/docs/conversation/api-reference/#common-error-responses) for more information. content: application/json: schema: $ref: '#/components/schemas/runtimeError' example: code: 500 message: There was an internal server error. status: INTERNAL_ERROR details: [] parameters: webhook_id: name: webhook_id description: The unique ID of the webhook. in: path required: true schema: type: string app_id: name: app_id description: The unique ID of the app. You can find this on the [Sinch Dashboard](https://dashboard.sinch.com/convapi/apps). in: path required: true schema: type: string project_id: name: project_id description: The unique ID of the project. You can find this on the [Sinch Dashboard](https://dashboard.sinch.com/convapi/apps). in: path required: true schema: type: string update_mask: description: The set of field mask paths. name: update_mask in: query explode: false schema: type: array items: type: string AppId: name: app_id in: path required: true description: The unique app identifier schema: type: string ProjectId: name: project_id in: path required: true description: The unique project identifier schema: type: string securitySchemes: Basic: type: http scheme: basic description: For more information about basic authentication, see [Basic Authentication](https://developers.sinch.com/docs/conversation/api-reference/#authentication). oAuth2: type: oauth2 description: The user name and password are your client_id and key_secret from the [Access keys sections](https://dashboard.sinch.com/settings/access-keys) flows: clientCredentials: tokenUrl: https://auth.sinch.com/oauth2/token scopes: {} basicAuth: type: http scheme: basic description: Your key ID and Key secret serve as the username and password, respectively. Both can be found in the [Sinch Build Dashboard](https://dashboard.sinch.com/settings/access-keys). For more information about basic authentication in the Numbers API, click [here](https://developers.sinch.com/docs/numbers/api-reference/authentication/basic). bearerAuth: type: oauth2 description: The username and password are your Key ID and Key Secret from the [Sinch Build Dashboard](https://dashboard.sinch.com/settings/access-keys). Exchange these for a bearer token (access token). Learn how [here](https://developers.sinch.com/docs/numbers/api-reference/authentication/oauth). flows: clientCredentials: tokenUrl: https://auth.sinch.com/oauth2/token scopes: {} BasicAuth: type: http scheme: basic BearerAuth: type: http scheme: bearer bearerFormat: JWT OAuth2Production: type: oauth2 description: OAuth2 authorization for production flows: clientCredentials: tokenUrl: https://auth.sinch.com/oauth2/token scopes: '-': '-' SinchOAuth2: type: oauth2 description: 'OAuth 2.0 **Client Credentials** grant (recommended for production). Exchange the **Access Key ID** (`client_id`) and **Access Key Secret** (`client_secret`) for a short-lived Bearer token. Tokens typically expire after **3600 seconds**. When the token expires, request a new one using the same `tokenUrl`. There is no separate refresh token in the client credentials flow — simply re-authenticate. Access keys are managed in the Dashboard: https://dashboard.sinch.com/settings/access-keys' flows: clientCredentials: tokenUrl: https://auth.sinch.com/oauth2/token refreshUrl: https://auth.sinch.com/oauth2/token scopes: {} externalDocs: description: Sinch Conversation API Documentation url: https://developers.sinch.com/docs/conversation x-refined-from: - sinch-conversation-api-openapi.yaml - sinch-porting-api-openapi.yaml - sinch-provisioning-api-openapi.yaml - sinch-voice-api-v2-openapi.yaml - original-sinch-conversation-openapi.yml - sinch-voice-api-v2-openapi.yml x-explorer-enabled: false x-samples-languages: - curl - java - csharp - node - php x-original-swagger-version: '2.0'