List calls
Retrieves a paginated list of your calls, most recent first. Filter by direction, status, the owning number, and the time the call started (from and to are inclusive). Use the call webhooks for real-time updates; this list is for looking calls up afterwards.
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v3/calls?page=1&page_size=20&direction=outbound&status=COMPLETED&number=%2B12025550123&from=2026-07-22T00%3A00%3A00%2B00%3A00&to=2026-07-22T23%3A59%3A59%2B00%3A00"{
"success": true,
"data": {
"calls": [
{
"id": "call_9f2ab000-0000-4000-8000-000000000001",
"direction": "outbound",
"from": {
"kind": "user",
"value": "agent-42"
},
"to": {
"kind": "number",
"value": "+12025550142"
},
"number": "+12025550123",
"status": "COMPLETED",
"failure_reason": null,
"started_at": "2026-07-22T12:00:00+00:00",
"answered_at": "2026-07-22T12:00:05+00:00",
"ended_at": "2026-07-22T12:00:47+00:00",
"duration_seconds": 42,
"price": null,
"recording_available": false,
"timeline": null
}
],
"pagination": {
"page": 1,
"page_size": 20,
"total_count": 1,
"total_pages": 1,
"has_more": false,
"cursors": null
}
},
"error": null,
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-10-06T09:10:22.7083339+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "VALIDATION_001",
"message": "Request validation failed",
"details": {
"status": [
"'status' must be one of: INITIATED, RINGING, ANSWERED, COMPLETED, FAILED, NO_ANSWER, REJECTED"
]
},
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-10-06T09:10:22.7083415+00:00",
"version": "v3"
}
}{
"success": false,
"data": null,
"error": {
"code": "INTERNAL_001",
"message": "An unexpected error occurred while retrieving calls",
"details": null,
"doc_url": "https://docs.sent.dm/reference/api/error-catalog"
},
"meta": {
"request_id": "req_7X9zKp2jDw",
"timestamp": "2026-10-06T09:10:22.708342+00:00",
"version": "v3"
}
}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.
Get a call GET
Retrieves one of your calls by id: the parties, the owning number, the current status with its failure reason, duration, price, recording availability, and a timeline of when the call entered each status.