openapi: 3.2.0 info: title: Sinch Services API x-refined-note: - x-sinch-standards-version differs across the merged source definitions and was not carried version: '1.0' description: 'Operations tagged Services across 3 of this provider''s published API definitions: sinch-fax-api-openapi.yaml, sinch-voice-api-v2-openapi.yaml, sinch-voice-api-v2-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://fax.api.sinch.com description: v3.0 of the Fax API - 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 tags: - name: Services description: A fax service identifies a set of configuration values. paths: /v3/projects/{projectId}/services: parameters: - $ref: '#/components/parameters/ProjectId' post: description: Creates a new service that you can use to set default configuration values. operationId: createService summary: Create a service tags: - Services requestBody: content: application/json: schema: $ref: '#/components/schemas/Service' responses: '201': description: The newly created service content: application/json: schema: $ref: '#/components/schemas/Service' x-codeSamples: - 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\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.fax.services.create({\n createServiceRequestBody: {\n name: 'My new Fax Service',\n defaultForProject: true,\n },\n });\n console.log('✅ Successfully created the Fax Service.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error('❌ Failed to create the Fax Service:');\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - OAuth2: [] get: description: Get a list of services for a project. summary: List services operationId: listServices tags: - Services parameters: - name: pageSize in: query schema: type: integer default: 20 example: 20 maximum: 1000 description: Number of services to return on each request. - name: page in: query schema: type: string description: Optional. The page to fetch. If not specified, the first page will be returned. responses: '200': $ref: '#/components/responses/ServiceList' x-codeSamples: - 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\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.fax.services.list({});\n if (response.data.length === 0) {\n console.log('No Fax Services found.');\n return;\n }\n console.log(`✅ Found ${response.data.length} Fax Services.`);\n response.data.forEach((faxService) => {\n console.log(faxService);\n });\n } catch (err) {\n console.error('❌ Failed to list Fax Services:');\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - OAuth2: [] servers: - url: https://fax.api.sinch.com description: v3.0 of the Fax API /v3/projects/{projectId}/services/{id}: parameters: - $ref: '#/components/parameters/ProjectId' get: description: Get a service resource. summary: Get a service operationId: getService tags: - Services parameters: - name: id description: The service ID you want to update. required: true schema: type: string in: path responses: '200': description: The requested service, or an [Error](https://developers.sinch.com/docs/fax/api-reference/fax/error-messages) content: application/json: schema: $ref: '#/components/schemas/Service' x-codeSamples: - 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\n // The Fax Service ID you want to retrieve\n const serviceId = 'FAX_SERVICE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.fax.services.get({ serviceId });\n console.log('✅ Successfully retrieved the Fax Service.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to retrieve the Fax Service with ID ${serviceId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - OAuth2: [] patch: description: Update settings on the service. summary: Update a Service operationId: updateService parameters: - name: id required: true description: The service ID you want to update. schema: type: string in: path tags: - Services requestBody: content: application/json: schema: $ref: '#/components/schemas/Service' responses: '200': description: The updated service, or an [Error](https://developers.sinch.com/docs/fax/api-reference/fax/error-messages) content: application/json: schema: $ref: '#/components/schemas/Service' x-codeSamples: - 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\n // The Fax Service ID you want to update\n const serviceId = 'FAX_SERVICE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.fax.services.update({\n serviceId,\n updateServiceRequestBody: {\n name: 'My updated Fax Service name',\n },\n });\n console.log('✅ Successfully updated the Fax Service.');\n console.log(JSON.stringify(response, null, 2));\n } catch (err) {\n console.error(`❌ Failed to update the Fax Service with ID ${serviceId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - OAuth2: [] delete: description: Removes a service from your project. operationId: removeService summary: Remove a service tags: - Services parameters: - name: id description: The serviceId you want to remove from your project. required: true in: path schema: type: string responses: '204': description: The service removed from the project, or an [Error](https://developers.sinch.com/docs/fax/api-reference/fax/error-messages) x-codeSamples: - 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\n // The Fax Service ID you want to delete\n const serviceId = 'FAX_SERVICE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n await sinch.fax.services.delete({ serviceId });\n console.log(`✅ Successfully deleted the Fax Service with ID ${serviceId}.`);\n } catch (err) {\n console.error(`❌ Failed to delete the Fax Service with ID ${serviceId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - OAuth2: [] servers: - url: https://fax.api.sinch.com description: v3.0 of the Fax API /v3/projects/{projectId}/services/{id}/numbers: parameters: - $ref: '#/components/parameters/ProjectId' get: description: List numbers for a service. summary: List numbers for service operationId: listNumbersForService tags: - Services parameters: - name: id required: true description: The serviceId containing the numbers you want to list. in: path schema: type: string - name: pageSize in: query schema: type: integer default: 20 example: 20 maximum: 1000 description: Number of items to return on each page. - name: page in: query schema: type: string description: Optional. The page to fetch. If not specified, the first page will be returned. responses: '200': description: The list of numbers, or an [Error](https://developers.sinch.com/docs/fax/api-reference/fax/error-messages) content: application/json: schema: allOf: - type: object properties: numbers: description: List of phone numbers type: array items: $ref: '#/components/schemas/ServicePhoneNumber' - $ref: '#/components/schemas/Pagination' x-codeSamples: - 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\n // The Fax Service ID you want to list numbers for\n const serviceId = 'FAX_SERVICE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.fax.services.listNumbers({ serviceId });\n if (response.data.length === 0) {\n console.log('No Phone Numbers found.');\n return;\n }\n console.log(`✅ Found ${response.data.length} Phone Numbers.`);\n response.data.forEach((servicePhoneNumber) => {\n console.log(servicePhoneNumber);\n });\n } catch (err) {\n console.error(`❌ Failed to list the Phone Numbers for the Fax Service with ID ${serviceId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - OAuth2: [] servers: - url: https://fax.api.sinch.com description: v3.0 of the Fax API /v3/projects/{projectId}/services/{id}/numbers/{phoneNumber}/suspend: parameters: - $ref: '#/components/parameters/ProjectId' - name: phoneNumber description: The phone number you want to suspend. required: true in: path schema: type: string description: A phone number in e.164 format. example: '+15612600684' - name: id description: The serviceId containing the numbers you want to suspend. required: true in: path schema: type: string patch: summary: Suspend a number on the service description: Suspends a number assigned to the specified service. You can include a note as to the reason of the suspension. operationId: suspendNumber tags: - Services requestBody: content: application/json: schema: $ref: '#/components/schemas/SuspendRequest' responses: '200': description: Response detailing the suspended number. content: application/json: schema: $ref: '#/components/schemas/ServicePhoneNumber' security: - BasicAuth: [] - OAuth2: [] servers: - url: https://fax.api.sinch.com description: v3.0 of the Fax API /v2/projects/{projectId}/services: get: tags: - Services summary: List all services of a project description: 'Retrieve a list of voice services in the specified project. Optionally: - Filter services by partial match on name or description (`filter`) - Return only the default service (`default=true`)' operationId: getV2ProjectsByProjectIdServices parameters: - $ref: '#/components/parameters/projectId' - in: query name: filter description: Filter services by name or description. Returns all services where either the name or description contains the specified value (case-insensitive partial match). required: false schema: type: string - in: query name: isDefault description: Return the default service only. required: false schema: type: boolean example: true - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/page' responses: '200': description: A list of services. content: application/json: schema: $ref: '#/components/schemas/serviceListResponse' example: services: - serviceId: 6e124178-c29d-46a5-943c-5c2ae544aade projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 createTime: '2025-01-01T00:00:00Z' name: Primary Service description: Main service with webhook call behavior isDefault: true - serviceId: 7f235289-d3ae-57b6-a54d-6d3bf655bbdf projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 createTime: '2025-02-15T10:30:00Z' name: Secondary Service isDefault: false links: first: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/services?page=1&pageSize=20 last: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/services?page=1&pageSize=20 self: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/services?page=1&pageSize=20 meta: totalCount: 2 pageCount: 1 '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' x-codeSamples: - lang: Python source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n)\n\nservices = sinch_client.voice.v2.services.list()\n\nprint(\"List of services:\\n\")\nfor service in services.iterator():\n print(service)\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\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.voice.v2.services.list();\n if (response.data.length === 0) {\n console.log('No Voice v2 services found.');\n return;\n }\n console.log(`✅ Found ${response.data.length} Voice v2 services.`);\n response.data.forEach((service) => {\n console.log(service);\n });\n } catch (err) {\n console.error('❌ Failed to list Voice v2 services:');\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - SinchOAuth2: [] x-operation-id-source: normalized x-operation-id-original: listServices post: tags: - Services summary: Create a new voice service description: Creates a new voice service in the specified project. operationId: postV2ProjectsByProjectIdServices parameters: - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/idempotencyKey' requestBody: content: application/json: schema: $ref: '#/components/schemas/createService' examples: webhooksExample: summary: Adding webhook callback behavior value: description: Service with webhooks name: Example service callBehavior: type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback staticExample: summary: Adding static SVAML callback behavior value: description: Service with static SVAML name: Example service callBehavior: type: STATIC static: callName: incoming commands: - command: answer - command: messages messages: - type: SAY say: text: Your call is working fine! This call will be disconnected. voiceName: Emma events: onFinish: - command: hangup noneExample: summary: Removing callback behavior value: description: Service with no callback behavior name: Example service callBehavior: type: NONE responses: '201': description: Service created. content: application/json: schema: $ref: '#/components/schemas/serviceResponse' example: serviceId: 6e124178-c29d-46a5-943c-5c2ae544aade projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 createTime: '2025-01-01T00:00:00Z' name: Example service description: Service with webhooks isDefault: false callBehavior: type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '409': $ref: '#/components/responses/409' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' x-codeSamples: - lang: Python source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n)\n\n# The name of the service\nname = \"My Voice Service\"\n\nresponse = sinch_client.voice.v2.services.create(name=name)\n\nprint(f\"Successfully created service.\\n{response}\")\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\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.voice.v2.services.create({\n createServiceRequestBody: {\n name: 'Example service',\n },\n });\n console.log('✅ Successfully created a Voice v2 service.');\n console.log(`Response:\\n${JSON.stringify(response, null, 2)}`);\n } catch (err) {\n console.error('❌ Failed to create a Voice v2 service:');\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - SinchOAuth2: [] x-operation-id-source: normalized x-operation-id-original: createService 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 /v2/projects/{projectId}/services/{serviceId}: get: tags: - Services summary: Retrieve a voice service by ID description: Retrieve the full details of a specific voice service by its `serviceId`. operationId: getV2ProjectsByProjectIdServicesByServiceId parameters: - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/serviceId' responses: '200': description: A service object. content: application/json: schema: $ref: '#/components/schemas/serviceResponse' example: serviceId: 6e124178-c29d-46a5-943c-5c2ae544aade projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 createTime: '2025-01-01T00:00:00Z' updateTime: '2025-06-01T09:15:00Z' name: My Voice Service description: Service with webhook call behavior isDefault: true callBehavior: type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' x-codeSamples: - lang: Python source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n)\n\n# The ID of the service\nservice_id = \"SERVICE_ID\"\n\nresponse = sinch_client.voice.v2.services.get(service_id=service_id)\n\nprint(f\"Successfully retrieved service details.\\n{response}\")\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\n // The ID of the service to retrieve\n const serviceId = 'SERVICE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.voice.v2.services.get({\n serviceId,\n });\n console.log(`✅ Successfully retrieved the Voice v2 service with ID ${serviceId}.`);\n console.log(`Response:\\n${JSON.stringify(response, null, 2)}`);\n } catch (err) {\n console.error(`❌ Failed to retrieve the Voice v2 service with ID ${serviceId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - SinchOAuth2: [] x-operation-id-source: normalized x-operation-id-original: getService patch: tags: - Services summary: Update a voice service description: 'Updates an existing service resource with the provided properties. Only the fields included in the request body will be modified; omitted fields remain unchanged. To set a service as the default for the project, include `"isDefault": true` in the request. Note that each project can have only one default service. Setting a new default will automatically remove the default status from the previously designated service. `"isDefault": false` is invalid and **will not** be accepted by the API.' operationId: patchV2ProjectsByProjectIdServicesByServiceId parameters: - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/serviceId' - $ref: '#/components/parameters/idempotencyKey' requestBody: content: application/json: schema: $ref: '#/components/schemas/updateService' examples: webhooksExample: summary: Adding webhook callback behavior value: description: Service with webhooks callBehavior: type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback staticExample: summary: Adding static SVAML callback behavior value: description: Service with static SVAML callBehavior: type: STATIC static: callName: incoming commands: - command: answer - command: messages messages: - type: SAY say: text: Your call is working fine! This call will be disconnected. voiceName: Emma events: onFinish: - command: hangup noneExample: summary: Removing callback behavior value: description: Service with no callback behavior callBehavior: type: NONE responses: '200': description: Service updated. content: application/json: schema: $ref: '#/components/schemas/serviceResponse' example: serviceId: 6e124178-c29d-46a5-943c-5c2ae544aade projectId: 5c5bf2b1-35ae-4825-ab89-457e07bb60e6 createTime: '2025-01-01T00:00:00Z' updateTime: '2025-06-01T09:15:00Z' name: My Voice Service description: Updated service description isDefault: true callBehavior: type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' x-codeSamples: - lang: Python source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n)\n\n# The ID of the service\nservice_id = \"SERVICE_ID\"\n\n# The new name of the service\nname = \"Updated from Python SDK snippet\"\n\nresponse = sinch_client.voice.v2.services.update(service_id=service_id, name=name)\n\nprint(f\"Successfully updated service.\\n{response}\")\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\n // The ID of the service to update\n const serviceId = 'SERVICE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n const response = await sinch.voice.v2.services.update({\n serviceId,\n updateServiceRequestBody: {\n name: 'Updated service name',\n },\n });\n console.log(`✅ Successfully updated the Voice v2 service with ID ${serviceId}.`);\n console.log(`Response:\\n${JSON.stringify(response, null, 2)}`);\n } catch (err) {\n console.error(`❌ Failed to update the Voice v2 service with ID ${serviceId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - SinchOAuth2: [] x-operation-id-source: normalized x-operation-id-original: updateService delete: tags: - Services summary: Delete a voice service by ID description: 'Deletes a service permanently. **Important:** The default service cannot be deleted. To delete the current default service, a different service must first be designated as the default using the PATCH endpoint.' operationId: deleteService parameters: - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/serviceId' responses: '204': description: Service deleted '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' x-codeSamples: - lang: Python source: "\"\"\"\nSinch Python Snippet\n\nThis snippet is available at https://github.com/sinch/sinch-sdk-python/tree/main/examples/snippets\n\"\"\"\n\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom sinch import SinchClient\n\nload_dotenv()\n\nsinch_client = SinchClient(\n project_id=os.environ.get(\"SINCH_PROJECT_ID\") or \"MY_PROJECT_ID\",\n key_id=os.environ.get(\"SINCH_KEY_ID\") or \"MY_KEY_ID\",\n key_secret=os.environ.get(\"SINCH_KEY_SECRET\") or \"MY_KEY_SECRET\",\n)\n\n# The ID of the service\nservice_id = \"SERVICE_ID\"\n\nsinch_client.voice.v2.services.delete(service_id=service_id)\n\nprint(\"Successfully deleted service.\")\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\n // The ID of the service to delete\n const serviceId = 'SERVICE_ID';\n\n const sinch = new SinchClient({ projectId, keyId, keySecret });\n\n try {\n await sinch.voice.v2.services.delete({\n serviceId,\n });\n console.log(`✅ Successfully deleted the Voice v2 service with ID ${serviceId}.`);\n } catch (err) {\n console.error(`❌ Failed to delete the Voice v2 service with ID ${serviceId}:`);\n console.error(err);\n }\n}\n\nmain();\n" security: - BasicAuth: [] - SinchOAuth2: [] 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: Pagination: type: object readOnly: true properties: page: readOnly: true type: integer description: Current page totalPages: readOnly: true type: integer description: Total number of pages. pageSize: readOnly: true type: integer description: Number of items per page. totalItems: type: integer readOnly: true format: int32 description: Total size of the result. PhoneNumber: x-PII: true x-v1: true type: string format: phoneNumber description: A phone number in [E.164](https://community.sinch.com/t5/Glossary/E-164/ta-p/7537) format, including the leading '+'. example: '+15551235656' Resolution: type: string description: The resolution for the fax. If this is set at the service, this applies to all faxes sent using that service. If this is set on the fax, this will override the service setting. enum: - FINE - SUPERFINE x-enumDescriptions: FINE: Most commonly accepted fax resolution at 200 dpi. SUPERFINE: Higher but less commonly accepted fax resolution at 400 dpi. May be required when sending small text or detailed images. SuspendRequest: type: object description: The request body for suspending a number. properties: suspended: type: boolean description: Set to `true` to suspend a number. example: true note: type: string description: An optional field to include a note providing context about the suspension. example: Reason for suspending the number. ProjectId: type: string x-PII: false x-v1: false description: The `Id` of the project associated with the call. x-Internal: to support future account keys readOnly: true example: ae00f005-e392-44dc-b3f5-a657a2684dg3 ImageConversionMethod: type: string description: Determines how documents are converted to black and white on OUTBOUND faxes only. Image conversion is not done on INBOUND faxes. Defaults to value selected on Fax Service object. enum: - HALFTONE - MONOCHROME x-enumDescriptions: HALFTONE: Converts the image to halftone. MONOCHROME: Converts the image to monochrome. default: HALFTONE Service: type: object description: You can use the default created service, or create multiple services within the same project to have different default behavior for all your different faxing use cases. properties: id: $ref: '#/components/schemas/ServiceId' name: type: string description: A friendly name for the service. Maximum is 60 characters. example: Default service default: Default service incomingWebhookUrl: type: string x-version: 1 description: 'The URL to which Sinch will post when someone sends a fax to your Sinch number. To accept incoming faxes this must be set and your Sinch phone number must be configured to receive faxes. Note: If a webhook uses basicauth credentials, when the webhook URL is retrieved those credentials are masked. It is not possible to retrieve previously-set credentials through the API. ' readOnly: false example: https://yourserver/incomingFax webhookContentType: description: The content type of the webhook. type: string default: multipart/form-data enum: - multipart/form-data - application/json x-enumDescriptions: multipart/form-data: The webhook will be sent as a multipart/form-data request. Files are sent as attachments to the body. application/json: The webhook will be sent as a JSON request. Files are sent as base64 encoded strings in the JSON object. defaultForProject: x-version: 1 type: boolean format: string description: If set to true this is the service used to create faxes when no serviceId is specified in the API endpoints. default: false x-internal: When an account and project is created, a default service for Voice should be created, and the test number should be assigned to this service defaultFrom: x-version: 1 type: string description: One of your Sinch numbers connected to this service or any of your verified numbers. numberOfRetries: type: integer description: The number of times to retry sending a fax if it fails. Default is 3. Maximum is 5. default: 3 retryDelaySeconds: description: The number of seconds to wait between retries if the fax is not yet completed. type: integer minimum: 30 maximum: 300 default: 60 imageConversionMethod: $ref: '#/components/schemas/ImageConversionMethod' coverPageId: type: string format: ulid description: If a value it will always add that cover page id to outbound faxes x-internal: in ui this will be a select list of the pages on the service saveOutboundFaxDocuments: description: Save fax documents with Sinch when you send faxes. Fax records are retained for 13 months. Records older than 13 months are deleted. type: boolean default: true saveInboundFaxDocuments: description: Save fax documents with Sinch when you receive faxes. Fax records are retained for 13 months. Records older than 13 months are deleted. type: boolean default: true scanIncomingBarcodes: type: boolean description: If set to true, barcodes will be detected on incoming faxes. default: false inProgressNotifications: type: boolean description: If set to `true`, you will receive a webhook notification for each page sent on an outbound fax. default: false projectId: $ref: '#/components/schemas/ProjectId' readOnly: true resolution: $ref: '#/components/schemas/Resolution' createdAt: type: string format: date-time readOnly: true description: The date and time the service was created. updatedAt: type: string format: date-time readOnly: true description: The date and time the service was last updated. ServicePhoneNumber: type: object properties: phoneNumber: $ref: '#/components/schemas/PhoneNumber' permissions: type: string description: Allows you to set permissions for sending and receiving faxes to this email/phone number combination. Default value is `both`. x-enumDescriptions: both: Allows the email to send and receive faxes to this email/phone number combination. send: Allows the email to only send faxes to this email/phone number combination. receive: Allows the email to only receive faxes from this email/phone number combination. enum: - both - send - receive default: both country: readOnly: true type: string description: The country code of the phone number in ISO 3166-1 alpha-2 format. example: US suspended: type: boolean description: Specifies if a number is suspended or not. example: true readOnly: true note: type: string description: An optional field providing context about the suspension. example: Reason for suspending the number. readOnly: true projectId: $ref: '#/components/schemas/ProjectId' readOnly: true serviceId: $ref: '#/components/schemas/ServiceId' readOnly: true ServiceId: x-PII: false x-v1: true readOnly: true type: string example: 01GVRB50KEQFFE1SGMPFRNBG6J description: ID of the fax service used. problemDetails: title: Problem Details description: Base error response schema following [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) (Problem Details for HTTP APIs). All error responses use this structure. x-category: response x-usage: http-response type: object additionalProperties: false required: - type - title - detail - instance properties: type: type: string description: URI that identifies the problem type and links to the corresponding error documentation. title: type: string description: Human-readable short summary of the problem type. detail: type: string description: Human-readable explanation of the specific problem occurrence. instance: type: string description: URI reference that identifies the specific occurrence of the problem (typically the request path). createService: title: Create Service description: Request body for creating a new voice service. Extends the update request with `name` as a required field. allOf: - $ref: '#/components/schemas/updateService' - type: object required: - name examples: - name: My test service description: New voice service callBehavior: type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback sip: type: object additionalProperties: false title: SIP Endpoint required: - type - sip properties: type: type: string const: SIP description: Routes the call to a SIP (Session Initiation Protocol) endpoint. sip: type: object additionalProperties: false required: - endpoint properties: endpoint: type: string description: SIP URI of the destination endpoint. Both `sip:` (unencrypted) and `sips:` (TLS-encrypted) schemes are supported. format: uri maxLength: 256 pattern: '^sips?:' transport: type: string description: 'Transport protocol to use for the SIP signalling channel. If omitted, the platform selects a default based on the URI scheme: `UDP` for `sip:` and `TLS` for `sips:`. Setting this explicitly overrides that default — for example, to force `TCP` for a `sip:` URI or to use `TLS` without switching to the `sips:` scheme.' enum: - UDP - TCP - TLS x-enumDescriptions: UDP: Connectionless transport. Lowest overhead; suitable for most standard SIP deployments. TCP: Connection-oriented transport. More reliable for large SIP messages or NAT traversal scenarios. TLS: Encrypted transport. Provides confidentiality and integrity for SIP signalling. callHeaders: $ref: '#/components/schemas/sipCallHeaders' examples: - type: SIP sip: endpoint: sip:user@example.com transport: TCP callHeaders: - key: X-Correlation-Id value: '12345' - key: X-Call-Routing value: forwarded messages: type: object additionalProperties: false title: Messages description: "Plays one or more messages on the call. Multiple messages in the array are played sequentially in order.\n\nThis is a non-blocking command — the next command in the sequence executes immediately while messages play in parallel. \nPlayback outcomes are handled via the `events` property. The `onFinish` event can be used to run a command after all messages complete." required: - command - messages properties: command: type: string const: messages description: Command to play a message on the channel messagesName: type: string description: 'Name of the message for identification and reference within the call session. This name is used to uniquely identify the message and must be unique within the current call session. This name can be referenced in other commands (e.g., `stopMessages`) to control this specific message.' minLength: 1 maxLength: 32 pattern: ^\S+$ example: my-messages messages: $ref: '#/components/schemas/typesOfMessages' events: $ref: '#/components/schemas/messageEvents' examples: - command: messages messagesName: greeting-sequence messages: - type: SAY say: text: Hello! Your call is being connected. voiceName: Emma - type: PLAY play: url: https://example.com/audio/hold-music.mp3 - type: SAY say: text: Thank you for waiting. format: SSML voiceName: Emma serviceId: title: Service ID type: string format: uuid description: The ID of the service used. examples: - 6e124178-c29d-46a5-943c-5c2ae544aade messageEvents: type: object additionalProperties: false title: Message Events description: 'SVAML commands to execute based on message playback outcomes. ' properties: onFinish: description: 'Commands to execute when all messages in the sequence have finished playing. ' $ref: '#/components/schemas/svamlCommands' menuPrompt: type: object additionalProperties: false title: Menu Prompt description: Prompt configuration for menu playback, including prompt messages and barge-in behavior. required: - messages properties: allowBargeIn: type: boolean description: 'Controls whether input can interrupt prompt playback. When enabled, playback stops as soon as input is detected and the input is evaluated immediately if matching conditions are met. When disabled, input is still collected during playback and evaluated after playback finishes.' default: true messages: $ref: '#/components/schemas/typesOfMessages' recordingDestination: title: Recording Destination type: string description: Select target service to receive recorded and transcribed files enum: - AWS - GCP - AZURE x-enumDescriptions: AWS: Store recordings in Amazon Web Services S3 bucket. Use `s3` as schema for the URL. GCP: Store recordings in Google Cloud Platform Storage. Use `gs` as schema for the URL. AZURE: Store recordings in Microsoft Azure Blob Storage. Use `azure` as schema for the URL. default: AWS examples: - AWS webhookFallbackUrl: title: Webhook Fallback URL type: string format: uri description: 'Fallback webhook URL used when the primary webhook URL fails. A failed request is re-sent to this URL immediately. After repeated consecutive failures of the primary URL, requests are sent only here until the primary URL recovers. See *Timeouts and failover* in the **Webhooks** section for the authoritative algorithm.' examples: - https://example.com/fallback recordingEvents: type: object additionalProperties: false title: Recording Events description: 'SVAML commands to execute based on recording lifecycle outcomes. ' properties: onFinish: description: 'Commands to execute when the recording is successfully stopped. Note that this does not mean that the file is delivered to the configured destination yet. ' $ref: '#/components/schemas/svamlCommands' onFailure: description: 'Commands to execute if the recording fails to start. If omitted, failures are silently ignored and the call flow continues. ' $ref: '#/components/schemas/svamlCommands' serviceListResponse: type: object additionalProperties: false description: List of available voice services in the project. required: - services - links - meta title: Service List Response properties: services: type: array items: $ref: '#/components/schemas/serviceShortResponse' links: $ref: '#/components/schemas/paginationLinks' meta: $ref: '#/components/schemas/paginationMeta' gotoMenu: type: object additionalProperties: false title: Goto Menu description: 'Switches execution to another menu within the current menu context. The menu name must be a menu defined in the `menu` command. This is a blocking command — execution waits for the menu to complete before proceeding to the next command. **Important**: this command can only be called within a menu execution context.' required: - command - menuName properties: command: type: string const: gotoMenu description: Switch execution to another menu within the current menu context. menuName: type: string description: Name of the target menu to execute next. Must match a key in menus. minLength: 1 maxLength: 16 svamlInput: type: object additionalProperties: false title: SVAML Input description: A SVAML v2 (Sinch Voice Application Markup Language) document describing a call flow. Contains the ordered list of commands to execute, an optional call name, and optional event handlers. required: - commands properties: commands: allOf: - $ref: '#/components/schemas/svamlCommands' minItems: 1 description: The ordered list of SVAML commands to execute. Contains at least one command. callName: type: string minLength: 1 maxLength: 32 pattern: ^\S+$ example: incoming description: Name of the call. events: type: object description: Commands to execute on specific events for this call. properties: onHangup: $ref: '#/components/schemas/svamlCommands' description: SVAML commands to be executed when the call is hung up. messageSay: type: object title: Say Message description: A text-to-speech (TTS) message item. The platform synthesizes the provided text into speech and plays it on the call. additionalProperties: false required: - type - say properties: type: type: string const: SAY description: Text-to-speech message to be played during the call. say: type: object additionalProperties: false title: Say required: - text - voiceName properties: text: type: string description: 'The text to be synthesized into speech. If `format` is `TEXT` (default), provide plain text. If `format` is `SSML`, provide a valid SSML document (for example, `...`).' maxLength: 600 example: Hello world format: type: string description: Format of the message enum: - TEXT - SSML x-enumDescriptions: TEXT: Plain text format for the message. SSML: Speech Synthesis Markup Language format for advanced text-to-speech control. default: TEXT voiceName: description: The name of the voice to use for text-to-speech synthesis. $ref: '#/components/schemas/voiceName' examples: - type: SAY say: text: Hello, this is a test message voiceName: Emma - type: SAY say: text: Hello, this is a test message format: SSML voiceName: Brian serviceIsDefault: title: Service Is Default type: boolean description: 'Indicates whether this service is set as the default for the project. The default service is used when no specific service is specified in API requests. Note: when updating a service, this property cannot be set to false. In such case, a BadRequest will be returned by the API.' 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' menu: type: object additionalProperties: false title: Run menus description: 'Defines a set of named menus and executes them starting from startMenu. This is a blocking command — execution waits for the menu to complete before proceeding to the next command. Each menu item configures prompts, input collection, timeout handling, and repeat behavior.' required: - command - startMenu - menus properties: command: type: string const: menu description: Executes menu-based input collection using the configured menu definitions. startMenu: type: string minLength: 1 maxLength: 16 description: Name of the menu to execute first. Must match a key in menus. menus: type: object propertyNames: type: string maxLength: 16 description: Map of menu definitions keyed by menu name. additionalProperties: $ref: '#/components/schemas/menuItem' examples: - command: menu startMenu: main menus: main: prompt: allowBargeIn: true messages: - type: SAY say: text: Press 1 for sales or 2 for support. voiceName: Emma repeatPrompt: allowBargeIn: true messages: - type: SAY say: text: Invalid option. Press 1 for sales or 2 for support. voiceName: Emma inputTimeoutDurationSeconds: 5 repeatCount: 2 minimumInputLength: 1 maximumInputLength: 1 inputMethods: - DTMF matches: '1': - command: messages messages: - type: SAY say: text: Connecting to sales. voiceName: Emma - command: dial callName: sales to: type: PHONE phone: number: '+15551234567' '2': - command: messages messages: - type: SAY say: text: Connecting to support. voiceName: Emma - command: dial callName: support to: type: PHONE phone: number: '+15557654321' onFail: - command: messages messages: - type: SAY say: text: Sorry, no valid selection was received. voiceName: Emma - command: hangup paginationLinks: type: object additionalProperties: false required: - first - last - self title: Pagination Links description: 'Pagination links for navigating through pages of results in a paginated list response. Available link properties: - `first` - Absolute URI of the first page - `last` - Absolute URI of the last page - `next` - Absolute URI of the next page (omitted if this is the last page) - `prev` - Absolute URI of the previous page (omitted if this is the first page) - `self` - Absolute URI of the current page ' properties: first: type: string format: uri description: Absolute URI of the first page. example: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls?page=1&pageSize=20 last: type: string format: uri description: Absolute URI of the last page. example: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls?page=5&pageSize=20 next: type: string format: uri description: Absolute URI of the next page (omitted if this is the last page). example: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls?page=3&pageSize=20 prev: type: string format: uri description: Absolute URI of the previous page (omitted if this is the first page). example: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls?page=1&pageSize=20 self: type: string format: uri description: Absolute URI of the current page. example: https://voice.api.sinch.com/v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls?page=2&pageSize=20 recordingFormat: title: Recording Format description: Audio format for this recording. type: string enum: - MP3 - WAV x-enumDescriptions: MP3: MPEG Audio Layer III compressed audio format. WAV: Waveform Audio File Format, uncompressed audio. default: MP3 examples: - MP3 callBehaviorsWebhook: type: object additionalProperties: false title: Call Behaviors (Webhook) description: Calls are handled dynamically by sending webhook events to the configured URL. The backend responds with SVAML commands that control the call flow in real time. required: - type - webhook properties: type: type: string const: WEBHOOK description: Calls are handled by sending webhook requests to the configured URL. webhook: $ref: '#/components/schemas/webhookConfiguration' examples: - type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback phoneNumber: title: Phone Number type: string pattern: ^\+[1-9]\d{1,14}$ minLength: 3 maxLength: 16 description: E.164 Phone number examples: - '+4673522488' from: description: Call origin - Phone Number or SIP endpoint oneOf: - $ref: '#/components/schemas/phone' - $ref: '#/components/schemas/sipFrom' discriminator: propertyName: type mapping: PHONE: '#/components/schemas/phone' SIP: '#/components/schemas/sipFrom' callBehaviorsNone: type: object additionalProperties: false title: Call Behaviors (None) description: No call behavior is configured for the service. Incoming calls will not be handled and outbound calls can still be initiated via the API. required: - type properties: type: type: string const: NONE description: No call behavior is configured. examples: - type: NONE tooManyRequests: title: Too Many Requests description: Returned when the request rate limit has been exceeded. Retry after the duration indicated in the `Retry-After` response header. allOf: - $ref: '#/components/schemas/problemDetails' - type: object properties: type: const: https://api.sinch.com/docs/errors/too-many-requests title: const: Too Many Requests detail: example: Rate limit exceeded. Please slow down your request rate and retry after the indicated period. instance: example: /v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls webhookConfiguration: type: object additionalProperties: false title: Webhook configuration description: Webhook configuration required: - url properties: url: type: string description: Webhook URL format: uri fallbackUrl: $ref: '#/components/schemas/webhookFallbackUrl' examples: - url: https://example.com/webhook fallbackUrl: https://example.com/fallback transcriptionOptions: title: Transcription Options description: Configuration for automatic speech-to-text transcription of the recording. type: object additionalProperties: false required: - isEnabled properties: isEnabled: type: boolean description: If true, the recording will be transcribed to text. example: true locale: type: string description: Language code in BCP-47 format. default: en-US example: en-US 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 updateService: title: Update Service description: Request body for updating an existing voice service. Only the fields provided will be modified; omitted fields remain unchanged. type: object additionalProperties: false properties: name: type: string minLength: 1 maxLength: 64 pattern: ^\S+(\s+\S+)*$ description: Voice service name. No leading or trailing whitespaces allowed. example: My Voice Service description: type: string maxLength: 255 pattern: ^\S+(\s+\S+)*$ description: Description of the service example: This is a description of my voice service isDefault: $ref: '#/components/schemas/serviceIsDefault' callBehavior: $ref: '#/components/schemas/callBehaviors' examples: - description: Updated service description callBehavior: type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback sipFrom: type: object additionalProperties: false title: SIP Origin required: - type - sip properties: type: type: string const: SIP description: Indicates the call originated from a SIP (Session Initiation Protocol) endpoint. sip: type: object additionalProperties: false required: - endpoint properties: endpoint: type: string description: SIP URI of the originating endpoint. Both `sip:` (unencrypted) and `sips:` (TLS-encrypted) schemes are supported. format: uri pattern: '^sips?:' maxLength: 192 displayName: type: string description: Display name presented to the called party as the caller identity. Transmitted as the display name part of the SIP `From` header (for example, `Alice `). maxLength: 64 example: Alice examples: - type: SIP sip: endpoint: sip:user@example.com displayName: Alice to: title: To description: Call destination - Phone Number or Stream URI oneOf: - $ref: '#/components/schemas/phone' - $ref: '#/components/schemas/sip' - $ref: '#/components/schemas/stream' - $ref: '#/components/schemas/voiceRelay' discriminator: propertyName: type mapping: PHONE: '#/components/schemas/phone' SIP: '#/components/schemas/sip' STREAM: '#/components/schemas/stream' VOICE_RELAY: '#/components/schemas/voiceRelay' notFound: title: Not Found description: Returned when the requested resource does not exist. allOf: - $ref: '#/components/schemas/problemDetails' - type: object properties: type: const: https://api.sinch.com/docs/errors/not-found title: const: Not Found detail: example: The requested resource was not found. instance: example: /v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01ARZ3NDEKTSV4RRFFQ69G5FAA callBehaviorsStatic: type: object additionalProperties: false title: Call Behaviors (Static) description: Calls are handled using a predefined static SVAML script. The commands are executed for every call on this service, without any backend involvement. required: - type - static properties: type: type: string const: STATIC description: Calls are handled using predefined static SVAML commands. static: $ref: '#/components/schemas/svamlInput' examples: - type: STATIC static: callName: incoming commands: - command: pause durationMilliseconds: 5000 - command: hangup stream: type: object additionalProperties: false title: Stream description: Routes the call to a WebSocket stream endpoint for real-time audio processing. required: - type - stream properties: type: type: string const: STREAM description: Routes the call to a WebSocket stream endpoint for real-time audio processing. stream: type: object additionalProperties: false required: - endpoint properties: endpoint: type: string description: WebSocket endpoint that will accept the incoming connection for real-time audio streaming. Must be a valid WebSocket URL using either `ws://` or `wss://` (recommended). The URL must be reachable from the public internet and capable of handling the negotiated stream protocol. example: wss://example.com streamOptions: type: object additionalProperties: false properties: version: type: integer description: Defines the version of the stream protocol. default: 1 example: 1 codec: type: string const: PCM description: 'Defines the audio codec/format used for the stream audio payload. Currently, only `PCM` is supported (uncompressed raw audio). Use `sampleRate` to configure the sampling rate for the stream.' sampleRate: type: integer description: "Defines the audio sampling rate (Hz) used for the stream.\n\nFor calls that traverse the PSTN, audio is typically sampled at 8 kHz, so using a higher value will not improve perceived quality. \nHigher sample rates can be useful for non-PSTN scenarios (for example, SIP/streaming paths), but will increase bandwidth usage and processing load." enum: - 8000 - 16000 - 24000 - 44100 - 48000 - 96000 x-enumDescriptions: '8000': 8 kHz (standard for PSTN calls) '16000': 16 kHz (wideband audio) '24000': 24 kHz (super-wideband audio) '44100': 44.1 kHz (CD quality audio) '48000': 48 kHz (professional audio quality) '96000': 96 kHz (high-resolution audio) default: 8000 example: 16000 callHeaders: $ref: '#/components/schemas/callHeaders' examples: - endpoint: wss://example.com streamOptions: version: 1 codec: PCM sampleRate: 8000 callHeaders: - key: my-key value: my-key-value examples: - type: STREAM stream: endpoint: wss://example.com streamOptions: version: 1 codec: PCM sampleRate: 16000 callHeaders: - key: my-key value: my-key-value svamlCommands: type: array title: SVAML Commands description: 'An ordered list of SVAML v2 (Sinch Voice Application Markup Language) commands that describe a call flow. Commands are executed sequentially in the order they are defined. **Blocking vs. non-blocking:** Some commands block execution until they complete (`pause`, `webhook`, `menu`, `gotoMenu`), while others return immediately and run in parallel (`dial`, `messages`, `amd`, `answer`, `hangup`, `startRecording`, `stopRecording`, `bridgeCall`, `stopMessages`). Each command''s description specifies its behavior. **Nesting scope:** Commands that appear inside event handlers (e.g., `dial.events.onAnswer`, `messages.events.onFinish`) form independent sequences and execute in their own context — they are not continuations of the parent sequence.' items: $ref: '#/components/schemas/svamlCommand' badRequest: title: Bad Request description: Returned when the request is malformed or contains invalid parameters. allOf: - $ref: '#/components/schemas/problemDetails' - type: object properties: type: const: https://api.sinch.com/docs/errors/bad-request title: const: Bad Request detail: example: The request body is invalid or malformed. instance: example: /v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01ARZ3NDEKTSV4RRFFQ69G5FAA amd: type: object additionalProperties: false title: Answering Machine Detection description: 'AMD (Answering Machine Detection) command to detect what answered the call. Possible outcomes are: human, machine, beep, or unknown. This is a non-blocking command — the next command in the sequence executes immediately while detection runs in parallel. Results are delivered via the `events` property.' required: - command properties: command: type: string const: amd description: Command to run Answering Machine Detection on the call events: $ref: '#/components/schemas/amdEvents' examples: - command: amd events: onHuman: - command: pause durationMilliseconds: 1000 - command: bridgeCall bridgeName: my-bridge onBeep: - command: messages messagesName: my-amd-messages messages: - type: SAY say: text: Hello, this is a test message voiceName: Emma serviceShortResponse: type: object additionalProperties: false description: Abbreviated representation of a voice service, returned in list responses. required: - serviceId - projectId - createTime - name - isDefault title: Service Information properties: serviceId: $ref: '#/components/schemas/serviceId' projectId: $ref: '#/components/schemas/projectId' createTime: type: string readOnly: true format: date-time description: Timestamp (RFC 3339) indicating when the service was created. example: '2025-01-01 00:00:00+00:00' updateTime: type: string format: date-time readOnly: true description: 'Timestamp (RFC 3339) indicating when the service was last updated. Omitted if no updates were performed on this service.' example: '2025-01-01 00:00:00+00:00' name: type: string minLength: 1 maxLength: 64 readOnly: true description: Name of the service example: My Voice Service description: type: string readOnly: true description: Description of the service example: My Voice Service Description isDefault: type: boolean readOnly: true description: 'Indicates whether this service is set as the default for the project. The default service is used when no specific service is specified in API requests.' example: true menuItem: type: object additionalProperties: false title: Menu Item description: 'Defines a single menu step, including prompts, input handling rules, input-to-command matches, and failure handling. Each collected input is matched against the values in the `matches` property. If no match succeeds, the `onFail` commands are executed. If neither `matches` nor `onFail` is defined and the service call behavior is set to `WEBHOOK`, a webhook request is sent including the collected input.' properties: prompt: $ref: '#/components/schemas/menuPrompt' description: 'Prompt played when this menu starts. This prompt is also used as the repeat prompt when repeatPrompt is not defined for the menu.' repeatPrompt: $ref: '#/components/schemas/menuPrompt' description: 'Prompt played when the menu is repeated. Repeats occur when input times out or when the provided input does not match any menu match item.' inputTimeoutDurationSeconds: type: integer description: Maximum number of seconds to wait for user input before the input attempt times out. minimum: 1 maximum: 60 default: 5 example: 10 repeatCount: type: integer description: 'Maximum number of times the menu is repeated. A repeat occurs when input times out or when the provided input does not match any menu match item.' minimum: 0 maximum: 10 default: 2 example: 3 minimumInputLength: type: integer description: Minimum number of input characters required before the menu evaluates the collected input. minimum: 1 maximum: 100 default: 1 example: 3 maximumInputLength: type: integer description: Maximum number of input characters that triggers the menu to evaluate the collected input. minimum: 1 maximum: 100 default: 1 example: 10 terminatingSequence: type: string pattern: ^[0-9*#]+$ description: 'Character sequence that signals the end of input and triggers immediate evaluation. Useful when variable-length input is allowed and shorter valid options should be submitted without waiting for timeout or maximum length. The terminating sequence value is included in the evaluated input.' maxLength: 10 inputMethods: type: array description: Input methods accepted for this menu when collecting user input. default: - DTMF items: type: string enum: - DTMF x-enumDescriptions: DTMF: Collect input from keypad tones (Dual-Tone Multi-Frequency). matches: type: object description: 'Items matched against the collected input. Maximum number of allowed match expressions is 50. Defined as a dictionary where each property name is a literal or a regular expression string. Values are evaluated in the order they are defined.' maxProperties: 50 propertyNames: type: string minLength: 1 maxLength: 256 description: 'A regular expression or literal string to match against the collected user input. Must not be empty. Property keys are evaluated sequentially in the order defined. The first key that matches the input will trigger its associated SVAML commands. **Note**: Use `\\*` to match the DTMF star tone (*).' additionalProperties: $ref: '#/components/schemas/svamlCommands' onFail: $ref: '#/components/schemas/svamlCommands' description: 'SVAML commands executed when the menu fails to collect a matching input. This handler runs after the repeat limit is reached without any input matching a menu match item.' voiceName: type: string description: Sinch Voice Name to use for text-to-speech. Each voice is tied to a specific language variant, gender, and pricing model (Free/Standard or Paid/Generative). See [https://developers.sinch.com/docs/voice-2.0/api-reference/text-to-speech-voices#text-to-speech-voices](https://developers.sinch.com/docs/voice-2.0/api-reference/text-to-speech-voices#currently-available-languages) for details example: Emma enum: - Aarav - Aarav_2 - Aarohi - Aarti - Aarti_2 - Aarti_3 - Aashi - Abbi - Abdullah - Abeo - Abril - Achara - Ada - Ada_2 - Adam - Adam_2 - Aditi - Adri - Adriano - Agnieszka - Ahmet - Aigul - Ainhoa - Alain - Alba - Aled - Aleksandar - Alessio - Alessio_2 - Alex - Alfie - Ali - Alina - Alloy - Alloy_2 - Alonso - Alvaro - Amal - Amala - Amanda - Amany - Amber - Ambre - Ameha - Amina - Amy - Amy_2 - Amy_3 - Ana - Anahit - Ananya - Ananya_2 - Anbu - Ander - Andre - Andre_2 - Andrea - Andres - Andrew - Andrew_2 - Andrew_3 - Andrew_4 - Angelo - Anila - Annette - Antoine - Antonin - Antonio - Anu - Aoi - Arabella - Ardi - Aria - Aria_2 - Ariane - Arjun - Arjun_2 - Arjun_3 - Arlet - Arnau - Arnaud - Arthur - Arya - Arya_2 - Asad - Ashley - Asilia - Astrid - Athina - Ava - Ava_2 - Ava_3 - Avri - Ayanda - Ayanda_2 - Aysha - Babek - Banu - Bashkar - Bassel - Bataa - Beatrice - Beatriz - Belkys - Bella - Benigno - Bernd - Bianca - Bianca_2 - Bianca_3 - Blessica - BongJin - Borislav - Brandon - Brandon_2 - Bree - Brenda - Brian - Brian_2 - Brian_3 - Brigitte - Bryan - Bryan_2 - Bryan_3 - Burcu - Calimero - Camila - Camilla - Camilla_2 - Camilla_3 - Candela - Carla - Carlos - Carlota - Carly - Carmen - Cataldo - Catalina - Cecilio - Celeste - Celine - Celine_2 - Chantal - Chanthavong - Charline - Chilemba - Christel - Christoph - Christopher - Christopher_2 - Clara - Claude - Colette - Colm - Conchita - Connor - Conrad - Cora - Cora_2 - Coralie - Cristiano - Daichi - Dalia - Dalia_2 - Daniel - Daniel_2 - Danielle - Danielle_2 - Dario - Dariya - Darren - Daudi - Daulet - Davis - Davis_2 - Davis_3 - Dena - Denise - Derek - Dhwani - Diego - Dilara - Dimas - Dmitry - Donato - Dora - Duarte - Duncan - Dustin - Echo - Eka - Elena - Elias - Elimu - Elin - Elizabeth - Elke - Elliot - Eloise - Elsa - Elsie - Elvira - Elza - Emel - Emil - Emilio - Emily - Emma - Emma_2 - Emma_3 - Emma_4 - Enric - Enrique - Eric - Estrella - Ethan - Evelyn - Everita - Ewa - Ewa_2 - Ezinne - Fabio - Fabiola - Fable - Fabrice - Fahed - Farid - Fatima - Federico - Fenna - Fernanda - Fiamma - Filiz - Finn - Florian - Florian_2 - Florin - Francisca - Freya - Gabrielle - Gabrielle_2 - Gabrijela - Gadis - Gagan - Gemma - Gemma_2 - Geraint - Gerard - Gerardo - Gianni - Giorgi - Giorgio - Giovanna - Gisela - Giuseppe - Giuseppe_2 - Gonzalo - GookMin - Goran - Grace - Gregory - Gudrun - Gul - GulNawaz - Gunnar - Guy - Gwyneth - Hala - Hamdan - Hamed - Hannah - Hannah_2 - Hans - Harri - Hayk - Hedi - Hemkala - Henri - Hila - Hillevi - HiuGaai - Hiujin - HiuMaan - HoaiMy - Hollie - HsiaoChen - HsiaoYu - Humberto - Hyunsu - Hyunsu_2 - Hyunsu_3 - Ida - Ilir - Iman - Imani - Imelda - Ines - Ines_2 - Ingrid - InJoon - Irene - Irma - Isabella - Isabella_2 - Isabella_3 - Isabelle - Isabelle_2 - Iselin - Isidora - Ismael - Ivy - Ivy_2 - Jacek - Jacob - Jacqueline - Jajang - Jamal - James - Jan - Jane - Jane_2 - Jann - Jasmine - Jasmine_2 - Jason - Javier - Jean - Jenny - Jenny_2 - Jenny_3 - Jeppe - Jerome - Jihye - JiMin - Jimmie - Jitka - Joana - Joanna - Joanna_2 - Joanna_3 - Joanne - Joey - Joey_2 - Jonas - Jorge - Jorge_2 - Joseph - Josephine - Juan - Julio - Justin - Justin_2 - Kai - Kajal - Kajal_2 - Kalina - Kani - Karina - Karl - Karla - Kasper - Katja - Kavya - Kavya_2 - Kazuha - Keita - Ken - Kendra - Kendra_2 - Keomany - Kert - Kevin - Killian - Kim - Kimberly - Kimberly_2 - Klarissa - Klaus - Kumar - Kunal - Kunal_2 - Laia - Laila - Laith - Larissa - Latifa - Laura - Laura_2 - Layla - Lea - Lea_2 - Lea_3 - Leah - Leila - Leni - Lennart - Leonas - Leticia - Lewis - Lia - Liam - Lian - Lian_2 - Libby - Liberto - Lisa - Lisa_2 - Lisandro - Liv - Livia - Livia_2 - Lola - Lorena - Lorenzio - Lorenzo - Lotte - Louisa - Lucia - Lucia_2 - Lucia_3 - Luciano - Lucien - Luis - Lukas - Luke - Luna - Luna_2 - Lupe - Lupe_2 - Lupe_3 - Maarten - Macerio - Macerio_2 - Madhur - Madina - Mads - Maisie - Maja - Manohar - Manuel - Manuela - Marcello - Marcelo - Marek - Margarita - Maria - Marija - Marina - Mario - Marlene - Marta - Maryam - Masaru - Mateo - Mathieu - Matthew - Matthew_2 - Matthew_3 - Mattias - Maurice - Maxim - Maya - Mayu - Mekdes - Mia - Mia_2 - Mia_3 - Michelle - Midhun - Miguel - Mitchell - Mizuki - Moaz - Mohan - Molly - Monica - Mouna - Muuse - Nabanita - Naja - NamMinh - Nanami - Nanami_2 - Nancy - Nancy_2 - Naoki - Natasha - Neerja - Neerja_2 - Neil - Nestoras - Nia - Niamh - Niamh_2 - Nicholas - Nicholas_2 - Nicolau - Nicole - Nil - Nilar - Nils - Niranjan - Niwat - Noah - Noemi - Noora - Noura - Nova - Nova_2 - Nuria - Ojas - Ola - Ola_2 - Oliver - Olivia - Ollie - Ollie_2 - Omar - Ona - Onyx - Orla - Osman - Ostap - Pallavi - Palmira - Paloma - Paola - Pedro - Pedro_2 - Pelayo - Penelope - Pernille - Petra - Phoebe - Phoebe_2 - Pierina - Piseth - Polina - Prabhat - Prabhat_2 - Pradeep - Premwadee - Priyom - Rafiki - Ralf - Rami - Ramona - Rana - Raquel - Raveena - Reem - Rehaan - Rehaan_2 - Rehema - Remi - Remi_2 - Remy - Remy_2 - Renata - Ricardo - Rinaldo - Roberto - Rodrigo - Roger - Roi - Rok - Rosa - Ruben - Russell - Ruth - Ruth_2 - Ryan - Ryan_2 - Sabela - Sabrina - Sabrina_2 - Sagar - Saleh - Salli - Salli_2 - Salli_3 - Salma - Salman - Salome - Sam - Sameera - Samuel - Sana - Sapna - Sara - Saranya - Sardor - Saul - Sebastian - Selma - SeoHyeon - Seoyeon - Seoyeon_2 - Seoyeon_3 - Seraphina - Seraphina_2 - Serena - Serena_2 - Sergio - Sergio_2 - Shakir - Shimmer - Shiori - Shruti - Siqiniq - Siqiniq_2 - Siti - Sobhana - Soffie - Sofia - Sofie - Sonia - SoonBok - Sophie - Sophie_2 - Srecko - Sreymom - Steffan - Steffan_2 - Steffan_3 - Stephen - Stephen_2 - Subhasini - Sukant - SunHi - SunHi_2 - Surya - Suvi - Svetlana - Swara - Sylvie - Sylvie_2 - Taim - Takumi - Takumi_2 - Tamas - Tania - Tanishaa - Tanja - Taqqiq - Taqqiq_2 - Tatyana - Teo - Teresa - Thalita - Thalita_2 - Thalita_3 - Thando - Themba - Thiago - Thierry - Thierry_2 - Thiha - Thilini - Thomas - Tiana - Tiffany - Tim - Tina - Tomas - Tomoko - Tony - Triana - Tristan - Tristan_ES - Tristan_ES_2 - Tuti - Tyler - Ubax - Uzma - Vaani - Valentina - Valerio - Valluvar - Venba - Vera - Vesna - Vicki - Vicki_2 - Vicki_3 - Victor - Viktoria - Vitoria - Vitoria_2 - Vivienne - Vivienne_2 - Vlasta - WanLung - Wayne - Willem - William - William_2 - Xiaochen - Xiaochen_2 - Xiaochen_3 - Xiaochen_4 - Xiaohan - Xiaohan_2 - Xiaomeng - XiaoMin - Xiaomo - Xiaoqiu - Xiaorou - Xiaorui - Xiaoshuang - Xiaoshuang_2 - Xiaoshuang_3 - Xiaotong - Xiaoxiao - Xiaoxiao_2 - Xiaoxiao_3 - Xiaoxiao_4 - Xiaoxiao_5 - Xiaoyan - Xiaoyi - Xiaoyi_2 - Xiaoyou - Xiaoyou_2 - Xiaoyou_3 - Xiaoyu - Xiaoyu_2 - Xiaozhen - Ximena - Ximena_ES - Ximena_ES_2 - Ximena_ES_3 - Yago - Yan - Yara - Yashica - Yasmin - Yesui - Yolanda - YuJin - Yundeng - Yunfan - Yunfan_2 - Yunfeng - Yunhan - Yunhao - YunJhe - Yunjian - Yunjie - YunSong - Yunxi - Yunxi_2 - Yunxia - Yunxia_2 - Yunxiang - Yunxiao - Yunxiao_2 - Yunyang - Yunye - Yunye_2 - Yunyi - Yunyi_2 - Yunze - Yunzhe - Yves - Yvette - Zariyah - Zayd - Zeina - Zhiyu - Zhiyu_2 - Zofia - Zuri x-enumDescriptions: Aarav: Male voice for Hindi (India) (Free voice) Aarav_2: Male voice for English (India) (Free voice) Aarohi: Female voice for Marathi (India) (Free voice) Aarti: Female voice for Hindi (India) (Free voice) Aarti_2: Female voice for English (India) (Free voice) Aarti_3: Female voice for English (India) (Free voice) Aashi: Female voice for English (India) (Free voice) Abbi: Female voice for English (United Kingdom) (Free voice) Abdullah: Male voice for Arabic (Oman) (Free voice) Abeo: Male voice for English (Nigeria) (Free voice) Abril: Female voice for Spanish (Spain) (Free voice) Achara: Female voice for Thai (Thailand) (Free voice) Ada: Female voice for English (United Kingdom) (Free voice) Ada_2: Female voice for English (United Kingdom) (Paid voice) Adam: Male voice for English (United States) (Free voice) Adam_2: Male voice for English (United States) (Paid voice) Aditi: Female voice for English (India) (Free voice) Adri: Female voice for Afrikaans (South Africa) (Free voice) Adriano: Male voice for Italian (Italy) (Free voice) Agnieszka: Female voice for Polish (Poland) (Free voice) Ahmet: Male voice for Turkish (Türkiye) (Free voice) Aigul: Female voice for Kazakh (Kazakhstan) (Free voice) Ainhoa: Female voice for Basque (Free voice) Alain: Male voice for French (France) (Free voice) Alba: Female voice for Catalan (Free voice) Aled: Male voice for Welsh (United Kingdom) (Free voice) Aleksandar: Male voice for Macedonian (North Macedonia) (Free voice) Alessio: Male voice for Italian (Italy) (Free voice) Alessio_2: Male voice for Italian (Italy) (Paid voice) Alex: Male voice for Spanish (Peru) (Free voice) Alfie: Male voice for English (United Kingdom) (Free voice) Ali: Male voice for Arabic (Bahrain) (Free voice) Alina: Female voice for Romanian (Romania) (Free voice) Alloy: Male voice for English (United States) (Free voice) Alloy_2: Male voice for English (United States) (Paid voice) Alonso: Male voice for Spanish (United States) (Free voice) Alvaro: Male voice for Spanish (Spain) (Free voice) Amal: Female voice for Arabic (Qatar) (Free voice) Amala: Female voice for German (Germany) (Free voice) Amanda: Female voice for English (United States) (Free voice) Amany: Female voice for Arabic (Syria) (Free voice) Amber: Female voice for English (United States) (Free voice) Ambre: Female voice for French (France) (Paid voice) Ameha: Male voice for Amharic (Ethiopia) (Free voice) Amina: Female voice for Arabic (Algeria) (Free voice) Amy: Female voice for English (United Kingdom) (Free voice) Amy_2: Female voice for English (United Kingdom) (Free voice) Amy_3: Female voice for English (United Kingdom) (Paid voice) Ana: Female voice for English (United States) (Free voice) Anahit: Female voice for Armenian (Armenia) (Free voice) Ananya: Female voice for Hindi (India) (Free voice) Ananya_2: Female voice for English (India) (Free voice) Anbu: Male voice for Tamil (Singapore) (Free voice) Ander: Male voice for Basque (Free voice) Andre: Male voice for Spanish (Mexico) (Free voice) Andre_2: Male voice for Spanish (Mexico) (Paid voice) Andrea: Female voice for Spanish (Ecuador) (Free voice) Andres: Male voice for Spanish (Guatemala) (Free voice) Andrew: Male voice for English (United States) (Free voice) Andrew_2: Male voice for English (United States) (Free voice) Andrew_3: Male voice for English (United States) (Paid voice) Andrew_4: Male voice for English (United States) (Paid voice) Angelo: Male voice for Filipino (Philippines) (Free voice) Anila: Female voice for Albanian (Albania) (Free voice) Annette: Female voice for English (Australia) (Free voice) Antoine: Male voice for French (Canada) (Free voice) Antonin: Male voice for Czech (Czechia) (Free voice) Antonio: Male voice for Portuguese (Brazil) (Free voice) Anu: Female voice for Estonian (Estonia) (Free voice) Aoi: Female voice for Japanese (Japan) (Free voice) Arabella: Female voice for Spanish (Spain) (Free voice) Ardi: Male voice for Indonesian (Indonesia) (Free voice) Aria: Female voice for English (United States) (Free voice) Aria_2: Female voice for English (United States) (Paid voice) Ariane: Female voice for French (Switzerland) (Free voice) Arjun: Male voice for English (India) (Free voice) Arjun_2: Male voice for English (India) (Free voice) Arjun_3: Male voice for Hindi (India) (Free voice) Arlet: Female voice for Catalan (Free voice) Arnau: Male voice for Spanish (Spain) (Free voice) Arnaud: Male voice for Dutch (Belgium) (Free voice) Arthur: Male voice for English (United Kingdom) (Free voice) Arya: Female voice for English (New Zealand) (Free voice) Arya_2: Female voice for English (New Zealand) (Paid voice) Asad: Male voice for Urdu (Pakistan) (Free voice) Ashley: Female voice for English (United States) (Free voice) Asilia: Female voice for English (Kenya) (Free voice) Astrid: Female voice for Swedish (Sweden) (Free voice) Athina: Female voice for Greek (Greece) (Free voice) Ava: Female voice for English (United States) (Free voice) Ava_2: Female voice for English (United States) (Free voice) Ava_3: Female voice for English (United States) (Paid voice) Avri: Male voice for Hebrew (Israel) (Free voice) Ayanda: Female voice for English (South Africa) (Free voice) Ayanda_2: Female voice for English (South Africa) (Paid voice) Aysha: Female voice for Arabic (Oman) (Free voice) Babek: Male voice for Azerbaijani (Latin, Azerbaijan) (Free voice) Banu: Female voice for Azerbaijani (Latin, Azerbaijan) (Free voice) Bashkar: Male voice for Bengali (India) (Free voice) Bassel: Male voice for Arabic (Iraq) (Free voice) Bataa: Male voice for Mongolian (Mongolia) (Free voice) Beatrice: Female voice for Italian (Italy) (Paid voice) Beatriz: Female voice for Spanish (Mexico) (Free voice) Belkys: Female voice for Spanish (Cuba) (Free voice) Bella: Female voice for English (United Kingdom) (Free voice) Benigno: Male voice for Italian (Italy) (Free voice) Bernd: Male voice for German (Germany) (Free voice) Bianca: Female voice for Italian (Italy) (Free voice) Bianca_2: Female voice for Italian (Italy) (Free voice) Bianca_3: Female voice for Italian (Italy) (Paid voice) Blessica: Female voice for Filipino (Philippines) (Free voice) BongJin: Male voice for Korean (Korea) (Free voice) Borislav: Male voice for Bulgarian (Bulgaria) (Free voice) Brandon: Male voice for English (United States) (Free voice) Brandon_2: Male voice for English (United States) (Free voice) Bree: Female voice for English (United States) (Paid voice) Brenda: Female voice for Portuguese (Brazil) (Free voice) Brian: Male voice for English (United States) (Free voice) Brian_2: Male voice for English (United States) (Free voice) Brian_3: Male voice for English (United States) (Paid voice) Brigitte: Female voice for French (France) (Free voice) Bryan: Male voice for English (United Kingdom) (Free voice) Bryan_2: Male voice for English (United Kingdom) (Free voice) Bryan_3: Male voice for English (United Kingdom) (Paid voice) Burcu: Female voice for Turkish (Türkiye) (Free voice) Calimero: Male voice for Italian (Italy) (Free voice) Camila: Female voice for Spanish (Peru) (Free voice) Camilla: Female voice for Portuguese (Brazil) (Free voice) Camilla_2: Female voice for Portuguese (Brazil) (Free voice) Camilla_3: Female voice for Portuguese (Brazil) (Paid voice) Candela: Female voice for Spanish (Mexico) (Free voice) Carla: Female voice for Italian (Italy) (Free voice) Carlos: Male voice for Spanish (Honduras) (Free voice) Carlota: Female voice for Spanish (Mexico) (Free voice) Carly: Female voice for English (Australia) (Free voice) Carmen: Female voice for Romanian (Romania) (Free voice) Cataldo: Male voice for Italian (Italy) (Free voice) Catalina: Female voice for Spanish (Chile) (Free voice) Cecilio: Male voice for Spanish (Mexico) (Free voice) Celeste: Female voice for French (France) (Free voice) Celine: Female voice for French (France) (Free voice) Celine_2: Female voice for French (France) (Paid voice) Chantal: Female voice for French (Canada) (Free voice) Chanthavong: Male voice for Lao (Laos) (Free voice) Charline: Female voice for French (Belgium) (Free voice) Chilemba: Male voice for English (Kenya) (Free voice) Christel: Female voice for Danish (Denmark) (Free voice) Christoph: Male voice for German (Germany) (Free voice) Christopher: Male voice for English (United States) (Free voice) Christopher_2: Male voice for English (United States) (Free voice) Clara: Female voice for English (Canada) (Free voice) Claude: Male voice for French (France) (Free voice) Colette: Female voice for Dutch (Netherlands) (Free voice) Colm: Male voice for Irish (Ireland) (Free voice) Conchita: Female voice for Spanish (Castilian) (Free voice) Connor: Male voice for English (Ireland) (Free voice) Conrad: Male voice for German (Germany) (Free voice) Cora: Female voice for English (United States) (Free voice) Cora_2: Female voice for English (United States) (Free voice) Coralie: Female voice for French (France) (Free voice) Cristiano: Male voice for Portuguese (Brazil) (Free voice) Daichi: Male voice for Japanese (Japan) (Free voice) Dalia: Female voice for Spanish (Mexico) (Free voice) Dalia_2: Female voice for Spanish (Mexico) (Free voice) Daniel: Male voice for German (Germany) (Free voice) Daniel_2: Male voice for German (Germany) (Paid voice) Danielle: Female voice for English (United States) (Free voice) Danielle_2: Female voice for English (United States) (Paid voice) Dario: Male voice for Spanish (Spain) (Free voice) Dariya: Female voice for Russian (Russia) (Free voice) Darren: Male voice for English (Australia) (Free voice) Daudi: Male voice for Swahili (Tanzania) (Free voice) Daulet: Male voice for Kazakh (Kazakhstan) (Free voice) Davis: Male voice for English (United States) (Free voice) Davis_2: Male voice for English (United States) (Free voice) Davis_3: Male voice for English (United States) (Paid voice) Dena: Female voice for Dutch (Belgium) (Free voice) Denise: Female voice for French (France) (Free voice) Derek: Male voice for English (United States) (Free voice) Dhwani: Female voice for Gujarati (India) (Free voice) Diego: Male voice for Italian (Italy) (Free voice) Dilara: Female voice for Persian (Iran) (Free voice) Dimas: Male voice for Javanese (Latin, Indonesia) (Free voice) Dmitry: Male voice for Russian (Russia) (Free voice) Donato: Male voice for Portuguese (Brazil) (Free voice) Dora: Female voice for Icelandic (Iceland) (Free voice) Duarte: Male voice for Portuguese (Portugal) (Free voice) Duncan: Male voice for English (Australia) (Free voice) Dustin: Male voice for English (United States) (Free voice) Echo: Male voice for English (United States) (Free voice) Eka: Female voice for Georgian (Georgia) (Free voice) Elena: Female voice for Spanish (Argentina) (Free voice) Elias: Male voice for Spanish (Spain) (Free voice) Elimu: Male voice for English (Tanzania) (Free voice) Elin: Female voice for Swedish (Sweden) (Free voice) Elizabeth: Female voice for English (United States) (Free voice) Elke: Female voice for German (Germany) (Free voice) Elliot: Male voice for English (United Kingdom) (Free voice) Eloise: Female voice for French (France) (Free voice) Elsa: Female voice for Italian (Italy) (Free voice) Elsie: Female voice for English (Australia) (Free voice) Elvira: Female voice for Spanish (Spain) (Free voice) Elza: Female voice for Portuguese (Brazil) (Free voice) Emel: Female voice for Turkish (Türkiye) (Free voice) Emil: Male voice for Romanian (Romania) (Free voice) Emilio: Male voice for Spanish (Dominican Republic) (Free voice) Emily: Female voice for English (Ireland) (Free voice) Emma: Female voice for English (United States) (Free voice) Emma_2: Female voice for English (United States) (Free voice) Emma_3: Female voice for English (United States) (Paid voice) Emma_4: Female voice for English (United States) (Paid voice) Enric: Male voice for Catalan (Free voice) Enrique: Male voice for Spanish (Castilian) (Free voice) Eric: Male voice for English (United States) (Free voice) Estrella: Female voice for Spanish (Spain) (Free voice) Ethan: Male voice for English (United Kingdom) (Free voice) Evelyn: Female voice for English (United States) (Free voice) Everita: Female voice for Latvian (Latvia) (Free voice) Ewa: Female voice for Polish (Poland) (Free voice) Ewa_2: Female voice for Polish (Poland) (Paid voice) Ezinne: Female voice for English (Nigeria) (Free voice) Fabio: Male voice for Portuguese (Brazil) (Free voice) Fabiola: Female voice for Italian (Italy) (Free voice) Fable: Neutral voice for English (United States) (Free voice) Fabrice: Male voice for French (Switzerland) (Free voice) Fahed: Male voice for Arabic (Kuwait) (Free voice) Farid: Male voice for Persian (Iran) (Free voice) Fatima: Female voice for Arabic (United Arab Emirates) (Free voice) Federico: Male voice for Spanish (Nicaragua) (Free voice) Fenna: Female voice for Dutch (Netherlands) (Free voice) Fernanda: Female voice for Portuguese (Portugal) (Free voice) Fiamma: Female voice for Italian (Italy) (Free voice) Filiz: Female voice for Turkish (Türkiye) (Free voice) Finn: Male voice for Norwegian (Norway) (Free voice) Florian: Male voice for German (Germany) (Free voice) Florian_2: Male voice for German (Germany) (Paid voice) Florin: Male voice for French (France) (Paid voice) Francisca: Female voice for Portuguese (Brazil) (Free voice) Freya: Female voice for English (Australia) (Free voice) Gabrielle: Female voice for French (Canada) (Free voice) Gabrielle_2: Female voice for French (Canada) (Paid voice) Gabrijela: Female voice for Croatian (Croatia) (Free voice) Gadis: Female voice for Indonesian (Indonesia) (Free voice) Gagan: Male voice for Kannada (India) (Free voice) Gemma: Female voice for English (United Kingdom) (Free voice) Gemma_2: Female voice for English (United Kingdom) (Free voice) Geraint: Male voice for Welsh (United Kingdom) (Free voice) Gerard: Male voice for French (Belgium) (Free voice) Gerardo: Male voice for Spanish (Mexico) (Free voice) Gianni: Male voice for Italian (Italy) (Free voice) Giorgi: Male voice for Georgian (Georgia) (Free voice) Giorgio: Male voice for Italian (Italy) (Free voice) Giovanna: Female voice for Portuguese (Brazil) (Free voice) Gisela: Female voice for German (Germany) (Free voice) Giuseppe: Male voice for Italian (Italy) (Free voice) Giuseppe_2: Male voice for Italian (Italy) (Free voice) Gonzalo: Male voice for Spanish (Colombia) (Free voice) GookMin: Male voice for Korean (Korea) (Free voice) Goran: Male voice for Bosnian (Bosnia and Herzegovina) (Free voice) Grace: Female voice for Maltese (Malta) (Free voice) Gregory: Male voice for English (United States) (Free voice) Gudrun: Female voice for Icelandic (Iceland) (Free voice) Gul: Female voice for Urdu (India) (Free voice) GulNawaz: Male voice for Pashto (Afghanistan) (Free voice) Gunnar: Male voice for Icelandic (Iceland) (Free voice) Guy: Male voice for English (United States) (Free voice) Gwyneth: Female voice for Welsh (United Kingdom) (Free voice) Hala: Female voice for Arabic (Saudi Arabia) (Free voice) Hamdan: Male voice for Arabic (United Arab Emirates) (Free voice) Hamed: Male voice for Arabic (Saudi Arabia) (Free voice) Hannah: Female voice for German (Austria) (Free voice) Hannah_2: Female voice for German (Austria) (Paid voice) Hans: Male voice for German (Germany) (Free voice) Harri: Male voice for Finnish (Finland) (Free voice) Hayk: Male voice for Armenian (Armenia) (Free voice) Hedi: Male voice for Arabic (Tunisia) (Free voice) Hemkala: Female voice for Nepali (Nepal) (Free voice) Henri: Male voice for French (France) (Free voice) Hila: Female voice for Hebrew (Israel) (Free voice) Hillevi: Female voice for Swedish (Sweden) (Free voice) HiuGaai: Female voice for Chinese (Cantonese, Traditional) (Free voice) Hiujin: Female voice for Chinese (Cantonese) (Free voice) HiuMaan: Female voice for Chinese (Cantonese, Traditional) (Free voice) HoaiMy: Female voice for Vietnamese (Vietnam) (Free voice) Hollie: Female voice for English (United Kingdom) (Free voice) HsiaoChen: Female voice for Chinese (Taiwanese Mandarin, Traditional) (Free voice) HsiaoYu: Female voice for Chinese (Taiwanese Mandarin, Traditional) (Free voice) Humberto: Male voice for Portuguese (Brazil) (Free voice) Hyunsu: Male voice for Korean (Korea) (Free voice) Hyunsu_2: Male voice for Korean (Korea) (Free voice) Hyunsu_3: Male voice for Korean (Korea) (Paid voice) Ida: Female voice for Norwegian (Norway) (Free voice) Ilir: Male voice for Albanian (Albania) (Free voice) Iman: Female voice for Arabic (Libya) (Free voice) Imani: Female voice for English (Tanzania) (Free voice) Imelda: Female voice for Italian (Italy) (Free voice) Ines: Female voice for Portuguese (Brazil) (Free voice) Ines_2: Female voice for Portuguese (Brazil) (Free voice) Ingrid: Female voice for German (Austria) (Free voice) InJoon: Male voice for Korean (Korea) (Free voice) Irene: Female voice for Spanish (Spain) (Free voice) Irma: Female voice for Italian (Italy) (Free voice) Isabella: Female voice for Italian (Italy) (Free voice) Isabella_2: Female voice for Italian (Italy) (Free voice) Isabella_3: Female voice for Italian (Italy) (Paid voice) Isabelle: Female voice for French (Belgium) (Free voice) Isabelle_2: Female voice for French (Belgium) (Paid voice) Iselin: Female voice for Norwegian (Norway) (Free voice) Isidora: Female voice for Spanish (Spain) (Free voice) Ismael: Male voice for Arabic (Algeria) (Free voice) Ivy: Female voice for English (United States) (Free voice) Ivy_2: Female voice for English (United States) (Free voice) Jacek: Male voice for Polish (Poland) (Free voice) Jacob: Male voice for English (United States) (Free voice) Jacqueline: Female voice for French (France) (Free voice) Jajang: Male voice for Sundanese (Indonesia) (Free voice) Jamal: Male voice for Arabic (Morocco) (Free voice) James: Male voice for English (Philippines) (Free voice) Jan: Male voice for German (Switzerland) (Free voice) Jane: Female voice for English (United States) (Free voice) Jane_2: Female voice for English (United States) (Paid voice) Jann: Male voice for Polish (Poland) (Free voice) Jasmine: Female voice for English (Singapore) (Free voice) Jasmine_2: Female voice for English (Singapore) (Paid voice) Jason: Male voice for English (United States) (Free voice) Javier: Male voice for Spanish (Equatorial Guinea) (Free voice) Jean: Male voice for French (Canada) (Free voice) Jenny: Female voice for English (United States) (Free voice) Jenny_2: Female voice for English (United States) (Free voice) Jenny_3: Female voice for English (United States) (Paid voice) Jeppe: Male voice for Danish (Denmark) (Free voice) Jerome: Male voice for French (France) (Free voice) Jihye: Female voice for Korean (Korea) (Free voice) JiMin: Female voice for Korean (Korea) (Free voice) Jimmie: Male voice for English (United States) (Free voice) Jitka: Female voice for Czech (Czechia) (Free voice) Joana: Female voice for Catalan (Free voice) Joanna: Female voice for English (United States) (Free voice) Joanna_2: Female voice for English (United States) (Free voice) Joanna_3: Female voice for English (United States) (Paid voice) Joanne: Female voice for English (Australia) (Free voice) Joey: Male voice for English (United States) (Free voice) Joey_2: Male voice for English (United States) (Free voice) Jonas: Male voice for German (Austria) (Free voice) Jorge: Male voice for Spanish (Mexico) (Free voice) Jorge_2: Male voice for Spanish (Mexico) (Free voice) Joseph: Male voice for Maltese (Malta) (Free voice) Josephine: Female voice for French (France) (Free voice) Juan: Male voice for Spanish (Costa Rica) (Free voice) Julio: Male voice for Portuguese (Brazil) (Free voice) Justin: Male voice for English (United States) (Free voice) Justin_2: Male voice for English (United States) (Free voice) Kai: Male voice for English (United States) (Free voice) Kajal: Female voice for English (India) (Free voice) Kajal_2: Female voice for English (India) (Paid voice) Kalina: Female voice for Bulgarian (Bulgaria) (Free voice) Kani: Female voice for Tamil (Malaysia) (Free voice) Karina: Female voice for Spanish (Puerto Rico) (Free voice) Karl: Male voice for Icelandic (Iceland) (Free voice) Karla: Female voice for Spanish (Honduras) (Free voice) Kasper: Male voice for German (Germany) (Free voice) Katja: Female voice for German (Germany) (Free voice) Kavya: Female voice for Hindi (India) (Free voice) Kavya_2: Female voice for English (India) (Free voice) Kazuha: Female voice for Japanese (Japan) (Free voice) Keita: Male voice for Japanese (Japan) (Free voice) Ken: Male voice for English (Australia) (Free voice) Kendra: Female voice for English (United States) (Free voice) Kendra_2: Female voice for English (United States) (Free voice) Keomany: Female voice for Lao (Laos) (Free voice) Kert: Male voice for Estonian (Estonia) (Free voice) Kevin: Male voice for English (United States) (Free voice) Killian: Male voice for German (Germany) (Free voice) Kim: Female voice for English (Australia) (Free voice) Kimberly: Female voice for English (United States) (Free voice) Kimberly_2: Female voice for English (United States) (Free voice) Klarissa: Female voice for German (Germany) (Free voice) Klaus: Male voice for German (Germany) (Free voice) Kumar: Male voice for Tamil (Sri Lanka) (Free voice) Kunal: Male voice for Hindi (India) (Free voice) Kunal_2: Male voice for English (India) (Free voice) Laia: Female voice for Spanish (Spain) (Free voice) Laila: Female voice for Arabic (Bahrain) (Free voice) Laith: Male voice for Arabic (Syria) (Free voice) Larissa: Female voice for Spanish (Mexico) (Free voice) Latifa: Female voice for Pashto (Afghanistan) (Free voice) Laura: Female voice for Dutch (Netherlands) (Free voice) Laura_2: Female voice for Dutch (Netherlands) (Paid voice) Layla: Female voice for Arabic (Lebanon) (Free voice) Lea: Female voice for French (France) (Free voice) Lea_2: Female voice for French (France) (Free voice) Lea_3: Female voice for French (France) (Paid voice) Leah: Female voice for English (South Africa) (Free voice) Leila: Female voice for Portuguese (Brazil) (Free voice) Leni: Female voice for German (Switzerland) (Free voice) Lennart: Male voice for German (Germany) (Paid voice) Leonas: Male voice for Lithuanian (Lithuania) (Free voice) Leticia: Female voice for Portuguese (Brazil) (Free voice) Lewis: Male voice for English (United States) (Free voice) Lia: Female voice for Spanish (Spain) (Free voice) Liam: Male voice for English (Canada) (Free voice) Lian: Male voice for French (Canada) (Free voice) Lian_2: Male voice for French (Canada) (Paid voice) Libby: Female voice for English (United Kingdom) (Free voice) Liberto: Male voice for Spanish (Mexico) (Free voice) Lisa: Female voice for Dutch (Belgium) (Free voice) Lisa_2: Female voice for Dutch (Belgium) (Paid voice) Lisandro: Male voice for Italian (Italy) (Free voice) Liv: Female voice for Norwegian (Norway) (Free voice) Livia: Female voice for English (Australia) (Free voice) Livia_2: Female voice for English (Australia) (Paid voice) Lola: Female voice for English (United States) (Free voice) Lorena: Female voice for Spanish (El Salvador) (Free voice) Lorenzio: Male voice for Italian (Italy) (Paid voice) Lorenzo: Male voice for Spanish (Chile) (Free voice) Lotte: Female voice for Dutch (Netherlands) (Free voice) Louisa: Female voice for German (Germany) (Free voice) Lucia: Female voice for Spanish (Castilian) (Free voice) Lucia_2: Female voice for Spanish (Castilian) (Free voice) Lucia_3: Female voice for Spanish (Castilian) (Paid voice) Luciano: Male voice for Spanish (Mexico) (Free voice) Lucien: Male voice for French (France) (Free voice) Luis: Male voice for Spanish (Ecuador) (Free voice) Lukas: Male voice for Slovak (Slovakia) (Free voice) Luke: Male voice for English (South Africa) (Free voice) Luna: Female voice for English (Singapore) (Free voice) Luna_2: Female voice for English (United States) (Free voice) Lupe: Female voice for Spanish (United States) (Free voice) Lupe_2: Female voice for Spanish (United States) (Free voice) Lupe_3: Female voice for Spanish (United States) (Paid voice) Maarten: Male voice for Dutch (Netherlands) (Free voice) Macerio: Male voice for Portuguese (Brazil) (Free voice) Macerio_2: Male voice for Portuguese (Brazil) (Paid voice) Madhur: Male voice for Hindi (India) (Free voice) Madina: Female voice for Uzbek (Latin, Uzbekistan) (Free voice) Mads: Male voice for Danish (Denmark) (Free voice) Maisie: Female voice for English (United Kingdom) (Free voice) Maja: Female voice for German (Germany) (Free voice) Manohar: Male voice for Marathi (India) (Free voice) Manuel: Male voice for Spanish (Cuba) (Free voice) Manuela: Female voice for Portuguese (Brazil) (Free voice) Marcello: Male voice for Italian (Italy) (Free voice) Marcelo: Male voice for Spanish (Bolivia) (Free voice) Marek: Male voice for Polish (Poland) (Free voice) Margarita: Female voice for Spanish (Panama) (Free voice) Maria: Female voice for Spanish (Costa Rica) (Free voice) Marija: Female voice for Macedonian (North Macedonia) (Free voice) Marina: Female voice for Spanish (Mexico) (Free voice) Mario: Male voice for Spanish (Paraguay) (Free voice) Marlene: Female voice for German (Germany) (Free voice) Marta: Female voice for Spanish (Guatemala) (Free voice) Maryam: Female voice for Arabic (Yemen) (Free voice) Masaru: Male voice for Japanese (Japan) (Paid voice) Mateo: Male voice for Spanish (Uruguay) (Free voice) Mathieu: Male voice for French (France) (Free voice) Matthew: Male voice for English (United States) (Free voice) Matthew_2: Male voice for English (United States) (Free voice) Matthew_3: Male voice for English (United States) (Paid voice) Mattias: Male voice for Swedish (Sweden) (Free voice) Maurice: Male voice for French (France) (Free voice) Maxim: Male voice for Russian (Russia) (Free voice) Maya: Female voice for Polish (Poland) (Free voice) Mayu: Female voice for Japanese (Japan) (Free voice) Mekdes: Female voice for Amharic (Ethiopia) (Free voice) Mia: Female voice for Spanish (Mexico) (Free voice) Mia_2: Female voice for Spanish (Mexico) (Free voice) Mia_3: Female voice for Spanish (Mexico) (Paid voice) Michelle: Female voice for English (United States) (Free voice) Midhun: Male voice for Malayalam (India) (Free voice) Miguel: Male voice for Spanish (United States) (Free voice) Mitchell: Male voice for English (New Zealand) (Free voice) Mizuki: Female voice for Japanese (Japan) (Free voice) Moaz: Male voice for Arabic (Qatar) (Free voice) Mohan: Male voice for Telugu (India) (Free voice) Molly: Female voice for English (New Zealand) (Free voice) Monica: Female voice for English (United States) (Free voice) Mouna: Female voice for Arabic (Morocco) (Free voice) Muuse: Male voice for Somali (Somalia) (Free voice) Nabanita: Female voice for Bangla (Bangladesh) (Free voice) Naja: Female voice for Danish (Denmark) (Free voice) NamMinh: Male voice for Vietnamese (Vietnam) (Free voice) Nanami: Female voice for Japanese (Japan) (Free voice) Nanami_2: Female voice for Japanese (Japan) (Paid voice) Nancy: Female voice for English (United States) (Free voice) Nancy_2: Female voice for English (United States) (Free voice) Naoki: Male voice for Japanese (Japan) (Free voice) Natasha: Female voice for English (Australia) (Free voice) Neerja: Female voice for English (India) (Free voice) Neerja_2: Female voice for English (India) (Free voice) Neil: Male voice for English (Australia) (Free voice) Nestoras: Male voice for Greek (Greece) (Free voice) Nia: Female voice for Welsh (United Kingdom) (Free voice) Niamh: Female voice for English (Ireland) (Free voice) Niamh_2: Female voice for English (Ireland) (Paid voice) Nicholas: Male voice for Serbian (Cyrillic, Serbia) (Free voice) Nicholas_2: Male voice for Serbian (Latin, Serbia) (Free voice) Nicolau: Male voice for Portuguese (Brazil) (Free voice) Nicole: Female voice for English (Australia) (Free voice) Nil: Male voice for Spanish (Spain) (Free voice) Nilar: Female voice for Burmese (Myanmar) (Free voice) Nils: Male voice for Latvian (Latvia) (Free voice) Niranjan: Male voice for Gujarati (India) (Free voice) Niwat: Male voice for Thai (Thailand) (Free voice) Noah: Male voice for English (United Kingdom) (Free voice) Noemi: Female voice for Hungarian (Hungary) (Free voice) Noora: Female voice for Finnish (Finland) (Free voice) Noura: Female voice for Arabic (Kuwait) (Free voice) Nova: Female voice for English (United States) (Free voice) Nova_2: Female voice for English (United States) (Paid voice) Nuria: Female voice for Spanish (Mexico) (Free voice) Ojas: Male voice for Punjabi (India) (Free voice) Ola: Female voice for Polish (Poland) (Free voice) Ola_2: Female voice for Polish (Poland) (Paid voice) Oliver: Male voice for English (United Kingdom) (Free voice) Olivia: Female voice for English (United Kingdom) (Free voice) Ollie: Male voice for English (United Kingdom) (Free voice) Ollie_2: Male voice for English (United Kingdom) (Paid voice) Omar: Male voice for Arabic (Libya) (Free voice) Ona: Female voice for Lithuanian (Lithuania) (Free voice) Onyx: Male voice for English (United States) (Free voice) Orla: Female voice for Irish (Ireland) (Free voice) Osman: Male voice for Malay (Malaysia) (Free voice) Ostap: Male voice for Ukrainian (Ukraine) (Free voice) Pallavi: Female voice for Tamil (India) (Free voice) Palmira: Female voice for Italian (Italy) (Free voice) Paloma: Female voice for Spanish (United States) (Free voice) Paola: Female voice for Spanish (Venezuela) (Free voice) Pedro: Male voice for Spanish (United States) (Free voice) Pedro_2: Male voice for Spanish (United States) (Paid voice) Pelayo: Male voice for Spanish (Mexico) (Free voice) Penelope: Female voice for Spanish (United States) (Free voice) Pernille: Female voice for Norwegian (Norway) (Free voice) Petra: Female voice for Slovenian (Slovenia) (Free voice) Phoebe: Female voice for English (United States) (Free voice) Phoebe_2: Female voice for English (United States) (Paid voice) Pierina: Female voice for Italian (Italy) (Free voice) Piseth: Male voice for Khmer (Cambodia) (Free voice) Polina: Female voice for Ukrainian (Ukraine) (Free voice) Prabhat: Male voice for English (India) (Free voice) Prabhat_2: Male voice for English (India) (Free voice) Pradeep: Male voice for Bangla (Bangladesh) (Free voice) Premwadee: Female voice for Thai (Thailand) (Free voice) Priyom: Male voice for Assamese (India) (Free voice) Rafiki: Male voice for Swahili (Kenya) (Free voice) Ralf: Male voice for German (Germany) (Free voice) Rami: Male voice for Arabic (Lebanon) (Free voice) Ramona: Female voice for Spanish (Dominican Republic) (Free voice) Rana: Female voice for Arabic (Iraq) (Free voice) Raquel: Female voice for Portuguese (Portugal) (Free voice) Raveena: Female voice for English (India) (Free voice) Reem: Female voice for Arabic (Tunisia) (Free voice) Rehaan: Male voice for Hindi (India) (Free voice) Rehaan_2: Male voice for English (India) (Free voice) Rehema: Female voice for Swahili (Tanzania) (Free voice) Remi: Male voice for French (France) (Free voice) Remi_2: Male voice for French (France) (Paid voice) Remy: Male voice for French (France) (Free voice) Remy_2: Male voice for French (France) (Paid voice) Renata: Female voice for Spanish (Mexico) (Free voice) Ricardo: Male voice for Portuguese (Brazil) (Free voice) Rinaldo: Male voice for Italian (Italy) (Free voice) Roberto: Male voice for Spanish (Panama) (Free voice) Rodrigo: Male voice for Spanish (El Salvador) (Free voice) Roger: Male voice for English (United States) (Free voice) Roi: Male voice for Galician (Free voice) Rok: Male voice for Slovenian (Slovenia) (Free voice) Rosa: Female voice for English (Philippines) (Free voice) Ruben: Male voice for Dutch (Netherlands) (Free voice) Russell: Male voice for English (Australia) (Free voice) Ruth: Female voice for English (United States) (Free voice) Ruth_2: Female voice for English (United States) (Paid voice) Ryan: Male voice for English (United States) (Free voice) Ryan_2: Male voice for English (United Kingdom) (Free voice) Sabela: Female voice for Galician (Free voice) Sabrina: Female voice for German (Switzerland) (Free voice) Sabrina_2: Female voice for German (Switzerland) (Paid voice) Sagar: Male voice for Nepali (Nepal) (Free voice) Saleh: Male voice for Arabic (Yemen) (Free voice) Salli: Female voice for English (United States) (Free voice) Salli_2: Female voice for English (United States) (Free voice) Salli_3: Female voice for English (United States) (Paid voice) Salma: Female voice for Arabic (Egypt) (Free voice) Salman: Male voice for Urdu (India) (Free voice) Salome: Female voice for Spanish (Colombia) (Free voice) Sam: Male voice for English (Hong Kong SAR) (Free voice) Sameera: Male voice for Sinhala (Sri Lanka) (Free voice) Samuel: Male voice for English (United States) (Free voice) Sana: Female voice for Arabic (Jordan) (Free voice) Sapna: Female voice for Kannada (India) (Free voice) Sara: Female voice for English (United States) (Free voice) Saranya: Female voice for Tamil (Sri Lanka) (Free voice) Sardor: Male voice for Uzbek (Latin, Uzbekistan) (Free voice) Saul: Male voice for Spanish (Spain) (Free voice) Sebastian: Male voice for Spanish (Venezuela) (Free voice) Selma: Female voice for Finnish (Finland) (Free voice) SeoHyeon: Female voice for Korean (Korea) (Free voice) Seoyeon: Female voice for Korean (Korea) (Free voice) Seoyeon_2: Female voice for Korean (Korea) (Free voice) Seoyeon_3: Female voice for Korean (Korea) (Paid voice) Seraphina: Female voice for German (Germany) (Free voice) Seraphina_2: Female voice for German (Germany) (Paid voice) Serena: Female voice for English (United States) (Free voice) Serena_2: Female voice for English (United States) (Paid voice) Sergio: Male voice for Spanish (Castilian) (Free voice) Sergio_2: Male voice for Spanish (Castilian) (Paid voice) Shakir: Male voice for Arabic (Egypt) (Free voice) Shimmer: Female voice for English (United States) (Free voice) Shiori: Female voice for Japanese (Japan) (Free voice) Shruti: Female voice for Telugu (India) (Free voice) Siqiniq: Female voice for Inuktitut (Syllabics, Canada) (Free voice) Siqiniq_2: Female voice for Inuktitut (Latin, Canada) (Free voice) Siti: Female voice for Javanese (Latin, Indonesia) (Free voice) Sobhana: Female voice for Malayalam (India) (Free voice) Soffie: Female voice for Danish (Denmark) (Free voice) Sofia: Female voice for Spanish (Bolivia) (Free voice) Sofie: Female voice for Swedish (Sweden) (Free voice) Sonia: Female voice for English (United Kingdom) (Free voice) SoonBok: Female voice for Korean (Korea) (Free voice) Sophie: Female voice for Serbian (Cyrillic, Serbia) (Free voice) Sophie_2: Female voice for Serbian (Latin, Serbia) (Free voice) Srecko: Male voice for Croatian (Croatia) (Free voice) Sreymom: Female voice for Khmer (Cambodia) (Free voice) Steffan: Male voice for English (United States) (Free voice) Steffan_2: Male voice for English (United States) (Free voice) Steffan_3: Male voice for English (United States) (Paid voice) Stephen: Male voice for English (United States) (Free voice) Stephen_2: Male voice for English (United States) (Paid voice) Subhasini: Female voice for Odia (India) (Free voice) Sukant: Male voice for Odia (India) (Free voice) SunHi: Female voice for Korean (Korea) (Free voice) SunHi_2: Female voice for Korean (Korea) (Paid voice) Surya: Male voice for Tamil (Malaysia) (Free voice) Suvi: Female voice for Finnish (Finland) (Free voice) Svetlana: Female voice for Russian (Russia) (Free voice) Swara: Female voice for Hindi (India) (Free voice) Sylvie: Female voice for French (Canada) (Free voice) Sylvie_2: Female voice for French (Canada) (Paid voice) Taim: Male voice for Arabic (Jordan) (Free voice) Takumi: Male voice for Japanese (Japan) (Free voice) Takumi_2: Male voice for Japanese (Japan) (Free voice) Tamas: Male voice for Hungarian (Hungary) (Free voice) Tania: Female voice for Spanish (Paraguay) (Free voice) Tanishaa: Female voice for Bengali (India) (Free voice) Tanja: Female voice for German (Germany) (Free voice) Taqqiq: Male voice for Inuktitut (Syllabics, Canada) (Free voice) Taqqiq_2: Male voice for Inuktitut (Latin, Canada) (Free voice) Tatyana: Female voice for Russian (Russia) (Free voice) Teo: Male voice for Spanish (Spain) (Free voice) Teresa: Female voice for Spanish (Equatorial Guinea) (Free voice) Thalita: Female voice for Portuguese (Brazil) (Free voice) Thalita_2: Female voice for Portuguese (Brazil) (Free voice) Thalita_3: Female voice for Portuguese (Brazil) (Paid voice) Thando: Female voice for Zulu (South Africa) (Free voice) Themba: Male voice for Zulu (South Africa) (Free voice) Thiago: Male voice for Portuguese (Brazil) (Free voice) Thierry: Male voice for French (Canada) (Free voice) Thierry_2: Male voice for French (Canada) (Paid voice) Thiha: Male voice for Burmese (Myanmar) (Free voice) Thilini: Female voice for Sinhala (Sri Lanka) (Free voice) Thomas: Male voice for English (United Kingdom) (Free voice) Tiana: Female voice for English (United States) (Free voice) Tiffany: Female voice for English (United States) (Paid voice) Tim: Male voice for English (Australia) (Free voice) Tina: Female voice for English (Australia) (Free voice) Tomas: Male voice for Spanish (Argentina) (Free voice) Tomoko: Female voice for Japanese (Japan) (Free voice) Tony: Male voice for English (United States) (Free voice) Triana: Female voice for Spanish (Spain) (Free voice) Tristan: Male voice for Spanish (Mexico) (Paid voice) Tristan_ES: Male voice for Spanish (Spain) (Free voice) Tristan_ES_2: Male voice for Spanish (Spain) (Paid voice) Tuti: Female voice for Sundanese (Indonesia) (Free voice) Tyler: Male voice for English (United States) (Free voice) Ubax: Female voice for Somali (Somalia) (Free voice) Uzma: Female voice for Urdu (Pakistan) (Free voice) Vaani: Female voice for Punjabi (India) (Free voice) Valentina: Female voice for Spanish (Uruguay) (Free voice) Valerio: Male voice for Portuguese (Brazil) (Free voice) Valluvar: Male voice for Tamil (India) (Free voice) Venba: Female voice for Tamil (Singapore) (Free voice) Vera: Female voice for Spanish (Spain) (Free voice) Vesna: Female voice for Bosnian (Bosnia and Herzegovina) (Free voice) Vicki: Female voice for German (Germany) (Free voice) Vicki_2: Female voice for German (Germany) (Free voice) Vicki_3: Female voice for German (Germany) (Paid voice) Victor: Male voice for Spanish (Puerto Rico) (Free voice) Viktoria: Female voice for Slovak (Slovakia) (Free voice) Vitoria: Female voice for Portuguese (Brazil) (Free voice) Vitoria_2: Female voice for Portuguese (Brazil) (Free voice) Vivienne: Female voice for French (France) (Free voice) Vivienne_2: Female voice for French (France) (Paid voice) Vlasta: Female voice for Czech (Czechia) (Free voice) WanLung: Male voice for Chinese (Cantonese, Traditional) (Free voice) Wayne: Male voice for English (Singapore) (Free voice) Willem: Male voice for Afrikaans (South Africa) (Free voice) William: Male voice for English (Australia) (Free voice) William_2: Male voice for English (Australia) (Free voice) Xiaochen: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaochen_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaochen_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaochen_4: Female voice for Chinese (Mandarin, Simplified) (Paid voice) Xiaohan: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaohan_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaomeng: Female voice for Chinese (Mandarin, Simplified) (Free voice) XiaoMin: Female voice for Chinese (Cantonese, Simplified) (Free voice) Xiaomo: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoqiu: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaorou: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaorui: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoshuang: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoshuang_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoshuang_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaotong: Female voice for Chinese (Wu, Simplified) (Free voice) Xiaoxiao: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_4: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoxiao_5: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyan: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyi: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyi_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyou: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyou_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyou_3: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyu: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaoyu_2: Female voice for Chinese (Mandarin, Simplified) (Free voice) Xiaozhen: Female voice for Chinese (Mandarin, Simplified) (Free voice) Ximena: Female voice for Spanish (Mexico) (Paid voice) Ximena_ES: Female voice for Spanish (Spain) (Free voice) Ximena_ES_2: Female voice for Spanish (Spain) (Free voice) Ximena_ES_3: Female voice for Spanish (Spain) (Paid voice) Yago: Male voice for Spanish (Mexico) (Free voice) Yan: Female voice for English (Hong Kong SAR) (Free voice) Yara: Female voice for Portuguese (Brazil) (Free voice) Yashica: Female voice for Assamese (India) (Free voice) Yasmin: Female voice for Malay (Malaysia) (Free voice) Yesui: Female voice for Mongolian (Mongolia) (Free voice) Yolanda: Female voice for Spanish (Nicaragua) (Free voice) YuJin: Female voice for Korean (Korea) (Free voice) Yundeng: Male voice for Chinese (Zhongyuan Mandarin Henan, Simplified) (Free voice) Yunfan: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunfan_2: Male voice for Chinese (Mandarin, Simplified) (Paid voice) Yunfeng: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunhan: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunhao: Male voice for Chinese (Mandarin, Simplified) (Free voice) YunJhe: Male voice for Chinese (Taiwanese Mandarin, Traditional) (Free voice) Yunjian: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunjie: Male voice for Chinese (Mandarin, Simplified) (Free voice) YunSong: Male voice for Chinese (Cantonese, Simplified) (Free voice) Yunxi: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxi_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxia: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxia_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxiang: Male voice for Chinese (Jilu Mandarin, Simplified) (Free voice) Yunxiao: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunxiao_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunyang: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunye: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunye_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunyi: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunyi_2: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunze: Male voice for Chinese (Mandarin, Simplified) (Free voice) Yunzhe: Male voice for Chinese (Wu, Simplified) (Free voice) Yves: Male voice for French (France) (Free voice) Yvette: Female voice for French (France) (Free voice) Zariyah: Female voice for Arabic (Saudi Arabia) (Free voice) Zayd: Male voice for Arabic (Saudi Arabia) (Free voice) Zeina: Female voice for Arabic (Saudi Arabia) (Free voice) Zhiyu: Female voice for Chinese (Mandarin) (Free voice) Zhiyu_2: Female voice for Chinese (Mandarin) (Free voice) Zofia: Female voice for Polish (Poland) (Free voice) Zuri: Female voice for Swahili (Kenya) (Free voice) svamlCommand: title: SVAML Command type: object description: 'A single SVAML (Sinch Voice Application Markup Language) command that controls call behavior. The `command` property acts as a discriminator and determines which command schema applies. When multiple commands appear in a `svamlCommands` array, they execute sequentially in order. **Available commands:** - `dial` — Initiate an outbound call leg within the session. - `messages` — Play one or more TTS or audio messages on the call. - `stopMessages` — Stop a currently playing message sequence. - `webhook` — Trigger a mid-call webhook to the application backend for dynamic call control. - `amd` — Detect whether the call was answered by a human or an answering machine. - `hangup` — End the call or a specific call leg within the session. - `answer` — Explicitly answer an incoming call leg before executing further commands. - `pause` — Delay script execution without affecting call audio. - `startRecording` — Begin recording the call. - `stopRecording` — Stop an active call recording. - `bridgeCall` — Add the call to a named bridge for multi-party audio. - `menu` — Run menu-based input collection and route the call based on collected input. - `gotoMenu` — Switch execution to another named menu within the current menu context.' oneOf: - $ref: '#/components/schemas/amd' - $ref: '#/components/schemas/dial' - $ref: '#/components/schemas/messages' - $ref: '#/components/schemas/stopMessages' - $ref: '#/components/schemas/webhook' - $ref: '#/components/schemas/hangup' - $ref: '#/components/schemas/answer' - $ref: '#/components/schemas/pause' - $ref: '#/components/schemas/startRecording' - $ref: '#/components/schemas/stopRecording' - $ref: '#/components/schemas/bridgeCall' - $ref: '#/components/schemas/menu' - $ref: '#/components/schemas/gotoMenu' discriminator: propertyName: command mapping: amd: '#/components/schemas/amd' dial: '#/components/schemas/dial' messages: '#/components/schemas/messages' stopMessages: '#/components/schemas/stopMessages' webhook: '#/components/schemas/webhook' hangup: '#/components/schemas/hangup' answer: '#/components/schemas/answer' pause: '#/components/schemas/pause' startRecording: '#/components/schemas/startRecording' stopRecording: '#/components/schemas/stopRecording' bridgeCall: '#/components/schemas/bridgeCall' menu: '#/components/schemas/menu' gotoMenu: '#/components/schemas/gotoMenu' sipCallHeaders: type: array description: Custom SIP headers to be sent in the call setup. maxItems: 16 items: type: object additionalProperties: false required: - key properties: key: type: string minLength: 1 maxLength: 255 pattern: ^[-A-Za-z0-9.!%*_+`'~]+$ description: Name of the SIP header. example: X-Correlation-Id value: type: string maxLength: 255 description: Value of the SIP header. example: '12345' examples: - - key: X-Correlation-Id value: '12345' - key: X-Call-Routing value: forwarded conflict: title: Conflict description: Returned when a resource with the same name already exists in the project. allOf: - $ref: '#/components/schemas/problemDetails' - type: object properties: type: const: https://api.sinch.com/docs/errors/conflict title: const: Duplicate resource name detail: example: A resource with the name already exists in this project. instance: example: /v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01ARZ3NDEKTSV4RRFFQ69G5FAA callEvents: type: object additionalProperties: false title: Call Events Webhook description: Webhook to handle call events, used when callBehaviors are set to WEBHOOK properties: onAnswer: description: SVAML commands to be executed when the call is answered $ref: '#/components/schemas/svamlCommands' onBusy: description: SVAML commands to be executed when the call is busy $ref: '#/components/schemas/svamlCommands' onReject: description: SVAML commands to be executed when the call is rejected $ref: '#/components/schemas/svamlCommands' onTimeout: description: SVAML commands to be executed when the call is timed out $ref: '#/components/schemas/svamlCommands' onHangup: description: SVAML commands to be executed when the call is hung up $ref: '#/components/schemas/svamlCommands' onFailure: description: SVAML commands to be executed when the call fails $ref: '#/components/schemas/svamlCommands' unauthorized: title: Unauthorized description: Returned when authentication fails — the token is missing, invalid, or expired. allOf: - $ref: '#/components/schemas/problemDetails' - type: object properties: type: const: https://api.sinch.com/docs/errors/unauthorized title: const: Unauthorized detail: example: The token is missing, invalid, or has expired. instance: example: /v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01ARZ3NDEKTSV4RRFFQ69G5FAA callBehaviors: x-category: call x-usage: call title: Call Behaviors description: Defines how calls are handled for this service oneOf: - $ref: '#/components/schemas/callBehaviorsNone' - $ref: '#/components/schemas/callBehaviorsWebhook' - $ref: '#/components/schemas/callBehaviorsStatic' discriminator: propertyName: type mapping: NONE: '#/components/schemas/callBehaviorsNone' WEBHOOK: '#/components/schemas/callBehaviorsWebhook' STATIC: '#/components/schemas/callBehaviorsStatic' examples: - type: WEBHOOK webhook: url: https://example.com/webhook fallbackUrl: https://example.com/fallback 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 stopRecording: type: object additionalProperties: false title: Stop Recording description: Stops a recording previously started by a `startRecording` command. This is a non-blocking command — execution continues to the next command in the sequence immediately after the stop is initiated. required: - command - recordingName properties: command: type: string const: stopRecording description: Command to stop recording on the channel recordingName: type: string description: Name of the recording to stop, as set by `recordingName` in the `startRecording` command. minLength: 1 maxLength: 32 pattern: ^\S+$ example: my-recording voiceRelay: type: object additionalProperties: false title: Voice Relay description: Routes the call through the Voice Relay service, enabling real-time speech-to-text (STT) and text-to-speech (TTS) via a WebSocket connection to the application backend. required: - type - voiceRelay properties: type: type: string const: VOICE_RELAY description: Connects to the Voice Relay service to enable STT and TTS services... voiceRelay: type: object additionalProperties: false required: - endpoint - ttsVoice - sttLanguage properties: endpoint: type: string format: uri description: URL to the server that will accept the web-socket request example: wss://acme.com/agent enableInterruptions: type: boolean description: 'Allow "barge-in" during text-to-speech (TTS) playback. When `true`, TTS playback is interrupted as soon as inbound speech is detected, unless the currently playing content is marked as uninterruptible. When `false`, TTS playback continues uninterrupted, but an interruption signal is still sent over the WebSocket so the client application can choose to stop playback manually if needed.' default: true example: true ttsVoice: description: "Name of the voice to be used when synthesizing speech. \n\nThis is the default voice used, if no override voice is provided in the web-socket TTS message." $ref: '#/components/schemas/voiceName' sttLanguage: type: string pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$ description: 'BCP-47 language tag used for speech-to-text transcription of the inbound audio. This value determines which language model is used for transcription.' example: en-US callHeaders: $ref: '#/components/schemas/callHeaders' examples: - type: VOICE_RELAY voiceRelay: endpoint: wss://acme.com/agent enableInterruptions: true ttsVoice: Emma sttLanguage: en-US callHeaders: - key: my-key value: my-key-value message: type: object title: Message description: A single message item. The required payload depends on `type`. oneOf: - $ref: '#/components/schemas/messageSay' - $ref: '#/components/schemas/messagePlay' discriminator: propertyName: type mapping: SAY: '#/components/schemas/messageSay' PLAY: '#/components/schemas/messagePlay' phone: type: object additionalProperties: false title: Phone description: Routes the call to a phone number on the Public Switched Telephone Network (PSTN). required: - type - phone properties: type: type: string const: PHONE description: Routes the call to a phone number on the Public Switched Telephone Network (PSTN). The number must be in E.164 format. phone: type: object additionalProperties: false required: - number properties: number: $ref: '#/components/schemas/phoneNumber' examples: - type: PHONE phone: number: '+4673522488' forbidden: title: Forbidden description: Returned when the authenticated identity does not have permission to perform the requested operation. allOf: - $ref: '#/components/schemas/problemDetails' - type: object properties: type: const: https://api.sinch.com/docs/errors/forbidden title: const: Forbidden detail: example: The request was rejected. instance: example: /v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01ARZ3NDEKTSV4RRFFQ69G5FAA recordingType: title: Recording Type description: The type of recording to perform. type: string enum: - COMBINED - INBOUND - OUTBOUND x-enumDescriptions: COMBINED: Record inbound and outbound voice streams. INBOUND: Record inbound voice stream only. OUTBOUND: Record outbound voice stream only. default: COMBINED paginationMeta: type: object additionalProperties: false required: - totalCount - pageCount title: Pagination Metadata description: 'Metadata about the paginated list response. ' properties: totalCount: type: integer description: Total number of items across all pages. example: 100 pageCount: type: integer description: Total number of pages. example: 5 pause: type: object additionalProperties: false title: Pause description: 'Delays execution of the next command in the sequence for a specified duration. This is a blocking command — no further commands execute until the pause completes. The pause does not affect call audio; the call remains connected and audio continues uninterrupted.' required: - command - durationMilliseconds properties: command: type: string const: pause description: Pause execution. durationMilliseconds: type: integer minimum: 1 description: Duration of the pause in milliseconds. example: 1000 examples: - command: pause durationMilliseconds: 1500 dial: type: object additionalProperties: false title: Dial description: 'Initiates a new outbound call leg within the current session. This is a non-blocking command — the next command in the sequence executes immediately while the call is being established in parallel. Call lifecycle events (answer, busy, reject, timeout, hangup, failure) are handled via the `events` property. The `from` and `to` endpoint types should ideally match. If they differ, the platform attempts to convert the `from` value to be compatible with the `to` type. For example, PSTN supports only E.164 phone numbers, so a SIP address such as `sip:46701234567@acme.se` can be converted to an E.164 number. If the `from` value cannot be converted, it defaults to null (anonymous).' required: - command - to properties: command: type: string const: dial description: Command to initiate a new call callName: type: string minLength: 1 maxLength: 32 pattern: ^\S+$ example: outgoing description: 'Identifier for this call leg within the session. Must be unique across all active call legs in the session. Other commands (e.g., `hangup`) can reference this name to target this specific leg.' from: $ref: '#/components/schemas/from' to: $ref: '#/components/schemas/to' dialTimeoutDurationSeconds: type: integer minimum: 1 maximum: 60 description: Maximum time in seconds to wait for the call to be answered. If the timeout expires without an answer, the `onTimeout` event is triggered. example: 15 maxCallDurationSeconds: type: integer minimum: 1 maximum: 14400 description: Maximum duration of the call in seconds. The call is terminated automatically when this limit is reached. example: 3600 events: $ref: '#/components/schemas/callEvents' examples: - command: dial callName: destination from: type: PHONE phone: number: '+15551234567' to: type: PHONE phone: number: '+15559876543' dialTimeoutDurationSeconds: 30 maxCallDurationSeconds: 3600 events: onAnswer: - command: messages messages: - type: SAY say: text: Your call has connected. voiceName: Emma bridgeCall: type: object additionalProperties: false title: Add call to bridge description: 'Adds the current call to a bridge, enabling bidirectional audio communication with other calls in the same session. This is a non-blocking command — execution continues to the next command in the sequence immediately after the call joins the bridge. Bridges are created automatically when referenced by name. If a bridge with the specified name already exists, the call joins that bridge; otherwise, a new bridge is created.' required: - command - bridgeName properties: command: type: string const: bridgeCall description: Command to add the call to a bridge bridgeName: type: string minLength: 1 maxLength: 32 pattern: ^\S+$ description: Name of the bridge to join. If no bridge with this name exists in the session, a new one is created automatically. examples: - command: bridgeCall bridgeName: my_bridge callHeaders: type: array description: Custom headers to be sent in the call setup. maxItems: 16 items: type: object additionalProperties: false required: - key properties: key: type: string minLength: 1 maxLength: 255 pattern: '[\x20-\x7e\t]+$' description: Name of the header. example: headerKey value: type: string maxLength: 255 pattern: '[\x20-\x7e\t]*$' description: Value of the header. example: headerValue examples: - - key: headerKey value: headerValue - key: anotherKey value: anotherValue webhook: type: object additionalProperties: false title: Webhook description: 'Triggers a mid-call webhook to the application backend, allowing it to return a new set of SVAML commands that control the remainder of the call flow. This is a blocking command — execution pauses until a response is received from the webhook endpoint. The next command in the sequence runs only after the backend responds. Webhook requests use a 5-second timeout. If a `fallbackUrl` is provided, a failed request is re-sent to it — see *Timeouts and failover* in the **Webhooks** section for the authoritative algorithm.' required: - command - webhookName - url properties: command: type: string const: webhook description: Command to trigger a mid-call webhook webhookName: type: string minLength: 1 maxLength: 64 pattern: ^\S+$ description: 'Name for this webhook event. When triggered, the webhook request''s `event` property will contain this name prepended with `call.webhook.`. For example, if `webhookName` is set to `"my.custom.event"`, the event will be delivered as `"call.webhook.my.custom.event"`.' url: type: string description: URL of the webhook endpoint to send the mid-call event to. format: uri fallbackUrl: $ref: '#/components/schemas/webhookFallbackUrl' examples: - command: webhook webhookName: my.custom.event url: https://example.com/webhook fallbackUrl: https://example.com/fallback serviceResponse: title: Service Response description: Full representation of a voice service resource, including its configuration and call behavior. type: object additionalProperties: false required: - serviceId - projectId - createTime - name - isDefault properties: serviceId: $ref: '#/components/schemas/serviceId' projectId: $ref: '#/components/schemas/projectId' createTime: type: string readOnly: true format: date-time description: Timestamp (RFC 3339) indicating when the service was created. example: '2025-01-01 00:00:00+00:00' updateTime: type: string format: date-time readOnly: true description: 'Timestamp (RFC 3339) indicating when the service was last updated. Omitted if no updates were performed on this service.' example: '2025-01-01 00:00:00+00:00' name: type: string minLength: 1 maxLength: 64 pattern: ^\S+(\s+\S+)*$ description: Voice service name. No leading or trailing whitespaces allowed. example: My Voice Service description: type: string description: Description of the service example: This is a description of my voice service isDefault: $ref: '#/components/schemas/serviceIsDefault' callBehavior: $ref: '#/components/schemas/callBehaviors' startRecording: type: object additionalProperties: false title: Start Recording required: - command - recordingOptions description: Starts recording the call. This is a non-blocking command — execution continues to the next command in the sequence immediately after recording begins. properties: command: type: string const: startRecording description: Command to start recording on the channel recordingName: type: string description: 'Identifier for this recording within the session. Must be unique across active recordings in the session. Other commands (e.g., `stopRecording`) reference this name to target a specific recording. Setting the recording name is useful for stopping the recording using the `stopRecording` command. If name is not set, recording can only be stopped when the call is disconnected.' minLength: 1 maxLength: 32 pattern: ^\S+$ example: my-recording recordingOptions: $ref: '#/components/schemas/recordingOptions' events: $ref: '#/components/schemas/recordingEvents' examples: - command: startRecording recordingName: customer-support-recording recordingOptions: format: MP3 recordingType: COMBINED destination: AWS destinationUrl: s3://voice-recordings-prod/calls credentials: accessKeyId:secretAccessKey:eu-central-1 transcriptionOptions: isEnabled: true locale: en-US events: onFinish: - command: hangup onFailure: - command: messages messages: - type: SAY say: text: Recording could not be started for this call. voiceName: Emma messagePlay: type: object title: Play Message description: An audio file playback message item. The platform fetches and plays the audio file at the provided URL on the call. additionalProperties: false required: - type - play properties: type: type: string const: PLAY description: Audio file playback during the call. play: type: object additionalProperties: false title: Play required: - url properties: url: type: string description: URL of the media to send examples: - type: PLAY play: url: https://example.com/media.mp3 hangup: type: object additionalProperties: false description: 'Ends a call leg. This is a non-blocking command — execution continues to the next command in the sequence even though the call has been ended. The `onHangup` event is triggered for the call leg that was ended. Any subsequent commands that target the ended call leg (such as `messages` or other media commands) are valid but will not be executed. Commands that operate independently — such as initiating a new call with `dial` — will execute normally. This makes it possible, for example, to end one call and immediately start another within the same sequence.' title: Hangup required: - command properties: command: type: string const: hangup description: Hangup call callName: type: string description: 'Name of the call leg to end, as set by `callName` in the `dial` command. If omitted, the current call leg is ended.' minLength: 1 maxLength: 32 pattern: ^\S+$ example: origin examples: - command: hangup callName: origin internalServerError: title: Internal Server Error description: Returned when an unexpected error occurs on the server. allOf: - $ref: '#/components/schemas/problemDetails' - type: object properties: type: const: https://api.sinch.com/docs/errors/internal-server-error title: const: Internal Server Error detail: example: An unexpected error occurred on the server. instance: example: /v2/projects/5c5bf2b1-35ae-4825-ab89-457e07bb60e6/calls/01ARZ3NDEKTSV4RRFFQ69G5FAA responses: ServiceList: description: List of services, or an [Error](https://developers.sinch.com/docs/fax/api-reference/fax/error-messages) content: application/json: schema: allOf: - type: object properties: services: description: List of services. type: array items: $ref: '#/components/schemas/Service' - $ref: '#/components/schemas/Pagination' '401': description: Authentication failed — token missing, invalid, or expired. headers: WWW-Authenticate: description: RFC 7235 challenge. Indicates the required authentication scheme and, for expired tokens, provides an error hint. schema: type: string example: Bearer realm="sinch", error="invalid_token", error_description="Token has expired" content: application/problem+json: schema: $ref: '#/components/schemas/unauthorized' '400': description: Invalid request parameters. content: application/problem+json: schema: $ref: '#/components/schemas/badRequest' '409': description: Resource with the same name already exists content: application/problem+json: schema: $ref: '#/components/schemas/conflict' '404': description: Resource not found. content: application/problem+json: schema: $ref: '#/components/schemas/notFound' '500': description: Internal server error occurred. content: application/problem+json: schema: $ref: '#/components/schemas/internalServerError' '403': description: Forbidden. content: application/problem+json: schema: $ref: '#/components/schemas/forbidden' '429': description: Too many requests — rate limit exceeded. headers: Retry-After: description: Number of seconds to wait before retrying the request. required: false schema: type: integer example: 60 content: application/problem+json: schema: $ref: '#/components/schemas/tooManyRequests' parameters: ProjectId: name: projectId in: path required: true description: The `projectId` is a required parameter you must include when making any API calls. You can find your project ID on your [Build dashboard](https://dashboard.sinch.com). schema: type: string example: 3acb7ae1-cf3d-4112-ba5e-3a9d8c71cd47 page: in: query name: page description: Page number (1-based) required: false schema: type: integer minimum: 1 default: 1 pageSize: in: query name: pageSize description: Number of items to be returned on each page. required: false schema: type: integer minimum: 1 maximum: 100 default: 20 idempotencyKey: name: Idempotency-Key in: header schema: type: string minLength: 16 maxLength: 128 required: false description: Client-generated idempotency key to safely retry requests. The server uses this key to recognize retries of the same request. If a request with the same key is received within 10 minutes, the server returns the cached response from the original request. Using a random UUID (v4) is strongly recommended. serviceId: name: serviceId description: The ID of the service. in: path required: true schema: $ref: '#/components/schemas/serviceId' projectId: name: projectId description: The ID of the project. in: path required: true schema: $ref: '#/components/schemas/projectId' securitySchemes: WebhookBasicAuth: type: http scheme: basic description: 'You can validate whether a webhook is genuine by providing credentials you set and will check on your server side along with the callback URL, as in this example: `https://username:password@www.YourWebhookWebsite.com`' BasicAuth: type: http scheme: basic description: The user name and password is your keyId and key secret from the [Access keys sections](https://dashboard.sinch.com/settings/access-keys) OAuth2: type: oauth2 description: The user name and password is your key id and key secret from the [Access keys sections](https://dashboard.sinch.com/settings/access-keys) flows: clientCredentials: tokenUrl: https://auth.sinch.com/oauth2/token scopes: {} SinchOAuth2: type: oauth2 description: 'OAuth 2.0 **Client Credentials** grant (recommended for production). Exchange the **Access Key ID** (`client_id`) and **Access Key Secret** (`client_secret`) for a short-lived Bearer token. Tokens typically expire after **3600 seconds**. When the token expires, request a new one using the same `tokenUrl`. There is no separate refresh token in the client credentials flow — simply re-authenticate. Access keys are managed in the Dashboard: https://dashboard.sinch.com/settings/access-keys' flows: clientCredentials: tokenUrl: https://auth.sinch.com/oauth2/token refreshUrl: https://auth.sinch.com/oauth2/token scopes: {} x-refined-from: - sinch-fax-api-openapi.yaml - sinch-voice-api-v2-openapi.yaml - sinch-voice-api-v2-openapi.yml x-explorer-enabled: false x-samples-languages: - curl - java - csharp - node - php x-original-swagger-version: '2.0'