There is no
Idempotency-Key header on this API. You don’t generate or send idempotency keys. Safety is a
property of each operation, described below — not something you opt into per request.Order decisions are replay-safe
Repeating an order decision —accept, deny, ready, complete, cancel, or status — returns the same acknowledgement without applying the side effect twice:
accept and the response times out, send it again. The order is accepted exactly once, and you get { "status": "received" } either way. This makes a simple retry-on-transient-error loop correct without any bookkeeping on your side.
Publishing a menu is a diff
A menu publish describes the desired state of the whole menu and is applied as a diff against what’s currently published, keyed by yourexternalIds:
- Re-publishing an identical document is a no-op.
- Object identities stay stable across publishes by
externalId, so republishing doesn’t recreate or churn objects. - Validation is all-or-nothing — a
400changes nothing, so a failed publish leaves the menu exactly as it was.
Replaying an event is idempotent
POST /v1/webhook_events/{eventId}/replay re-delivers an event only to subscriptions that haven’t already received it. Subscriptions that already got it are skipped, so replaying after an outage won’t double-deliver to healthy endpoints.
Your side: dedupe deliveries
The one place you must add idempotency is your webhook handler. Delivery is at-least-once, so the same event can arrive more than once. Dedupe on the envelopeid:
order_id so a duplicate order.notification updates rather than duplicates. Don’t rely on event ordering; reconcile against GET /v1/orders/{orderId} when sequence matters. See Webhooks.
Summary
| Operation | Safe to retry? | Why |
|---|---|---|
| Order decisions | Yes | Replay-safe; repeats return received with no double effect |
| Menu publish | Yes | Diff-applied; identical re-publish is a no-op |
| Event replay | Yes | Skips subscriptions already delivered to |
| Receiving webhooks | You dedupe | At-least-once delivery — dedupe on event id |