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