Common Errors
Common Errors
A field guide to the errors we see most often when integrating against the CoinPayments API — what they mean, why they happen, and how to fix them. Anchor deep-link each section so you can share specific causes with teammates.
Authentication & Authorization
3 itemsAnything that gets your request rejected before it runs.
A request whose timestamp is more than 60 seconds away from server time will be rejected even if the signature is otherwise valid.
- Server clock drift on the client machine.
- Signing once at startup and reusing the signature for many later requests (signatures are per-request, not per-session).
- Queueing requests in a background job and signing them at enqueue time instead of dispatch time.
The integration has an IP whitelist configured, and the request originated from an IP that isn't on the list.
- Requests proxied through a cloud provider with rotating egress IPs.
- Local development traffic when only production IPs are whitelisted.
- Moving to a new datacenter or container host without updating the integration.
Validation
4 itemsYour request reached us but didn't pass schema checks.
The body or query parameters failed validation. The response body contains a precise description of which field is invalid.
- Missing a required parameter — check the route's request schema.
- Sending the wrong type (e.g. string where a number is expected, or a number where a string-encoded amount is expected).
- Numeric amounts exceeding the precision the chain supports.
A withdrawal or conversion target address is malformed or doesn't match the format expected for the currency.
- Address encoded for a different network (see Network Mismatch below).
- Typos or truncation — wallet addresses must be copied verbatim.
- Using a deposit address from a different exchange that has additional formatting rules.
- BTC · 1BvBMSEYstWetqTFn5...
- BCH · bitcoincash:qr7uq7uv…
- LTC · LZx9pzGaH6mKSz...
- ETH/ERC-20 · 0x7E5F4552191A69125d...
The currencyId in your request doesn't exist or isn't supported on your account.
- Hard-coded a currencyId that has since been deprecated.
- Confused a coin's ticker symbol (e.g. USDT) with its numeric id.
- The account hasn't completed business verification.
Sending to an address that exists on a different network than the currency you specified — for example, USDT on Ethereum (ERC-20) sent to a Tron (TRC-20) address.
- Multi-chain assets (USDT, USDC) used without specifying the correct network variant.
- Pasting an EVM address as the destination for a UTXO chain (or vice versa).
Funds & Limits
2 itemsYou reached the API, but the transaction itself is constrained.
The originating wallet doesn't have enough balance to cover the transaction amount plus any applicable network and platform fees.
- Withdrawing more than the wallet balance.
- Forgetting to budget for the network fee on top of the send amount.
- Pending conversions or other in-flight transactions that have already used part of the balance.
The API enforces a default cap of 70 requests per second.
- Hot-looping over a large dataset without batching.
- Polling for status when you could be using webhooks.
Buyer-Flow Issues
4 itemsNot API errors — but the next thing developers ask about.
The buyer sent less than the invoice total — usually because the on-chain network fee was not added on top of the displayed crypto amount.
- The client only sent the invoice total and did not account for network fees.
- Manual entry or typos when the buyer entered the amount into a wallet.
- A third-party sending wallet that auto-subtracts the network fee from the amount before sending.
The buyer sent more than the invoice total. The invoice still completes; the excess is automatically refunded to the buyer via the standard refund flow.
- Buyer entered the wrong amount.
- A wallet that pads the amount for fee safety, sending more than the requested total.
The 60-minute exchange-rate lock expired before the payment confirmed. Funds that arrive (or finalise on-chain) after the timer are auto-refunded.
- The buyer sat on the checkout page and sent funds too late.
- Funds were broadcast inside the window but confirmed past the 60-minute mark.
- A slow chain or high mempool congestion delaying confirmations.
CoinPayments will not issue an automatic refund if the excess amount is smaller than the chain's network fee — the dust would be consumed entirely by the broadcast cost.
- A very small overpayment on a high-fee chain (e.g. a few cents over on an Ethereum payment).
- A high-priority gas spike at the moment the refund was attempted.
Common Misconceptions
1 itemNot strictly errors — but they trip people up the most.
The wallet you see in the CoinPayments dashboard UI is segregated from API-created wallets. They share an account but their balances are independent — you cannot move funds between them with a regular API call.
- Trying to withdraw from your dashboard balance by referencing it from an integration.
- Assuming "the account" exposes a single wallet to the API.
- Using a deposit address from the dashboard UI as the source of an API-driven send.
Still stuck?
Walk through the docs, or talk to a human.
