Skip to main content

Event envelope

Generated from COPE public event contracts. Do not edit this page by hand.
Every webhook delivery is one signed JSON object. The event body is data; the other six fields say which event it is and when.

Envelope Fields

Which time to use

  • Freshness: occurred_at. It is when COPE recorded the event, to the millisecond, and every retry and replay of the event repeats it. Use it to tell how old the information in a delivery is, and to put events in their approximate order.
  • It is not a strict order. Two events about the same resource can carry the same occurred_at, and deliveries can arrive in any order. Where a body states the state it describes — for example approval_status and previous_approval_status in cart.product.approval_status.changed — compare that state rather than times. No event body carries a sequence number.
  • created_at is this attempt. It changes on every retry and replay. Use it to see how long an event waited to reach you, not to order events.
  • A body’s own occurred_at (for example in cart.order.completed or payment.*) is the business time of that fact, such as when a payment failed. It can be earlier than the envelope’s occurred_at, which is when COPE recorded the event.
Deliveries COPE queued before the envelope gained occurred_at (October 2026) carry, in occurred_at, the time COPE first queued or attempted that delivery — a queue time, not when the event happened — and every later retry and replay of it repeats that value.