Skip to main content
Every event Stableyard delivers to partner endpoints, grouped the way GET /v2/partners/config groups them. Each event is a prompt to read the resource it names. The envelope and headers are on Webhooks.

Read the catalog at runtime

GET /v2/partners/config returns the machine-readable catalog for the current deployment under capabilities.webhooks, along with the recommended subset and the event groups:
New partner events are added over time, so your consumer must ignore unknown event names safely rather than throwing. The Recommended column below marks the events in recommendedEvents.
Internal state-machine events are kept for Stableyard’s own audit and reconciliation and are never delivered to partner endpoints. That includes the intermediate deposit states (deposit.confirming, deposit.settling, deposit.retry_scheduled) and the whole internal payment-session, option, settlement, fee-payout and refund worker lifecycle. If you need finer-grained deposit status than detected, settled, reversed and requires_intervention, poll the deposit instead.

Payment events

Off-ramp success payloads carry the delivered amount at its exact precision: deliveredAmount (a decimal string), deliveredAmountAtomic, deliveredAssetCode and deliveredAssetDecimals. An exact-input USD receipt can keep six decimal places, so scale by deliveredAssetDecimals rather than assuming cents. Older success events without a precision field keep their original units; use their decimal deliveredAmount when present. Settlement-return payloads likewise pair amountAtomic with assetDecimals. Events are additive and may be delivered more than once. Fetch GET /v2/payments/{paymentId} as the current source of truth rather than reconstructing state from delivery order. Reconcile financial status, operationalState and refundSummary independently. A payment payload carries the fields that identify the payment and its state at the event, such as paymentId, intent, status, stage, operationalState, operationalReasonCode and statusVersion. Keep the highest statusVersion you have seen and discard anything lower. See Reconciliation. For account-bound payment.* events, payload.accountId identifies the account whose app environment owns that delivery. It is the sender on a send Payment and the recipient on a receive Payment, not a generic counterparty ID, and the payload repeats it as senderAccountId or receiverAccountId. Public wallet Payments may omit it. Use paymentId as the durable financial identity, and fetch the Payment when the event does not carry enough context for your ledger or interface.

Deposit events

Read GET /v2/accounts/{accountId}/deposits for the current state of each deposit. See Deposit addresses.

Bank funding events

Sent for an on-ramp bank account. The payload carries accountId, onrampBankAccountId, transactionId, status, the USD and stablecoin amounts, and destinationTxHash when already known. It never contains bank details. Read GET /v2/accounts/{accountId}/onramp-bank-accounts/{onrampBankAccountId}/transactions for these funding transactions. They use their own transaction identity; an inbound transfer into a standing funding account does not require a new receive Payment. See On-ramp accounts.

Account events

KYC events

For kyc.*, read GET /v2/accounts/{accountId}/kyc. See Individual KYC.

Regulated capability events

See Capability activation and Business KYB.

Smart-wallet events

Vault events

See Treasury settlement.

Webhooks overview

Create an endpoint and choose what it subscribes to.

Verifying signatures

Check each delivery before you trust it.

Status codes

Payment, deposit and refund states, and which are terminal.

Reconciliation

Match events to your ledger through duplicates and reordering.