Skip to content
Linq

Webhook Endpoints

Register the URLs your brand receives events on, choose which events each one gets, and rotate its signing secret — all from the API.

List webhook endpoints
GET/v1/webhook_endpoints
Create a webhook endpoint
POST/v1/webhook_endpoints
Get a webhook endpoint
GET/v1/webhook_endpoints/{wh}
Update a webhook endpoint
PATCH/v1/webhook_endpoints/{wh}
Delete a webhook endpoint
DELETE/v1/webhook_endpoints/{wh}
Rotate a webhook endpoint's secret
POST/v1/webhook_endpoints/{wh}/rotate_secret
Replay past events to a webhook endpoint
POST/v1/webhook_endpoints/{wh}/replay
ModelsExpand Collapse
WebhookEndpoint object { id, created_at, description, 3 more }

A URL your brand receives signed events on.

id: string

wh_….

created_at: string
formatdate-time
description: string

Your own label. Free text, ≤200 bytes, never interpreted.

enabled_events: array of string

The event types this endpoint receives. Exact names: no wildcards.

status: "enabled" or "disabled"

enabled while it receives deliveries, disabled once you turn it off. A disabled endpoint keeps its secret and its history and resumes on PATCH {"disabled": false}.

One of the following:
"enabled"
"disabled"
url: string

Absolute https URL every delivery for this endpoint is POSTed to.

WebhookEndpointWithSecret object { id, created_at, description, 4 more }

A newly created or newly rotated endpoint. The secret is on this response and on no other; store it now; it is never readable again, and a lost secret is replaced by rotating rather than by looking it up.

id: string

wh_….

created_at: string
formatdate-time
description: string

Your own label. Free text, ≤200 bytes, never interpreted.

enabled_events: array of string

The event types this endpoint receives. Exact names: no wildcards.

secret: string

whsec_…. Sign-verify every delivery with it. Shown once.

status: "enabled" or "disabled"

enabled while it receives deliveries, disabled once you turn it off. A disabled endpoint keeps its secret and its history and resumes on PATCH {"disabled": false}.

One of the following:
"enabled"
"disabled"
url: string

Absolute https URL every delivery for this endpoint is POSTed to.

WebhookEndpointListResponse object { data, next_cursor }
data: array of WebhookEndpoint { id, created_at, description, 3 more }
id: string

wh_….

created_at: string
formatdate-time
description: string

Your own label. Free text, ≤200 bytes, never interpreted.

enabled_events: array of string

The event types this endpoint receives. Exact names: no wildcards.

status: "enabled" or "disabled"

enabled while it receives deliveries, disabled once you turn it off. A disabled endpoint keeps its secret and its history and resumes on PATCH {"disabled": false}.

One of the following:
"enabled"
"disabled"
url: string

Absolute https URL every delivery for this endpoint is POSTed to.

next_cursor: string

Empty when the list is exhausted. Always present.

WebhookEndpointReplayResponse object { created, not_found, not_subscribed, 2 more }

What a replay did.

When you name event_ids, the four counts add up to the number of DISTINCT ids you sent, so nothing you pointed at goes unaccounted for. Naming the same id twice names one event.

created: number

Deliveries created. These are queued behind whatever live traffic the chat has.

formatint32
not_found: number

Ids you named with no event of yours behind them: a typo, or an event old enough to have been swept. Always 0 for a range.

formatint32
not_subscribed: number

Events you named that this endpoint does not subscribe to, so they were never in scope for it. Always 0 for a range, where the subscription narrows the window rather than rejecting something you pointed at.

formatint32
request_id: string

This request’s id, rpl_…. Every delivery it created carries it as replay_of.

skipped: number

Events skipped because this endpoint already has a delivery for them.

formatint32