> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tetherai.ca/llms.txt
> Use this file to discover all available pages before exploring further.

# Handle Sinch voice call webhook

> Inbound voice call webhook posted by Sinch for ICE (Incoming Call Event), ACE (Answered Call Event), and DiCE (Disconnect Event). For ICE the endpoint returns SVAML instructing Sinch how to route/record the call; for ACE and DiCE it updates the Call record and acknowledges receipt.



## OpenAPI

````yaml /api-reference/openapi.yaml post /api/webhook/calls/sinch
openapi: 3.0.3
info:
  title: Tether Relay and Tether API
  version: 1.0.0
  description: >-
    Route-derived OpenAPI contract generated from tether-relay backend sources.
    Regenerate with scripts/sync-openapi-from-backend.mjs.
servers:
  - url: https://your-instance.example.com
    description: Production
  - url: http://localhost:2212
    description: Local API service
security: []
tags:
  - name: AI
  - name: Applications
  - name: Approval
  - name: Auth
  - name: Automations
  - name: Calls
  - name: Campaigns
  - name: Contact Analytics
  - name: Contact Metrics
  - name: Contact Notes
  - name: Contacts
  - name: Conversation Monitor
  - name: Conversations
  - name: Departments
  - name: Email
  - name: Escalation Dashboard
  - name: Event Logs
  - name: Google Sheets
  - name: Marketplace
  - name: Messages
  - name: Notification Sounds
  - name: Notifications
  - name: Org Snapshots
  - name: Organizations
  - name: Outreach
  - name: Outreach Metrics
  - name: Outreach Sources
  - name: Pipelines
  - name: Processes
  - name: Prompts
  - name: Reminders
  - name: Sms
  - name: Templates
  - name: Traces
  - name: Training
  - name: Upload
  - name: User Snapshots
  - name: Users
  - name: Vertical
  - name: Webchats
  - name: Webhook
paths:
  /api/webhook/calls/sinch:
    post:
      tags:
        - Webhooks
      summary: Handle Sinch voice call webhook
      description: >-
        Inbound voice call webhook posted by Sinch for ICE (Incoming Call
        Event), ACE (Answered Call Event), and DiCE (Disconnect Event). For ICE
        the endpoint returns SVAML instructing Sinch how to route/record the
        call; for ACE and DiCE it updates the Call record and acknowledges
        receipt.
      operationId: post_webhook_calls_sinch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SinchCallWebhookRequest'
      responses:
        '200':
          description: >-
            SVAML response. For Incoming Call Event (ICE) the body carries a
            routing `action` (`connectConf`, `hangup`, etc.); for ACE/DiCE the
            body is empty.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SinchCallWebhookSvamlResponse'
        '500':
          description: Call webhook processing failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookErrorResponse'
components:
  schemas:
    SinchCallWebhookRequest:
      type: object
      properties:
        event:
          type: string
          description: >-
            Voice event discriminator: `ice` (incoming call), `ace` (answered),
            `dice` (disconnect).
        callId:
          type: string
          description: >-
            Sinch-assigned call identifier used to correlate ICE/ACE/DiCE events
            for one call.
        callResourceUrl:
          type: string
          description: >-
            Sinch REST URL for the call resource — used for follow-up API
            operations (e.g. hangup).
      additionalProperties: true
      example:
        event: ice
        callId: a8d3c4e0-9b2f-4e1a-b3c4-5f6a7b8c9d01
        callResourceUrl: >-
          https://calling.api.sinch.com/v1/calls/a8d3c4e0-9b2f-4e1a-b3c4-5f6a7b8c9d01
    SinchCallWebhookSvamlResponse:
      type: object
      description: >-
        SVAML response Sinch interprets to route the call. Only Incoming Call
        Event (ICE) returns a populated `action`; ACE / DiCE branches return an
        empty object or omit `action`.
      properties:
        action:
          $ref: '#/components/schemas/SinchCallSvamlAction'
      additionalProperties: true
      example:
        action:
          name: connectConf
          conferenceId: org-64a1b-room-42
          cli: '+12362320246'
    WebhookErrorResponse:
      type: object
      description: >-
        Error envelope used across provider webhook routes. Most failures only
        carry `error`; a few (ElevenLabs tool errors, ingress validation) add
        `success:false`, `message`, or a `code`. Many of these endpoints respond
        200 with `success:false` for recoverable cases (especially the
        ElevenLabs server tools) — only hard failures use 4xx/5xx.
      properties:
        error:
          type: string
        message:
          type: string
        success:
          type: boolean
          enum:
            - false
        code:
          type: string
        details:
          description: Optional diagnostic detail (stack snippet, validation issues, etc.).
      additionalProperties: true
      example:
        error: Webhook processing failed
    SinchCallSvamlAction:
      type: object
      description: >-
        One SVAML action (Sinch Voice Application Markup Language) instructing
        Sinch how to route the call.
      properties:
        name:
          type: string
          description: 'Action name: `connectConf`, `hangup`, `playAudio`, etc.'
      required:
        - name
      additionalProperties: true
      example:
        name: connectConf

````