---
title: "Twilio Voice Status"
method: POST
path: "/api/channels/twilio/voice/status"
tags: ["channels", "channels", "twilio-voice"]
---

# Twilio Voice Status

`POST /api/channels/twilio/voice/status`

## Request

- Base URL: `https://api.dialogbrain.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.dialogbrain.com/api/channels/twilio/voice/status`
- Auth: none declared

Handle Twilio call status callbacks.

Order (strict — no workspace write before signature verify):
  1. Resolve workspace_id via ?ws= query, fall back to voice_call_routing
     on shared DB, 404 if neither resolves.
  2. Read-only load of channel_account.state.twilio_auth_token via
     voice_sessions on the workspace DB.
  3. Validate X-Twilio-Signature over reconstructed public URL
     (X-Forwarded-Proto + X-Forwarded-Host + path + full query incl. ?ws=).
     - token present, signature valid → pass
     - token present, signature missing/invalid → 403
     - token absent in DB → allow + WARNING (surfaces misconfig, keeps
       status transitions flowing; matches /voice/incoming posture)
  4. UPDATE voice_sessions on workspace session (AND workspace_id = :ws).

## Response `200`

Successful Response

- unknown

---

[API](https://skmtc.dev/dialogbrain/apis/dialogbrain-v2-api-gateway.md) · [All operations](https://skmtc.dev/dialogbrain/apis/dialogbrain-v2-api-gateway/llms.txt) · [OpenAPI document](https://skmtc.dev/dialogbrain/apis/dialogbrain-v2-api-gateway/revisions/d84e7dc9977d?raw)
