Skip to main content
Tender generates a unique wallet address for each payment request. Your customer sends the exact crypto amount to that address, Tender detects the on-chain transfer, and marks the transaction complete. No custodial account or key management is required on your side.

How it works

1

Initiate a payment

Call POST /payment/initiate with the amount, chain, and coin. Tender returns a walletAddress and a txId to track the transaction.
2

Customer sends crypto

Display the walletAddress and exact amount to your customer. They send from their own wallet — any compatible wallet on that chain works.
3

Tender detects the transfer

Tender monitors the address on-chain. When the payment arrives, the transaction status updates automatically. You can poll or listen via webhook.
4

Validate the payment

Call POST /payment/validate/{id} to confirm the payment is received and the transaction is complete on your end.

Prerequisites

Authentication guide

Payment endpoints use Basic (Access ID) authentication — only your x-access-id header is required. See the authentication guide for details on both auth methods.

Step 1 — Initiate a payment


Step 2 — Show payment details to your customer

Display the wallet address and exact amount. The customer must send exactly the specified amount — partial sends are tracked as partial payments.
The walletAddress is unique to this transaction. Never reuse addresses across payments.

Step 3 — Poll for payment status

Use webhooks instead of polling for production. Configure your webhook URL and Tender will push a notification the moment the payment status changes. See Webhooks.

Payment status values


Partial payments

If the customer sends less than the required amount, the transaction moves to partial status. The balanceRequired field shows what is still owed. You can:
  • Ask the customer to send the remaining balance to the same address
  • Mark the order as underpaid and handle it in your own logic

Error handling