Sinch · Schema
Service Response
Full representation of a voice service resource, including its configuration and call behavior.
CommunicationsMessagingSMSVoiceVerificationCPaaSTelecommunicationsWhatsApp
Properties
| Name | Type | Description |
|---|---|---|
| serviceId | object | |
| projectId | object | |
| createTime | string | Timestamp (RFC 3339) indicating when the service was created. |
| updateTime | string | Timestamp (RFC 3339) indicating when the service was last updated. Omitted if no updates were performed on this service. |
| name | string | Voice service name. No leading or trailing whitespaces allowed. |
| description | string | Description of the service |
| isDefault | object | |
| callBehavior | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/sinch/main/json-schema/sinch-service-response-schema.json",
"title": "Service Response",
"description": "Full representation of a voice service resource, including its configuration and call behavior.",
"x-generated": "2026-10-08",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/sinch-voice-api-v2-openapi.yml#/components/schemas/serviceResponse",
"type": "object",
"additionalProperties": false,
"required": [
"serviceId",
"projectId",
"createTime",
"name",
"isDefault"
],
"properties": {
"serviceId": {
"$ref": "#/$defs/serviceId"
},
"projectId": {
"$ref": "#/$defs/projectId"
},
"createTime": {
"type": "string",
"readOnly": true,
"format": "date-time",
"description": "Timestamp (RFC 3339) indicating when the service was created."
},
"updateTime": {
"type": "string",
"format": "date-time",
"readOnly": true,
"description": "Timestamp (RFC 3339) indicating when the service was last updated.\n\nOmitted if no updates were performed on this service."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^\\S+(\\s+\\S+)*$",
"description": "Voice service name. No leading or trailing whitespaces allowed."
},
"description": {
"type": "string",
"description": "Description of the service"
},
"isDefault": {
"$ref": "#/$defs/serviceIsDefault"
},
"callBehavior": {
"$ref": "#/$defs/callBehaviors"
}
},
"$defs": {
"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.\n\nThis 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": "#/$defs/amdEvents"
}
}
},
"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": "#/$defs/svamlCommands"
},
"onMachine": {
"description": "SVAML commands to be executed when a machine is detected",
"$ref": "#/$defs/svamlCommands"
},
"onBeep": {
"description": "SVAML commands to be executed when a beep is detected",
"$ref": "#/$defs/svamlCommands"
},
"onUnknown": {
"description": "SVAML commands to be executed when an unknown event is detected",
"$ref": "#/$defs/svamlCommands"
}
}
},
"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"
}
}
},
"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.\n\nBridges 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."
}
}
},
"callBehaviors": {
"x-category": "call",
"x-usage": "call",
"title": "Call Behaviors",
"description": "Defines how calls are handled for this service",
"oneOf": [
{
"$ref": "#/$defs/callBehaviorsNone"
},
{
"$ref": "#/$defs/callBehaviorsWebhook"
},
{
"$ref": "#/$defs/callBehaviorsStatic"
}
]
},
"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."
}
}
},
"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": "#/$defs/svamlInput"
}
}
},
"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": "#/$defs/webhookConfiguration"
}
}
},
"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": "#/$defs/svamlCommands"
},
"onBusy": {
"description": "SVAML commands to be executed when the call is busy",
"$ref": "#/$defs/svamlCommands"
},
"onReject": {
"description": "SVAML commands to be executed when the call is rejected",
"$ref": "#/$defs/svamlCommands"
},
"onTimeout": {
"description": "SVAML commands to be executed when the call is timed out",
"$ref": "#/$defs/svamlCommands"
},
"onHangup": {
"description": "SVAML commands to be executed when the call is hung up",
"$ref": "#/$defs/svamlCommands"
},
"onFailure": {
"description": "SVAML commands to be executed when the call fails",
"$ref": "#/$defs/svamlCommands"
}
}
},
"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."
},
"value": {
"type": "string",
"maxLength": 255,
"pattern": "[\\x20-\\x7e\\t]*$",
"description": "Value of the header."
}
}
}
},
"dial": {
"type": "object",
"additionalProperties": false,
"title": "Dial",
"description": "Initiates a new outbound call leg within the current session.\n\nThis 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.\n\nThe `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+$",
"description": "Identifier for this call leg within the session. Must be unique across all active call legs in the session.\n\nOther commands (e.g., `hangup`) can reference this name to target this specific leg."
},
"from": {
"$ref": "#/$defs/from"
},
"to": {
"$ref": "#/$defs/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."
},
"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."
},
"events": {
"$ref": "#/$defs/callEvents"
}
}
},
"from": {
"description": "Call origin - Phone Number or SIP endpoint",
"oneOf": [
{
"$ref": "#/$defs/phone"
},
{
"$ref": "#/$defs/sipFrom"
}
]
},
"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.\n\n**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
}
}
},
"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.\n\nAny 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.\n\nIf omitted, the current call leg is ended.",
"minLength": 1,
"maxLength": 32,
"pattern": "^\\S+$"
}
}
},
"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.\n\nEach 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": "#/$defs/menuItem"
}
}
}
},
"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.\n\nEach collected input is matched against the values in the `matches` property.\nIf no match succeeds, the `onFail` commands are executed.\n\nIf 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": "#/$defs/menuPrompt",
"description": "Prompt played when this menu starts.\n\nThis prompt is also used as the repeat prompt when repeatPrompt is not defined for the menu."
},
"repeatPrompt": {
"$ref": "#/$defs/menuPrompt",
"description": "Prompt played when the menu is repeated.\n\nRepeats 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
},
"repeatCount": {
"type": "integer",
"description": "Maximum number of times the menu is repeated.\n\nA repeat occurs when input times out or when the provided input does not match any menu match item.",
"minimum": 0,
"maximum": 10,
"default": 2
},
"minimumInputLength": {
"type": "integer",
"description": "Minimum number of input characters required before the menu evaluates the collected input.",
"minimum": 1,
"maximum": 100,
"default": 1
},
"maximumInputLength": {
"type": "integer",
"description": "Maximum number of input characters that triggers the menu to evaluate the collected input.",
"minimum": 1,
"maximum": 100,
"default": 1
},
"terminatingSequence": {
"type": "string",
"pattern": "^[0-9*#]+$",
"description": "Character sequence that signals the end of input and triggers immediate evaluation.\n\nUseful when variable-length input is allowed and shorter valid options should be submitted without waiting for timeout or maximum length.\n\nThe 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.\n\nDefined as a dictionary where each property name is a literal or a regular expression string.\n\nValues 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.\n\nProperty keys are evaluated sequentially in the order defined. The first key that matches the input will trigger its associated SVAML commands.\n\n**Note**: Use `\\\\*` to match the DTMF star tone (*)."
},
"additionalProperties": {
"$ref": "#/$defs/svamlCommands"
}
},
"onFail": {
"$ref": "#/$defs/svamlCommands",
"description": "SVAML commands executed when the menu fails to collect a matching input.\n\nThis handler runs after the repeat limit is reached without any input matching a menu match item."
}
}
},
"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.\n\nWhen enabled, playback stops as soon as input is detected and the input is evaluated immediately if matching conditions are met.\n\nWhen disabled, input is still collected during playback and evaluated after playback finishes.",
"default": true
},
"messages": {
"$ref": "#/$defs/typesOfMessages"
}
}
},
"message": {
"type": "object",
"title": "Message",
"description": "A single message item. The required payload depends on `type`.",
"oneOf": [
{
"$ref": "#/$defs/messageSay"
},
{
"$ref": "#/$defs/messagePlay"
}
]
},
"messageEvents": {
"type": "object",
"additionalProperties": false,
"title": "Message Events",
"description": "SVAML commands to execute based on message playback outcomes.\n",
"properties": {
"onFinish": {
"description": "Commands to execute when all messages in the sequence have finished playing.\n",
"$ref": "#/$defs/svamlCommands"
}
}
},
"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"
}
}
}
}
},
"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.\n\nIf `format` is `TEXT` (default), provide plain text.\nIf `format` is `SSML`, provide a valid SSML document (for example, `<speak>...</speak>`).",
"maxLength": 600
},
"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": "#/$defs/voiceName"
}
}
}
}
},
"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.\n\nThis name is used to uniquely identify the message and must be unique within the current call session.\nThis name can be referenced in other commands (e.g., `stopMessages`) to control this specific message.",
"minLength": 1,
"maxLength": 32,
"pattern": "^\\S+$"
},
"messages": {
"$ref": "#/$defs/typesOfMessages"
},
"events": {
"$ref": "#/$defs/messageEvents"
}
}
},
"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.\n\nThe 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."
}
}
},
"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": "#/$defs/phoneNumber"
}
}
}
}
},
"phoneNumber": {
"title": "Phone Number",
"type": "string",
"pattern": "^\\+[1-9]\\d{1,14}$",
"minLength": 3,
"maxLength": 16,
"description": "E.164 Phone number"
},
"projectId": {
"title": "Project ID",
"type": "string",
"format": "uuid",
"description": "The `Id` of the project associated with the call."
},
"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"
},
"recordingEvents": {
"type": "object",
"additionalProperties": false,
"title": "Recording Events",
"description": "SVAML commands to execute based on recording lifecycle outcomes.\n",
"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.\n",
"$ref": "#/$defs/svamlCommands"
},
"onFailure": {
"description": "Commands to execute if the recording fails to start. If omitted, failures are silently ignored and the call flow continues.\n",
"$ref": "#/$defs/svamlCommands"
}
}
},
"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"
},
"recordingOptions": {
"title": "Recording Options",
"type": "object",
"additionalProperties": false,
"description": "Recording options for this recording.",
"required": [
"destination",
"destinationUrl",
"credentials"
],
"properties": {
"format": {
"$ref": "#/$defs/recordingFormat"
},
"recordingType": {
"$ref": "#/$defs/recordingType"
},
"destination": {
"$ref": "#/$defs/recordingDestination"
},
"destinationUrl": {
"type": "string",
"description": "Destination URL for the recording."
},
"credentials": {
"type": "string",
"description": "Credentials to third party storage."
},
"transcriptionOptions": {
"$ref": "#/$defs/transcriptionOptions"
}
}
},
"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"
},
"serviceId": {
"title": "Service ID",
"type": "string",
"format": "uuid",
"description": "The ID of the service used."
},
"serviceIsDefault": {
"title": "Service Is Default",
"type": "boolean",
"description": "Indicates whether this service is set as the default for the project.\nThe default service is used when no specific service is specified in API requests.\nNote: when updating a service, this property cannot be set to false. In such case, a BadRequest will be returned by the API."
},
"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.\n\nIf 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": "#/$defs/sipCallHeaders"
}
}
}
}
},
"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"
# --- truncated at 32 KB (116 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/sinch/refs/heads/main/json-schema/sinch-service-response-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/sinch-service-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.