Skip to main content
Tendr sends signed webhooks for checkout, refund, gas and hook events. Add endpoints in the dashboard or with POST /v1/webhooks/endpoints. Omit events to receive all of them. See Webhook signatures for verification. The body is { id, type, created, livemode, data }. data.external_ref is your order id. A retry or a resend keeps the event id (also sent as Tendr-Event-Id), so deduplicate on it. Failed deliveries are retried with exponential backoff for 3 days, and you can resend any delivery from the dashboard.

Headers

Every delivery is a POST with these headers: Verify the raw body before parsing it, and reject a t more than 5 minutes old. See Webhook signatures.

Checkout, payment and refund events

Gasless and hook events

gas.budget_low and gas.budget_exhausted carry mode (test or live), month (YYYY-MM), budget_usd, reserved_usd, spent_usd and remaining_usd. gas.budget_exhausted also carries requested_usd. See gas policy. hook.succeeded and hook.failed carry payment_id, session_id, external_ref, hook_call_id, chain, contract, attempts and tx_hash. hook.failed also carries error, the last error. See integrator hooks. Every checkout, payment and refund event carries data.payment_link_id and data.payer_note next to external_ref. They are always present: Sessions made from a link’s public page have no external_ref (it is null): match them by payment_link_id instead. Treat payer_note as untrusted text and escape it wherever you show it.

network_fee on payment.succeeded

payment.succeeded includes data.network_fee for payments quoted with gasless payments. It is null for older payments.
  • paid_by: merchant (you sponsored) or shopper.
  • fee_mode: token (the shopper paid in the payment token), native (the shopper’s wallet paid gas itself), or null when you sponsored.
  • amount, asset: the token fee in base units and its 1Click asset id. Null unless fee_mode is token.
  • usd: the quoted fee in USD, a decimal string. When Tendr collects the fee it includes Tendr’s safety margin.
  • method: the gasless method (eip3009, permit, paymaster, kora, meta_tx, forwarder), or null when the shopper’s wallet paid gas itself.
  • reason: why the shopper paid, when you were expected to sponsor. See why a payment was not sponsored.