POST to your endpoint: accepted, delivered, deferred, bounced,
complained.
Verify the signature
Every delivery is signed inkourio-signature. Verify it before trusting the body — without
that, anyone who discovers your URL can forge an event and, for example, mark an order as
delivered.
Use the raw body. If you verify the signature over an already-parsed and re-serialized
object, key order or one extra space changes the bytes and the check fails for a reason that
has nothing to do with security.
Answer fast
Return200 as soon as you receive it and process afterwards. A slow endpoint becomes a retry,
and a retry becomes a duplicate event in your system.
Treat events as at least once: the same event can arrive twice. The event id is what lets you
ignore the second one.
When an event does not arrive
GET /v1/webhooks/{id}/deliveries brings each attempt with the status code and the body your
server returned. It is what answers “why didn’t it arrive” without depending on your logs.