Skip to content

Webhooks ​

Where Talkline sends what it knows, and what it sent.

List webhook endpoints, newest first ​

GET /v1/webhooks

Credential: API key — Authorization: Bearer <api_key>.<api_secret>
Rate limit: read, 600 a minute

Parameters

NameInTypeDescription
limit?queryinteger1–100. Default 20.
cursor?querystringThe nextCursor of the previous page. 1–512 characters.

Response 200 — A page of endpoints.

FieldTypeDescription
dataWebhookEndpoint[]
nextCursorstring | nullThe cursor for the next page; null on the last.

Errors

StatusCode
400validation_failed, token_ttl_too_long
401unauthenticated, token_expired, token_replayed, token_not_yet_valid
403permission_denied, app_suspended, quota_exhausted
429rate_limited
500internal

Register a webhook endpoint ​

POST /v1/webhooks

https on the public internet only, checked here and again at every delivery attempt; a development deployment can allow http and private addresses (WEBHOOK_ALLOW_PRIVATE). The signing secret is in this response and a rotation's, and nowhere else. A URL already registered is not found again: this makes a second endpoint, and each event then reaches both. At most 16 per application; the seventeenth is 409 conflict.

Credential: API key — Authorization: Bearer <api_key>.<api_secret>
Rate limit: write, 120 a minute

Request body application/json

FieldTypeDescription
urlstringhttps, on the public internet. 1–2048 characters.
events?string[]Each one of room.started, room.finished, participant.joined, participant.left, call.ringing, call.answered, call.ended, call.missed, call.rejected, call.cancelled, queue.entered, queue.assigned, queue.abandoned, queue.overflowed, recording.started, recording.finished, recording.failed, usage.threshold, *. 1–19 items. Default ["*"].

Response 201 — The endpoint, with its signing secret.

FieldTypeDescription
idstring (uuid)
urlstring (uri)
eventsstring[]* is every event, including those added later. Each one of room.started, room.finished, participant.joined, participant.left, call.ringing, call.answered, call.ended, call.missed, call.rejected, call.cancelled, queue.entered, queue.assigned, queue.abandoned, queue.overflowed, recording.started, recording.finished, recording.failed, usage.threshold, *.
statusstringfailing is the platform's to set, after twenty consecutive failed attempts. One of active, paused, failing.
createdAtstring (date-time)
updatedAtstring (date-time)
secretstringThe signing secret — in the answers to registration and rotation, and nowhere else. Matches ^whsec_.

Errors

StatusCode
400validation_failed, token_ttl_too_long
401unauthenticated, token_expired, token_replayed, token_not_yet_valid
403permission_denied, app_suspended, quota_exhausted
409conflict, room_full, room_closed, duplicate_identity, already_answered
413payload_too_large
429rate_limited
500internal

Read a webhook endpoint ​

GET /v1/webhooks/{id}

Credential: API key — Authorization: Bearer <api_key>.<api_secret>
Rate limit: read, 600 a minute

Parameters

NameInTypeDescription
idpathstring (uuid)

Response 200 — The endpoint.

FieldTypeDescription
idstring (uuid)
urlstring (uri)
eventsstring[]* is every event, including those added later. Each one of room.started, room.finished, participant.joined, participant.left, call.ringing, call.answered, call.ended, call.missed, call.rejected, call.cancelled, queue.entered, queue.assigned, queue.abandoned, queue.overflowed, recording.started, recording.finished, recording.failed, usage.threshold, *.
statusstringfailing is the platform's to set, after twenty consecutive failed attempts. One of active, paused, failing.
createdAtstring (date-time)
updatedAtstring (date-time)
secret?stringThe signing secret — in the answers to registration and rotation, and nowhere else. Matches ^whsec_.

Errors

StatusCode
400validation_failed, token_ttl_too_long
401unauthenticated, token_expired, token_replayed, token_not_yet_valid
403permission_denied, app_suspended, quota_exhausted
404not_found, room_not_found, identity_not_found
429rate_limited
500internal

Change an endpoint's URL, events or status ​

PATCH /v1/webhooks/{id}

Setting active on a paused or failing endpoint is how a human resumes it: its failure streak starts again from nothing, and every delivery it held goes out now, once each.

Credential: API key — Authorization: Bearer <api_key>.<api_secret>
Rate limit: write, 120 a minute

Parameters

NameInTypeDescription
idpathstring (uuid)

Request body application/json

FieldTypeDescription
url?string1–2048 characters.
events?string[]Each one of room.started, room.finished, participant.joined, participant.left, call.ringing, call.answered, call.ended, call.missed, call.rejected, call.cancelled, queue.entered, queue.assigned, queue.abandoned, queue.overflowed, recording.started, recording.finished, recording.failed, usage.threshold, *. 1–19 items.
status?stringactive resumes a paused or failing endpoint. One of active, paused.

Response 200 — The endpoint, as it now stands.

FieldTypeDescription
idstring (uuid)
urlstring (uri)
eventsstring[]* is every event, including those added later. Each one of room.started, room.finished, participant.joined, participant.left, call.ringing, call.answered, call.ended, call.missed, call.rejected, call.cancelled, queue.entered, queue.assigned, queue.abandoned, queue.overflowed, recording.started, recording.finished, recording.failed, usage.threshold, *.
statusstringfailing is the platform's to set, after twenty consecutive failed attempts. One of active, paused, failing.
createdAtstring (date-time)
updatedAtstring (date-time)
secret?stringThe signing secret — in the answers to registration and rotation, and nowhere else. Matches ^whsec_.

Errors

StatusCode
400validation_failed, token_ttl_too_long
401unauthenticated, token_expired, token_replayed, token_not_yet_valid
403permission_denied, app_suspended, quota_exhausted
404not_found, room_not_found, identity_not_found
413payload_too_large
429rate_limited
500internal

Remove an endpoint, with its deliveries ​

DELETE /v1/webhooks/{id}

Credential: API key — Authorization: Bearer <api_key>.<api_secret>
Rate limit: write, 120 a minute

Parameters

NameInTypeDescription
idpathstring (uuid)

Response 204 — Removed.

Errors

StatusCode
400validation_failed, token_ttl_too_long
401unauthenticated, token_expired, token_replayed, token_not_yet_valid
403permission_denied, app_suspended, quota_exhausted
404not_found, room_not_found, identity_not_found
429rate_limited
500internal

Rotate an endpoint's signing secret ​

POST /v1/webhooks/{id}/secret

Every attempt from now on is signed with the new secret, retries included.

Credential: API key — Authorization: Bearer <api_key>.<api_secret>
Rate limit: write, 120 a minute

Parameters

NameInTypeDescription
idpathstring (uuid)

Response 200 — The endpoint, with its new secret.

FieldTypeDescription
idstring (uuid)
urlstring (uri)
eventsstring[]* is every event, including those added later. Each one of room.started, room.finished, participant.joined, participant.left, call.ringing, call.answered, call.ended, call.missed, call.rejected, call.cancelled, queue.entered, queue.assigned, queue.abandoned, queue.overflowed, recording.started, recording.finished, recording.failed, usage.threshold, *.
statusstringfailing is the platform's to set, after twenty consecutive failed attempts. One of active, paused, failing.
createdAtstring (date-time)
updatedAtstring (date-time)
secretstringThe signing secret — in the answers to registration and rotation, and nowhere else. Matches ^whsec_.

Errors

StatusCode
400validation_failed, token_ttl_too_long
401unauthenticated, token_expired, token_replayed, token_not_yet_valid
403permission_denied, app_suspended, quota_exhausted
404not_found, room_not_found, identity_not_found
429rate_limited
500internal

The endpoint's delivery log, newest first ​

GET /v1/webhooks/{id}/deliveries

Credential: API key — Authorization: Bearer <api_key>.<api_secret>
Rate limit: read, 600 a minute

Parameters

NameInTypeDescription
idpathstring (uuid)
limit?queryinteger1–100. Default 20.
cursor?querystringThe nextCursor of the previous page. 1–512 characters.
status?querystringOne of pending, delivered, failed, abandoned.

Response 200 — A page of deliveries.

FieldTypeDescription
dataDelivery[]
nextCursorstring | nullThe cursor for the next page; null on the last.

Errors

StatusCode
400validation_failed, token_ttl_too_long
401unauthenticated, token_expired, token_replayed, token_not_yet_valid
403permission_denied, app_suspended, quota_exhausted
404not_found, room_not_found, identity_not_found
429rate_limited
500internal

Talkline documentation