agent_id yourself. The payload of every event type is on webhook events.
Create a webhook
A webhook also carries
status (active or disabled), last_status (delivered or failed) and last_delivered_at. PATCH /v1/webhooks/{webhook_id} changes url, subscribed_events or status; a disabled webhook receives nothing. DELETE removes it.
Verify the signature
Each request carriesContent-Type: application/json, User-Agent: talqing-webhooks/1 and:
Compute the HMAC over the exact body bytes before parsing; re-serialized JSON will not match. Compare in constant time.
Delivery rules
- Answer within five seconds. Verify, enqueue, return
2xx, then do the work. - Treat webhooks as a notification, not the record. Run a periodic sweep over
GET /v1/callswithstartandendto catch anything missed, and use the delivery log to see which events failed. - Point at the final URL. The connection is pinned to the address that passed the public-address check. A private, loopback, link-local, reserved or metadata address is refused at save (
400 url not allowed: …) and logged asblocked destination: …if DNS changes later.
Delivery log
GET /v1/webhooks/{webhook_id}/deliveries lists attempts newest first, in the standard page shape (default 50, max 200).
Test-fire
POST /v1/webhooks/{webhook_id}/test sends one signed webhook.test event ({"message": "talqing test event", "webhook_id": "…"}) and returns {webhook_id, status, status_code, error} with what your endpoint answered. It ignores subscribed_events, is written to the delivery log, and is refused for a disabled webhook (400 webhook is disabled; enable it before testing).
Rotate the secret
POST /v1/webhooks/{webhook_id}/rotate-secret returns the webhook with a new plaintext secret.
In the dashboard
Webhooks lists each subscription with its status, URL, events and secret hint. Creating one shows the plaintext secret once. Each row has Test, Enable/Disable, Log (the delivery history) and Delete.Webhook events
The envelope and every event’s payload.
Calls
The same facts as
session.completed, on demand.