payout.fulfilled

A gift card was issued to the recipient. Terminal.

Triggered when a gift card has been issued to the recipient. This is the success outcome for a gift-card payout, and it is terminal for that card.

payout_type is always gift_cards. The crypto equivalent is payout.completed.

Body

The GIFQ envelope plus the gift-card payout keys. subject_type is "payout" and status is "fulfilled".

🚧

The card itself is never in this body

The code, PIN, and serial number are not included, and no API returns them. They reach the recipient through the redeem flow and nowhere else. This event tells you a card exists, not what it is.

Example

{
  "event": "payout.fulfilled",
  "payout_order_uuid": "11111111-2222-3333-4444-555555555555",
  "recipient_email": "[email protected]",
  "recipient_uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "recipient_name": "Alice Doe",
  "subject_type": "payout",
  "status": "fulfilled",
  "updated_at": "2026-05-21T10:05:00Z",
  "payout_type": "gift_cards",
  "currency": "GBP",
  "sent_at": "2026-05-20T09:00:00Z",
  "viewed_at": "2026-05-21T10:00:00Z",
  "expires_at": "2026-08-20T09:00:00Z",
  "payout_uuid": "99999999-8888-7777-6666-555555555555",
  "brand_uuid": "77777777-6666-5555-4444-333333333333",
  "brand_name": "Amazon UK",
  "amount": 25.0
}

currency is the denomination of amount, which is not always the recipient's wallet currency. On an FX redemption the two differ.

What to do on receipt

  • Key on payout_uuid. A recipient can hold several cards, one per brand and denomination they pick, and each produces its own payout.fulfilled.
  • Notify your end user on this event. The card exists and is in their hands.
  • Expect a companion recipient event. recipient.partially_redeemed or recipient.redeemed is written in the same transaction as this one, so a crash cannot leave you holding one without the other. Which one you get depends on whether balance remains.
  • Do not work out the recipient's remaining balance by subtracting amount. FX means the card denomination and the wallet balance can be in different currencies. Read remaining_amount off the recipient event instead.