POST to your endpoint, HMAC-signed so you can verify it came from us.
V3 webhook endpoints
This page documents the legacy V2 subscription API below. For V3 endpoint registration, signing, verification, rotation, and delivery behaviour, see Webhook endpoints. The V2 and V3 signing contracts are different and cannot be used interchangeably. A V3 account can retain up to 25 endpoint records, including disabled endpoints. Delete a disabled endpoint to recover capacity; deleting it also retires its signing secret.Register a subscription
POST /api/v2/buyer/webhook-subscriptions
curl
Response (
201):
secret back — store it when you register.
List subscriptions
GET /api/v2/buyer/webhook-subscriptions
Returns every subscription for your account, newest first. Same subscription shape as above, minus the secret.
Delete a subscription
DELETE /api/v2/buyer/webhook-subscriptions/{id}
Deliveries stop immediately. Returns 404 if the id doesn’t exist or belongs to another account.
Verifying deliveries
Every delivery carries anX-Webhook-Signature header: the hex-encoded HMAC-SHA256 of the exact request body, keyed with your subscription’s secret. Recompute it and compare before trusting the payload:
sha256= prefix in this scheme, and the signed message is the body alone. The inbound seller callback scheme differs on all three points.
Retry semantics
A delivery is a singlePOST attempt per event. If your endpoint doesn’t respond with a 2xx status, the attempt counts as a failure — it is not retried inline, since push events like discovery.revision are time-sensitive and a delayed retry would deliver stale state. Instead:
- Each failure increments
failureCounton the subscription. - After 10 consecutive failures, the subscription’s
statusflips tofailedand delivery stops. List your subscriptions to checkstatus,failureCount, andlastFailure, then delete and re-register once your endpoint is healthy again. - A successful delivery resets
failureCountto zero.
discovery.revision, that’s Browse products with sinceRevision).
Event catalog
discovery.revision is one payload contract delivered over two transports: hold a connection open and use the SSE stream, or register a webhook if you’d rather not. The payload shape is identical either way — productGroups contains only groups that landed since the previous event we sent for that session (replace-by-groupId semantics) — if a delivery failed, catch up by polling as described above, resultsComplete: true marks the final event for that discovery session. revision always increases but can skip numbers: when several sellers answer at nearly the same moment, one event carries all of their groups.
Errors
401 UNAUTHORIZED— missing or invalid auth.400 VALIDATION_ERROR— invalidurl,secretshorter than 16 characters, or emptyeventTypes.404 NOT_FOUND— (delete only) no subscription with this id for your account.
Related
Stream discovery events
The SSE-equivalent of discovery.revision for a held-open connection
Browse products
Poll for the same revisions if you’d rather not use push at all