payout.completed

A crypto send is finalized on chain. Terminal.

Triggered when the crypto send is finalized. This is the success outcome for a crypto payout, and it is terminal, so no further status events fire for this send.

payout_type is always crypto. The gift-card equivalent is payout.fulfilled.

This maps from the provider's completed or paid, so data.status may be either.

Body

The crypto body, with the data shape documented on payout.quote_created.

The on-chain hash lives at data.blockchain_transactions[0].txid.

🚧

The hash may not be there yet

A send can be completed before the chain transaction is confirmed, in which case blockchain_transactions is still []. A second payout.completed for the same data.id may follow once the hash lands.

Treat the later delivery as authoritative for the hash, and do not report "confirmed on chain" until you actually have a txid.

Example

{
  "event": "payout.completed",
  "payout_type": "crypto",
  "data": {
    "id": 354,
    "status": "paid",
    "purpose": "Gifq payout to [email protected]",
    "created_at": "2026-05-25T10:00:00.000Z",
    "input_amount": "100.0",
    "sending_amount": "0.049422",
    "sending_currency": {
      "id": 5, "kind": "crypto", "title": "Ethereum", "symbol": "ETH"
    },
    "blockchain_transactions": [
      {
        "id": 7000001,
        "txid": "0x1111111111111111111111111111111111111111111111111111111111111111",
        "amount": "0.049422",
        "status": "confirmed",
        "network_confirmations": 1,
        "currency": {
          "id": 5, "title": "Ethereum", "symbol": "ETH",
          "platform": { "id": 42, "title": "Base" }
        }
      }
    ],
    "requires_2fa_confirmation": false
  }
}

data is abridged. The full object is documented on payout.quote_created.

What to do on receipt

  • This is the authoritative final outcome for data.id. The recipient has been paid.
  • Read the hash from data.blockchain_transactions[0].txid. If the array is empty, wait for the follow-up delivery.
  • Expect recipient.redeemed for the recipient, because a completed crypto send finalizes their entitlement.
  • For anything financial, cross-check through the GIFQ API rather than trusting the webhook body alone.
  • No further status events fire for this send.