Skip to main content
Every delivery is signed with HMAC-SHA256 and retried if your endpoint is down.

Events

From the dashboard

Everything below is also available without writing code. Open a space in the dashboard and pick the Webhooks tab, where you can add and edit endpoints, choose which events they receive, pause one without deleting it, and read the delivery log for a receiver that is not responding.
The signing secret is shown once, immediately after you add the webhook. It is never displayed again, in the dashboard or in the API.

Register a webhook

Response 201 Created
secret is returned only here, only once. Store it now: you need it to verify signatures, and it is null on every other response.

Delivery format

The data object varies by event: Fields with no value are omitted rather than sent as null. Respond with any 2xx status to acknowledge. Anything else counts as a failure and is retried.

Verifying signatures

X-Anona-Signature is sha256= followed by the HMAC-SHA256 of the raw request body, keyed with your webhook secret. Compare it in constant time, never with == on the raw strings.
Sign the raw bytes. Parsing the JSON and re-serializing it changes key order and whitespace, which changes the hash. This is the most common reason verification fails.

Retries

A delivery is attempted up to 6 times over roughly 7 hours, then marked failed. Deliveries are at-least-once: a receiver that times out after doing its work still gets retried. Make your handler idempotent on operation_id.

Timing and ordering

Pair webhooks with "async": true on POST /v1/record. Async ingestion returns a job_id straight away instead of holding the request open while memories are extracted and indexed, and the webhook is then how you learn it finished. No polling at all.

List webhooks

Update a webhook

Only the fields you send are changed. Returns the updated webhook.

Delete a webhook

Returns 204 No Content. Queued deliveries for that webhook stop.

Debugging deliveries

When a receiver is not working, inspect the attempts:
Pass next_cursor back as cursor to page through older deliveries.

Errors

See Errors for the general error shape.