X-Grid-Signature) and
retry behavior are identical to the rest of Grid — see
Authentication and
Webhooks for the underlying mechanics.
One covers the card itself; the others cover a card transaction’s
lifecycle.
Event types
All of them carry the standard envelope:
id is unique per delivery and safe to use for idempotency.
CARD.STATE_CHANGE
Thedata payload is the post-change Card resource. Example —
activation after issuance:
state: "ACTIVE"afterPROCESSING— the card is live. To reveal the full card details, request a reveal withPOST /cards/{id}/revealright before rendering its short-livedpanEmbedUrlin an iframe — webhook payloads never carry a reveal URL.state: "CLOSED",stateReason: "ISSUER_REJECTED"— the issuer rejected provisioning; offer to issue a new card.state: "FROZEN"/state: "ACTIVE"— reflect the freeze toggle in your UI.state: "CLOSED",stateReason: "CLOSED_BY_PLATFORM"— close confirmed; stop showing the card.
Card-transaction lifecycle
EachCARD_TRANSACTION.* event carries the full CardTransaction
resource. Not every delivery changes status: a merchant return has no
event type of its own and re-fires CARD_TRANSACTION.SETTLED with the
same status, so treat a repeated SETTLED as a new update and read
refundedAmount to tell it apart from the original settlement. See
Reconciliation for the
underlying event model.
Idempotency & retries
Webhook deliveries are at-least-once. Track processedid values and
return 200 on duplicates, or return 409 and let Grid stop
retrying. Both shapes are accepted by Grid’s webhook infrastructure.