5 networks · USDT / USDC

One integration.Stablecoin payments on every chain.

CNIXPay is a stablecoin payment gateway for merchants. Create an order with one API call, let customers pay on any supported network, and we confirm, settle and notify your server automatically.

  • Priced in USD, paid in USDT / USDC at 1:1
  • A dedicated address for every order
  • Signed callbacks with automatic retries

One order can offer several networks and tokens at once

  • TRONUSDT
  • BNB Smart ChainUSDT · USDC
  • EthereumUSDT · USDC
  • PolygonUSDT · USDC
  • SolanaUSDT · USDC

Available combinations are returned by the API

Product

Stablecoin acceptance, with the details done right

From address allocation to confirmation, from ledger entries to callbacks — every step is built to the standard that money must never be wrong.

  • Many chains, one order

    Attach up to 10 network × token payment options to a single order. A payment on any of them counts toward the order, with your own checkout or ours.

  • Dedicated deposit addresses

    Every order gets its own HD-derived address. Address pools are isolated per merchant and only reused within the same merchant after a cooldown, so attribution stays auditable.

  • Real-time, with a safety net

    On-chain webhooks deliver deposits in real time while scheduled chain scans act as a fallback. A flaky channel never means a missed order.

  • USD pricing, 1:1 payment

    Quote orders in USD and let customers pay in USDT or USDC at 1:1 — the same address accepts both. Native-coin orders in TRX, BNB and more are supported too.

  • Partial payments add up

    If a customer underpays or sends several transfers, payments keep adding up and each one sends order.partially_paid. The order completes once paid in full; if it is still short when the grace period ends, the amount received is credited and order.underpaid is sent.

  • Signed callbacks, auto retries

    Webhooks carry an HMAC-SHA256 signature and a timestamp. All four order events are retried for about 22 hours on failure, delivery logs are visible in the dashboard, and you can resend any event.

How it works

From order to balance in four steps

You create orders and handle callbacks. We take care of everything on-chain.

  1. 01

    Create an order

    Call POST /orders from your server with an amount and optional network / token payment options. You get deposit addresses or a hosted checkout link.

  2. 02

    Customer pays

    On your own page or our hosted checkout, the customer sends USDT / USDC to one of the addresses — on whichever network they prefer.

  3. 03

    On-chain confirmation

    Deposits are detected in real time and checked against the amount due. Paid in full means paid; short means we keep accumulating.

  4. 04

    Settle and notify

    Funds are credited to your merchant balance with a ledger entry, and a signed event is sent to your callbackUrl.

Developers

An API you can ship in an afternoon

Five REST endpoints cover every payment scenario: create, get, list, add payment options and close. One JSON envelope with clear error codes, every amount is a string, and an OpenAPI file is included.

  • Bearer auth

    Authorization: Bearer <API Key>, with optional IP allowlists.

  • Idempotency-friendly

    Merchant order numbers are unique per app and a duplicate returns the existing order; re-adding options or re-closing simply returns the current state.

  • Transparent rate limits

    Per-endpoint limits are documented and return 429 with Retry-After, so backing off is straightforward.

Read the full integration guide
curl -X POST https://api.cnixpay.com/api/v2/orders \
  -H "Authorization: Bearer $CNIXPAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "merchantOrderNo": "ORDER_10086",
  "amount": "100.00",
  "paymentOptions": [
    { "chain": "tron", "token": "USDT" },
    { "chain": "bsc",  "token": "USDC" }
  ],
  "callbackUrl": "https://shop.example.com/notify"
}'
Two ways to integrate

Build your own checkout, or use ours

Most control

Your own checkout

Pass paymentOptions when creating the order, receive every deposit address and amount due, and render network + token + address + QR code inside your own UI.

createOrder({ options: [...] }) → paymentOptions[]
  • Fully custom payment experience
  • Add payment options later
  • Great for products with an existing checkout
Fastest to ship

Hosted checkout

Create the order without paymentOptions and redirect the customer to the returned cashierUrl. Network selection, address, QR code, countdown and result pages are handled for you.

createOrder({ }) → cashierUrl
  • No payment page to build
  • Works on desktop and mobile
  • Redirects back to your returnUrl when done
Merchant dashboard

Where the money is, whether it arrived, and what to do next

The dashboard is designed around status and next actions, so finance and engineering both find what they need.

  • Balance & withdrawals

    Settlements land in real time. Withdraw to your saved addresses and track every status along the way.

  • Transactions & on-chain detail

    Filter by order number, address, status or time, and inspect transaction hashes and callback logs per order.

  • Reports & reconciliation

    Export daily reports, fund details and ledger entries to CSV, with Chinese or English headers.

  • Apps & keys

    Manage multiple apps, each with its own API key / secret, callback URL and IP allowlist.

Security

Security is not a feature. It is the default at every layer.

  • Multi-factor withdrawals

    Withdrawals require TOTP. Adding a withdrawal address requires an email code plus TOTP. After a password or email change, withdrawals pause for 24 hours.

  • API access control

    API key authentication, IP allowlists and per-endpoint rate limits. Webhooks carry an HMAC-SHA256 signature and a timestamp to prevent forgery and replay.

  • Address isolation between merchants

    Deposit addresses are allocated per merchant and never shared with others, so on-chain ownership is always clear.

  • Integer accounting

    Amounts are computed and compared as integer micro-units. Every balance change is recorded for reconciliation and audit.

FAQ

What you may want to know first

Which networks and tokens are supported?

USDT and USDC on TRON, BNB Smart Chain, Ethereum, Polygon and Solana (USDT only on TRON). Available combinations are configured by the platform and returned by the API.

Do I need to manage wallets or private keys?

No. Deposit addresses are derived and monitored by the platform. Once an order completes, funds are credited to your merchant balance and you can withdraw to your own on-chain address any time.

What if a customer underpays or pays in several transfers?

The order stays pending and keeps adding up, sending order.partially_paid for each transfer; once the total reaches the amount due it becomes paid and order.paid is sent. If it is still short when the grace period after expiry ends, the amount received is credited, the order becomes underpaid and order.underpaid is sent for you to handle.

How do I reliably know an order is paid?

Rely on status == "paid" in the webhook order, always verify the signature, dedupe by X-Webhook-Id and keep the highest version. You can also get the order before shipping to double-check.

Which quote currencies are supported?

Orders are quoted in USD and paid in USDT or USDC at 1:1. You can also quote in a native coin (TRX, BNB, ETH, POL, SOL), in which case only that coin is accepted. Fiat quotes such as CNY are not supported.

Is there a sandbox?

There is no simulated sandbox. We recommend integrating with small real orders on a live network.

What are the fees?

Fees and the minimum withdrawal amount are shown in the merchant dashboard. The exact fee and net amount are displayed before you confirm each withdrawal.

How do I get an API key?

Create a merchant account, then create an app in the dashboard and submit it to go live. The app page shows your API key and API secret. Send the key as Authorization: Bearer; the secret is only used to verify webhook signatures — never put it in requests or front-end code.

When does an order expire, and what if the customer pays late?

30 minutes by default; set expireMinutes (5–1440) when creating the order, and it is returned as expireTime. A grace period follows expiry during which deposits and top-ups still count; funds arriving after that are handled manually by the platform.

What if the customer overpays?

Once the total received meets the amount due, the order is paid. The actual amount received is returned as paidAmount, and any overpayment is credited to your merchant balance as well.

Can I close an order?

Yes. A pending order that has not received any payment can be closed, after which deposits are no longer credited automatically. Orders that received a payment, or have one still confirming on-chain, cannot be closed.

Can I set a callback URL per order?

Yes. Pass callbackUrl when creating the order to override the app default; both must use https. Any HTTP 2xx from your endpoint counts as delivered.

What order statuses are there?

Just four: pending — no outcome yet, wait; paid — paid in full, fulfil; underpaid — only part paid when the grace period ended, handle manually; closed — nothing received, the order is closed.

Can one account run several stores or products?

Yes. A merchant account can have multiple apps, each with its own API key / secret, callback URL and IP allowlist. Orders and statistics are kept separate per app.

Are refunds supported?

The merchant payment API does not currently include a refund endpoint. If you need to refund, send the funds from your own wallet to the customer address.

Ready to accept your first stablecoin payment?

Create a merchant account, set up an app, grab your API key — and run your first order today.