Developers

Payout webhook events

A payout fires a webhook when it reaches a terminal state. Subscribe to these instead of polling so your ledger updates the moment a transfer settles.

EventWhat it means
payout.confirmedThe transaction landed on-chain
payout.failedBroadcast could not complete
payout.expiredThe payout expired, or was rejected while pending

All three share the standard Stridge webhook envelopeid, type, time, version, signed with HMAC SHA-256. The payloads below are the inner payload object.

Subscribing

Register an endpoint in the dashboard and opt into the payout event types. Always verify the webhook-signature before trusting the body — see Verify signature for example code in Node.js, Go, and Python.

payout.confirmed

Fires when the payout's transaction confirms on-chain. The payload is the full payout record, with status: "confirmed", the on-chain tx_id, and confirmed_at populated.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "vault_id": "550e8400-e29b-41d4-a716-446655440001",
  "asset": "USDT",
  "network_symbol": "ethereum",
  "amount": "100.50",
  "usd_amount": "100.50",
  "rate": "1.0001",
  "to_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
  "reference_id": "order-12345",
  "remark": "Payment for order #12345",
  "status": "confirmed",
  "tx_id": "0xabc123def456789",
  "error": "",
  "created_at": "2026-01-01T00:00:00Z",
  "confirmed_at": "2026-01-01T00:05:00Z",
  "expired_at": "2026-12-31T23:59:59Z"
}
FieldTypeNotes
idstringPayout id
vault_idstringVault the funds left from
assetstringAsset sent
network_symbolstringNetwork the transfer executed on
amountstringCrypto amount sent
usd_amountstringUSD value at submit time
ratestringConversion rate applied (when usd_amount was used)
to_addressstringExternal destination
reference_idstringYour idempotency key, echoed back
remarkstringThe note you attached, if any
statusenumconfirmed for this event
tx_idstringOn-chain transaction hash
confirmed_atstringConfirmation timestamp

payout.failed

Fires when the transfer can't be completed. Identical shape to payout.confirmed, but status is failed and error carries a human-readable reason. tx_id may be empty if nothing was broadcast.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "vault_id": "550e8400-e29b-41d4-a716-446655440001",
  "asset": "USDT",
  "network_symbol": "ethereum",
  "amount": "100.50",
  "to_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
  "reference_id": "order-12345",
  "status": "failed",
  "tx_id": "",
  "error": "insufficient balance",
  "created_at": "2026-01-01T00:00:00Z"
}
FieldTypeNotes
statusenumfailed for this event
errorstringHuman-readable failure reason
tx_idstringEmpty when nothing was broadcast

payout.expired

Fires when a payout passes its expired_at without confirming, or when you reject a pending payout. status is expired.

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "vault_id": "550e8400-e29b-41d4-a716-446655440001",
  "asset": "USDT",
  "network_symbol": "ethereum",
  "amount": "100.50",
  "to_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
  "reference_id": "order-12345",
  "status": "expired",
  "tx_id": "",
  "error": "",
  "created_at": "2026-01-01T00:00:00Z",
  "expired_at": "2026-12-31T23:59:59Z"
}
Tip

Match webhooks to your records on reference_id — it's the id you sent on create, so you never need to store Stridge's internal payout id to reconcile.

Next

Was this page helpful?