Recent events (newest first, 30-day retention)
The reconciliation path when a webhook delivery was missed, and the debugging path for "what exactly did Tone send". Deliveries are at-least-once and unordered, so dedupe on the event id.
Requires the read scope. A key with less gets 403 insufficient_scope.
Authorization: Bearer tone_live_… or tone_test_…. The prefix IS the environment: a test key reaches only the sandbox, and no request field bridges the two.
In: header
Query Parameters
How many results to return. 1-100, defaulting to 25.
1 <= value <= 10025Only events of this type, for example call.completed. Treat the set as open — new types are added without notice.
length <= 64Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/events"{ "data": [ { "createdAt": "2026-08-25T09:14:22Z", "delivery": { "attempts": 0, "deliveredAt": "2026-08-25T09:14:03Z", "endpointId": "2b7c1d90-4e5f-4a6b-8c9d-0e1f2a3b4c5d", "lastStatus": 0, "status": "pending" }, "id": "9f1c2d84-4e3a-4f6c-b902-7d1e8a33c451", "subjectId": "9f1c2d84-4e3a-4f6c-b902-7d1e8a33c451", "subjectType": "call", "type": "call.initiated" } ]}One event, with its payload re-rendered from current state
⚠️ The payload is RE-RENDERED from the resource as it stands now, not replayed from the signed bytes that were delivered. A transcript that landed after delivery will be present here and absent from what your endpoint received. Use it to understand an event, not to re-verify a signature.
Add a webhook endpoint
Must be a public https:// URL — private and link-local addresses are refused at save time rather than discovered at delivery time. The signing secret is returned once, here. Subscribe only to what you consume: every delivery is retried up to 14 times over roughly a day.