{"eventId": "...", "event": "...", "data": {...}}. This page describes data for each event. See Webhooks for registration, delivery and security.
Payloads list a stable public subset of fields. Additional fields may be present; ignore fields you don’t recognise.
Monetary amounts are strings unless stated otherwise.
Supported events
Subscribe using these exact names (lowercase, case-sensitive). You can also fetch them fromGET /v1/api/webhook/events.
Payment events
transaction_requested
Fires when a payment is initiated through initiate payment or initiate payment by currency.data matches the initiate response, with IDs as strings.
Payment status events
transaction_completed, transaction_overpayment, transaction_partially_paid and transaction_partial_fulfilled all carry the same payment object, which is also what validate payment returns.
transaction_completed
Fires once, when the amount received reaches the amount due.status is completed.
transaction_overpayment
Fires once, when the payer sends more than the amount due.status is overpayment. Compare amountReceived with amount to find the excess.
transaction_partially_paid
Fires when a payment receives less than the amount due.status is partial-payment. The payment is re-checked periodically, so this event may repeat while the payment stays partially paid, with updated amountReceived and balanceRequired. If the balance arrives, you’ll receive transaction_completed or transaction_overpayment.
transaction_partial_fulfilled
Fires once, when a partially paid payment is accepted as final and no further funds are expected. This happens automatically 24 hours after the payment became partially paid, or earlier if Tender accepts it at your request.status stays partial-payment; isFulfilled is true, and fulfilledAt and fulfilledBy (expiry, merchant or admin) are set.
Payment object fields
transaction_partially_paid payload has the same shape, for example with "status": "partial-payment", "isPartialPayment": true, "amountReceived": "5" and "balanceRequired": "5.15".
transaction_cancelled
Fires when a pending payment is cancelled, for example with cancel payment. Cancelling an already-cancelled payment doesn’t send it again.Subwallet events
sub_user_wallet_transaction_detected
Fires when a deposit to one of your subwallet addresses is detected on-chain, and again each time its confirmation count changes. Deduplicate ondepositKey, and credit the deposit only once confirmed is true.
sub_user_wallet_transfer_confirmed
Fires once when an outgoing subwallet transfer is confirmed.
On-chain transfer:
sub_user_wallet_transfer_failed
Fires once when an outgoing gasless subwallet transfer ends in failure. The payload matches the gaslesssub_user_wallet_transfer_confirmed payload, with "status": "failed". txHash is usually empty.
Off-ramp order events
offramp_order_completed, offramp_order_cancelled and offramp_order_failed are sent for off-ramp orders created in the Tender merchant dashboard (selling crypto to a bank account through Tender’s off-ramp partner). They aren’t sent for API payouts.
Reserved event names
GET /v1/api/webhook/events also returns transaction_reserved. It is reserved and not currently sent; subscribing to it has no effect.