How it works
Initiate a payment
Call
POST /payment/initiate with the amount, chain, and coin. Tender returns a
walletAddress and a txId to track the transaction.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.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.
Prerequisites
Authentication guide
All requests require an HMAC-SHA256 signature. See the authentication guide for code examples.
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.Step 3 — Poll for payment status
Payment status values
| Status | Meaning |
|---|---|
pending | Address generated; awaiting customer transfer |
partial | Some funds received but not the full amount |
completed | Full amount received and confirmed on-chain |
failed | Payment expired or rejected |
Partial payments
If the customer sends less than the requiredamount, 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
| Scenario | Action |
|---|---|
| Customer sends wrong amount | Check amountReceived vs amount; handle partial if needed |
| Payment expires | Initiate a new payment; do not reuse the old address |
| Wrong network | Funds sent on the wrong chain cannot be recovered automatically — always display the network clearly |
status: "failed" | Initiate a fresh payment request |