Events reference

The complete catalog of webhook events GIFQ sends, across both domains.

Every event GIFQ sends, in one table. They all share the transport, signing, and delivery rules on Overview.

There are 14 event names across two domains.

payout.* events report one payout moving through its lifecycle, split across crypto sends and gift cards. See Payout events.

recipient.* events report the recipient's entitlement as a whole. See Recipient events.

There is no subscription model. Every event below fires for any payout order that has a callback_url.

Routing

🚧

Three event names fire for both payout types

Crypto sends and gift cards share payout.processing, payout.failed, and payout.cancelled, and the bodies are structurally different. Route on event and payout_type together. Every other name belongs to exactly one payout type.

All events

EventDomainpayout_typeFires whenBody
payout.quote_createdpayoutcryptoAn FX quote is issued for a senddata
payout.quote_confirmedpayoutcryptoThe recipient confirms a cross-currency quotedata
payout.quote_cancelledpayoutcryptoThe recipient cancels an open quotedata
payout.in_progresspayoutcryptoThe send is accepted and no funds have moveddata
payout.processingpayoutcrypto | gift_cardsFX is in flight or the chain broadcast is pending, or a gift card has been requested from the branddata | envelope
payout.completedpayoutcryptoThe send is finalized on chaindata
payout.fulfilledpayoutgift_cardsA gift card was issued to the recipientenvelope
payout.failedpayoutcrypto | gift_cardsThe send did not go through, or gift-card issuance faileddata | envelope
payout.expiredpayoutcryptoNobody actioned the send inside its windowdata
payout.cancelledpayoutcrypto | gift_cardsThe send was cancelled with no funds moved, or a gift card was cancelleddata | envelope
recipient.viewedrecipientgift_cardsThe recipient first opened their claim linkenvelope
recipient.partially_redeemedrecipientgift_cardsThe recipient redeemed some of their balanceenvelope
recipient.redeemedrecipientcrypto | gift_cardsThe entitlement is fully redeemedenvelope
recipient.expiredrecipientgift_cardsThe entitlement lapsed with balance unspentenvelope

Three names fire for both payout types and carry a different body for each. Their event pages split into Crypto and Gift cards sections.

data means the three-key crypto body of event, payout_type, and data. envelope means the flat gift-card body. See Two body shapes.

Events we do not send

These are worth knowing so you do not wait for something that never arrives.

Not sentWhy
recipient.sentThe 201 from POST /api/payout-orders already names every recipient. This event would carry about a third of total volume and tell you nothing new.
A reservation eventWe reserve balance before calling the brand, and notify you at payout.fulfilled instead. A failed issuance therefore never leaves you holding a stale redemption.
A reversal eventA reservation that produced no event has nothing to unwind. Failed issuance arrives as payout.failed.
Anything on draft crypto orderspayout.quote_created already covers that moment.

Status values

Recipient statuses

pending, sent, viewed, partially_redeemed, redeemed, expired.

Only the last four emit events. redeemed and expired are terminal.

Gift-card payout statuses

processing, fulfilled, failed, cancelled.

All four emit events. fulfilled, failed, and cancelled are terminal for that card.

Crypto send statuses

in_progress, processing, completed, failed, expired, cancelled.

completed, failed, expired, and cancelled are terminal. A draft send emits nothing.

📘

The event name does not always match data.status

On crypto bodies the event name is GIFQ's status. data.status is the provider's own string, passed through untouched.

Our provider's documented statuses line up with our event names one for one, apart from cancellation, where they use one l and we emit payout.cancelled. A provider string we do not recognise is passed through in data.status unchanged.

Branch on the event name. Read data.status only when you want the provider's wording, for a support ticket or an audit trail.

How to read an event page

Every event page follows the same order.

  1. Triggered when. The condition that produces the event.
  2. Body. Which of the two shapes it uses, and the identifiers it carries.
  3. Event-specific fields. Only what this event adds on top of the shared shape.
  4. Example. A complete JSON body.
  5. What to do on receipt. Recommended handling.