Change delivery
Sent to each endpoint registered on a watchlist, once a day at 05:30 UTC, when that list has changes the endpoint has not yet received. Nothing is sent on a day with no changes.
Verify the signature before parsing the body — see Webhooks in the introduction for the X-Apino-Signature scheme and a worked implementation. Compute the HMAC over the raw bytes: re-serialising the JSON changes them and the signature will not match.
This is declared as an OpenAPI 3.1 webhook so tooling and code generators see it. The Scalar reference does not render the webhooks section, which is why the payload is also written out under Webhooks in the introduction — that is the copy a reader will actually find.
event_id is stable across retries. A failed delivery leaves the cursor where it was, so the retry covers the same window and carries the same id. Deduplicate on it — a receiver that acts twice on one id will act twice on the same change.
Deliveries are retried three times with backoff. Redirects are never followed: a redirect is a second URL nobody checked.
Payload
Response
Any 2xx marks the delivery received and advances the endpoint's cursor. Anything else is retried; five failed runs pause the endpoint.
Changes
Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.