Webhook Topics

CounterpartyIncomingPayment

Fired when a payment arrives on a counterparty's bank account and has been recorded on the counterparty's balance. Use this to reconcile funding you receive from a counterparty over bank rails without polling the counterparty balance.

The included payload carries counterpartyId, amount (in cents), currency, direction (credit for funds received, debit for funds withdrawn), method (the bank rail, for example ach or wire), asOfDate (the bank settlement date), and externalIncomingPaymentId for reconciliation against your bank records.

It also carries originatorName and description exactly as the originating bank sent them — who paid, and what they called the payment. Both are null when the rail carried neither, and on ACH the description is the company entry description, so expect a reference code as often as prose.

This event is only sent after the payment has been recorded, so the counterparty balance already reflects it when you receive the webhook.

postWebhookcounterpartyIncomingPayment

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": {
        "counterpartyId": "123e4567-e89b-12d3-a456-426614174000",
        "merchantId": "123e4567-e89b-12d3-a456-426614174000",
        "amount": 2500,
        "currency": "USD",
        "direction": "credit",
        "method": "ach",
        "originatorName": "Checkout LLC",
        "description": "000000031R",
        "asOfDate": "2026-08-27",
        "externalIncomingPaymentId": "ipd_a1b2c3d4e5"
      }
    }
  ]
}

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.