Introduction
The iCryptoNow API lets your platform accept stablecoin deposits and send payouts. It is a JSON over HTTPS API, and every request is signed with your API key.
How an integration works
- Create a deposit address for each player with
POST /v1/addresses. Show it to the player. The same player always gets the same address. - Receive webhooks. When the player pays, we send
deposit.detected, thendeposit.confirmedonce it is final. Credit the player the fullamountondeposit.confirmed. See Webhooks. - Send payouts with
POST /v1/payouts. Track them by webhook or by polling.
Environments: Sandbox and Production
There are two separate environments. Build and test against Sandbox first: it runs on public testnets with test tokens, so nothing has real value. Switch to Production when the go-live checklist passes.
| Sandbox (testing) | Production (live) | |
|---|---|---|
| Base URL | https://sandbox-api.icryptonow.com | https://api.icryptonow.com |
| Networks | TRON Nile, BSC Testnet, Ethereum Sepolia, Arbitrum Sepolia, Base Sepolia, Polygon Amoy | TRON, BSC, Ethereum, Arbitrum, Base, Polygon |
| Money | Test tokens only, no real value | Real USDT and USDC |
| API keys | Sandbox keys, issued when you sign up | Production keys, issued at go-live |
- Each environment has its own API keys, secrets, webhook endpoint and IP allowlist. A Sandbox key never works in Production, and the other way round.
- Requests and responses are identical in both. Chain ids stay the same (
tron,bsc, …): in Sandbox they point to the matching testnet, so you only change the base URL and keys when you go live. - Sandbox uses test USDT and USDC issued on each testnet. Ask us on Telegram for test tokens or to fund your test deposit addresses, then send them to a deposit address to see the full flow:
deposit.detected,deposit.confirmed, sweep and payouts.
The examples use these environment variables, so the same code runs in both environments:
ICN_BASE_URL=https://sandbox-api.icryptonow.com # Production: https://api.icryptonow.com ICN_KEY_ID=ak_... # API key id of that environment ICN_SECRET=... # API secret (keep it server-side)
Requests are only accepted from the IP addresses registered for your key. See Authentication.
Who pays the fees
You do, never your players. A player who sends 1,000 USDT is credited 1,000 USDT on your platform. Your iCryptoNow balance receives 1,000 minus our fee: that is net in deposits and webhooks.
- Deposits: credit the player
amount(what they sent). Your balance grows bynet=amount − fee. - Payouts: by default the fee is added on top (
fee_mode: on_top): the player receives the fullamountand your balance is chargedamount + fee. - Fees and minimums per network are on the pricing page;
GET /v1/quotereturns the exact fee before money moves.
Amounts
All amounts are strings holding an integer in the token's smallest unit, never decimals. For example, with a 6-decimal token, "50000000" is 50 USDT. Decimals differ by network (USDT on BSC uses 18), so always use the decimals field that responses and webhooks include.
Networks and assets
Use these chain ids in requests. Assets are written as chain:TOKEN, for example tron:USDT. Which assets are enabled depends on your account.
| Network | Chain id | Tokens |
|---|---|---|
tron | USDT | |
bsc | USDT | |
eth | USDT, USDC | |
arbitrum | USDT, USDC | |
base | USDT, USDC | |
polygon | USDT, USDC | |
solana | USDT, USDC |
Request ids
Every response carries an X-Request-Id header. Include it when you contact support about a request.