Test a voice number's callback URL
Sends a synthetic call.request question, flagged "test": true, to the number's callback URL, signed with that number's real secret, and reports what came back. Use it to build and debug your callback endpoint without placing calls: no call is placed, nothing is billed, and nothing is stored. One attempt with the same deadline as a live call, no retry. The outcome is ok when your endpoint answered 2xx with a valid answer; otherwise it is timeout, connection_failed, http_error or invalid_answer, with the reason and, for an invalid answer, the field at fault. The number is the E.164 value in the path with the plus sign URL-encoded (%2B).
With sandbox: true nothing is sent: the verdict comes back ok with 202 and no request or response in it.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v3/channels/voice/+12025550123/test" \ -H "Idempotency-Key: req_abc123_retry1" \ -H "Content-Type: application/json" \ -d '{ "sandbox": false }'{
"success": true,
"data": {
"outcome": "ok",
"call_id": "call_9f2ab000-0000-4000-8000-000000000001",
"request": {
"url": "https://example.com/voice",
"headers": {
"User-Agent": "SentDM-Voice/1.0",
"X-Webhook-ID": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"X-Webhook-Timestamp": "1784721600",
"X-Webhook-Signature": "v1,xJ/WfHm26o0BBWZ/SIDmZio7C3BbqlcbxvO/QIZpjUA=",
"X-Request-Id": "req_7X9zKp2jDw"
},
"body": "{\"type\":\"call.request\",\"version\":\"1\",\"callId\":\"call_9f2ab000-0000-4000-8000-000000000001\",\"number\":\"+12025550123\",\"timestamp\":\"2026-07-22T12:00:00+00:00\",\"test\":true,\"direction\":\"outbound\",\"from\":{\"kind\":\"user\",\"identity\":\"test-user\"},\"to\":{\"kind\":\"number\",\"number\":\"+12025550142\"}}"
},
"response": {
"status_code": 200,
"body": "{ \"action\": { \"action\": \"connectToUser\", \"identity\": \"agent-42\" } }"
},
"answer": {
"valueKind": "Object"
},
"error": null
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-10-06T09:10:22.6907134+00:00",
"version": "v3"
}
}{
"success": true,
"data": {
"outcome": "string",
"call_id": "string",
"request": {
"url": "string",
"headers": {
"property1": "string",
"property2": "string"
},
"body": "string"
},
"response": {
"status_code": 0,
"body": "string"
},
"answer": {},
"error": {
"reason": "string",
"path": "string",
"message": "string"
}
},
"error": {
"code": "string",
"message": "string",
"details": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"doc_url": "string"
},
"meta": {
"request_id": "string",
"timestamp": "2019-08-24T14:15:22Z",
"version": "string"
}
}{
"success": false,
"data": null,
"error": {
"code": "BUSINESS_024",
"message": "Phone number is not voice-enabled for this account",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-10-06T09:10:22.6907161+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "BUSINESS_023",
"message": "Phone calls are not enabled for this account",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-10-06T09:10:22.6907169+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "INTERNAL_001",
"message": "An unexpected error occurred while testing the callback URL",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-10-06T09:10:22.6907173+00:00",
"version": "v3"
}
}Rotate a voice number's callback secret POST
Generates a new signing secret for the questions Sent sends to this number's callback URL and returns it. The previous secret stops signing immediately, so update your backend before the next call reaches it. The number is the E.164 value in the path with the plus sign URL-encoded (`%2B`). With `sandbox: true` a secret is generated and returned with `202`, and nothing is written.
Create a voice token POST
Mints a short-lived token for one of your app users. Call this from your backend and return the token to your app, which passes it to the voice client SDK to register. The identity is bound to the given number, or to your default app-call number when omitted, and calls placed by that identity are routed through the bound number. Minting again re-binds the identity, so an identity can move between numbers.