API reference
Simple payments API
Base URL https://api.chainsplit.io. No version prefix. No API key for the payment flow. HTTPS only.
Identity
- Callback URL uniquely identifies a payment address. Identical callbacks return the same
address_in. - callback_id is your order reference. Echoed on every webhook.
- address plus chain is the volume key for 30-day fee tiers. The same
0xon Ethereum and Polygon does not share volume.
Harden the callback with an unguessable nonce that you store server-side and verify on receipt.
Create payment address
GET /{ticker}/create/
| Query | Required | Notes |
|---|---|---|
callback | yes | URL-encoded HTTPS endpoint. Keep it unique. |
address | yes | Your receiving wallet for this ticker. |
callback_id | no | Merchant reference, echoed back. |
pending | no | 1 to receive mempool webhooks. |
confirmations | no | Override default confirmations. |
post | no | 1 sends webhook as POST. |
json | no | 1 sends JSON body (implies POST). |
convert | no | 1 includes fiat conversions. |
curl -G https://api.chainsplit.io/erc20/usdt/create/ \ --data-urlencode "address=0xYourUsdtWallet" \ --data-urlencode "callback=https://merchant.tld/webhook?callback_id=ord_1842&nonce=u9f3" \ --data-urlencode "pending=1" \ --data-urlencode "json=1"
{
"status": "success",
"ticker": "erc20/usdt",
"address_in": "0xdeposit...",
"address_out": "0xYourUsdtWallet",
"callback_url": "https://merchant.tld/webhook?callback_id=ord_1842&nonce=u9f3",
"minimum_transaction_coin": "10.000000",
"fee_percent": "0.750",
"callback_id": "ord_1842"
}
Tickers
v1 is EVM-only. Same 0x address, same nonce sweeper, different chainId and RPC. Bitcoin, Solana and Tron are not in this API yet.
| Asset | Ticker | Chain ID |
|---|---|---|
| Ethereum | eth | 1 |
| USDT on Ethereum | erc20/usdt | 1 |
| USDC on Ethereum | erc20/usdc | 1 |
| BNB Smart Chain | bsc | 56 |
| USDT on BNB | bep20/usdt | 56 |
| USDC on BNB | bep20/usdc | 56 |
| Polygon | polygon | 137 |
| USDT on Polygon | polygon/usdt | 137 |
| USDC on Polygon | polygon/usdc | 137 |
Token endpoints nest the family: /erc20/usdt/create/, /bep20/usdt/create/, /polygon/usdt/create/.
Webhooks
Acknowledge with HTTP 200 and body *ok*. Anything else is retried with exponential backoff.
Verify x-cs-signature: hex HMAC-SHA256 of the raw query string (GET) or raw body (POST), keyed with the nonce you embedded in the callback. Also reject unknown nonces.
Common fields:
| Field | Meaning |
|---|---|
uuid | ChainSplit payment id |
callback_id | Your reference |
pending | 1 mempool, 0 confirmed |
address_in / address_out | Deposit / destination |
txid_in / txid_out | Customer tx / sweep tx |
value_coin | Amount received at address_in |
fee_percent | Tier applied on this sweep |
fee_coin | Service fee in coin |
value_forwarded_coin | Net sent to you |
confirmations | Observed confirmations |
Other endpoints
GET /info/?prices=1— all tickers +fee_tiersGET /{ticker}/info/?prices=1— minima and currentfee_percentGET /{ticker}/estimate/?addresses=1— network fee estimate (excludes service fee)GET /{ticker}/logs/?callback=...— webhook history for an addressGET /{ticker}/qrcode/?address=&value=— QR payload
Fee application
There is no billing dashboard. On each confirmed sweep we:
- Look up 30-day confirmed USD volume for
(chain, address_out). - Select the tier (see Fees).
- Subtract service fee and network fee from
value_coin. - Broadcast the forward tx and include the breakdown in the confirmed webhook.
If the remainder would fall below dust, the payment is not sweepable. Surface minima before checkout.