CounterpartyTransactionUpdated
Fired when a movement changes state: Posted when it settles on the ledger and its amount becomes available, or Archived when it is voided before posting and counts toward no balance. Read status rather than assuming which occurred.
The included payload mirrors a row from GET /api/v1/counterparties/{counterpartyId}/transactions exactly, so you can act on the event without re-reading the list.
On a Deposit, originatorName and description are the originating bank's own — who paid, and what they called the payment. Both are null when the rail carried neither, and originatorName is null on every movement that is not a deposit.
These two topics describe ledger movements, while CounterpartyPayout*, CounterpartyTransfer* and CounterpartyIncomingPayment describe the operations that cause them. They overlap on purpose: subscribe to whichever view suits you, and expect both events for one movement if you subscribe to both. A transfer between two of your counterparties fires one event per side, each with the direction that side experienced.
Payload
Example payload
{
"attributes": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"userId": "123e4567-e89b-12d3-a456-426614174000",
"walletId": "123e4567-e89b-12d3-a456-426614174000"
},
"included": [
{
"attributes": {
"transactionId": "lt_a1b2c3d4e5",
"counterpartyId": "123e4567-e89b-12d3-a456-426614174000",
"merchantId": "123e4567-e89b-12d3-a456-426614174000",
"amount": 5000,
"currency": "USD",
"direction": "Credit",
"type": "Deposit",
"status": "Posted",
"description": "Payout to Acme Vendor",
"originatorName": "Checkout LLC",
"effectiveAt": "2024-01-15T00:00:00.000Z",
"postedAt": "2024-01-15T00:00:00.000Z",
"createdAt": "2024-01-15T00:00:00.000Z",
"updatedAt": "2024-01-15T00:00:00.000Z"
}
}
]
}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.