Webhook Topics

CounterpartyPayoutReturned

Fired when a payout ends without delivering funds. This covers every terminal failure — returned, reversed, cancelled, denied, and failed — so read status to see which occurred rather than relying on the topic name.

returnCode and returnReason are populated when the receiving bank returned the payment (for example R01, insufficient funds) and are null for the other failures. See ACH Return Codes for every code. The payout amount is available on the counterparty balance again.

The included payload mirrors the payout resource — payoutId, counterpartyId, amount (in cents), currency, status, description, and effectiveDate — so you can act on the event without re-reading the payouts API.

postWebhookcounterpartyPayoutReturned

Payload

idstring uuid required

Unique identifier for the object.

type'WebhookEvent' required

Example payload

{
  "attributes": {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "userId": "123e4567-e89b-12d3-a456-426614174000",
    "walletId": "123e4567-e89b-12d3-a456-426614174000"
  },
  "included": [
    {
      "attributes": {
        "payoutId": "po_a1b2c3d4e5",
        "counterpartyId": "123e4567-e89b-12d3-a456-426614174000",
        "merchantId": "123e4567-e89b-12d3-a456-426614174000",
        "amount": 5000,
        "currency": "USD",
        "status": "Sent",
        "description": "Payout to Acme Vendor",
        "effectiveDate": "2026-08-28",
        "returnCode": "R01",
        "returnReason": "Insufficient Funds"
      }
    }
  ]
}

Response

Return a 200 status to indicate that the data was received successfully

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.