{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/sinch/main/json-schema/sinch-callout-request-schema.json",
  "title": "CalloutRequest",
  "x-generated": "2026-10-03",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/sinch-callouts-api-openapi.yml#/components/schemas/CalloutRequest",
  "type": "object",
  "required": [
    "method"
  ],
  "properties": {
    "method": {
      "type": "string",
      "enum": [
        "conferenceCallout",
        "ttsCallout",
        "customCallout"
      ],
      "description": "The callout method type"
    },
    "conferenceCallout": {
      "$ref": "#/$defs/ConferenceCallout"
    },
    "ttsCallout": {
      "$ref": "#/$defs/TtsCallout"
    },
    "customCallout": {
      "$ref": "#/$defs/CustomCallout"
    }
  },
  "$defs": {
    "ConferenceCallout": {
      "type": "object",
      "required": [
        "cli",
        "destination",
        "conferenceId"
      ],
      "properties": {
        "cli": {
          "type": "string",
          "description": "The caller ID to display"
        },
        "destination": {
          "$ref": "#/$defs/Destination"
        },
        "conferenceId": {
          "type": "string",
          "description": "The conference identifier to connect to"
        },
        "dtmf": {
          "type": "string",
          "description": "DTMF tones to play when the call is answered"
        },
        "maxDuration": {
          "type": "integer",
          "description": "Maximum duration of the call in seconds"
        },
        "enableAce": {
          "type": "boolean",
          "description": "Enable Answered Call Event callback"
        },
        "enableDice": {
          "type": "boolean",
          "description": "Enable Disconnected Call Event callback"
        },
        "enablePie": {
          "type": "boolean",
          "description": "Enable Prompt Input Event callback"
        },
        "locale": {
          "type": "string",
          "description": "Locale for text-to-speech"
        },
        "greeting": {
          "type": "string",
          "description": "Text-to-speech greeting when joining conference"
        },
        "mohClass": {
          "type": "string",
          "description": "Music on hold class"
        }
      }
    },
    "CustomCallout": {
      "type": "object",
      "required": [
        "cli",
        "destination",
        "ice"
      ],
      "properties": {
        "cli": {
          "type": "string",
          "description": "The caller ID to display"
        },
        "destination": {
          "$ref": "#/$defs/Destination"
        },
        "ice": {
          "type": "string",
          "description": "SVAML ICE response in JSON format"
        },
        "ace": {
          "type": "string",
          "description": "SVAML ACE response in JSON format"
        },
        "pie": {
          "type": "string",
          "description": "SVAML PIE response in JSON format"
        }
      }
    },
    "Destination": {
      "type": "object",
      "required": [
        "type",
        "endpoint"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "number",
            "username",
            "sip",
            "did"
          ],
          "description": "The destination type"
        },
        "endpoint": {
          "type": "string",
          "description": "The destination endpoint identifier"
        }
      }
    },
    "TtsCallout": {
      "type": "object",
      "required": [
        "cli",
        "destination",
        "text"
      ],
      "properties": {
        "cli": {
          "type": "string",
          "description": "The caller ID to display"
        },
        "destination": {
          "$ref": "#/$defs/Destination"
        },
        "text": {
          "type": "string",
          "description": "The text to convert to speech"
        },
        "locale": {
          "type": "string",
          "description": "The locale for text-to-speech"
        },
        "enableAce": {
          "type": "boolean",
          "description": "Enable Answered Call Event callback"
        },
        "enableDice": {
          "type": "boolean",
          "description": "Enable Disconnected Call Event callback"
        }
      }
    }
  }
}