Documentation

Integration guide

Add crypto payments to any website. Start with the widget in five minutes, move to the API when you need full control.

Quick start

  1. Create an account and confirm your email. Your live API key is ready immediately.
  2. Open Integration in your dashboard, set the amount and order ID, and copy the widget code.
  3. Paste it on your payment page. When the customer pays, the payment appears in your dashboard and your balance grows.
Your API key starts with colk_live_. It is a public key: it can create invoices and read their status, but it can never move money. It is safe to use in the browser.

Checkout widget

The widget is a hosted page you embed with an iframe. It lets the customer choose a coin, shows the exact amount, the deposit address and a QR code, and switches to a success screen as soon as the payment is confirmed.

<iframe src="https://collect.izipay.me/checkout?key=colk_live_YOUR_KEY&amount=20&order_id=ORDER-1001"
        width="420" height="700" style="border:0;border-radius:24px"></iframe>
ParameterRequiredDescription
keyYesYour API key.
amountNoInvoice amount in USD, minimum 1. Leave it out to let the customer enter any amount in the coin they choose.
order_idNoYour order reference, up to 128 characters. It comes back in the dashboard and in webhooks.
currencyNoFix the coin: usdt, usdc, btc, eth, bnb, sol, trx or pol.
networkNoFix the network: trc20, bsc, polygon, eth, sol or btc.
brandNoAccent color as 6 hex digits without #, for example 2563eb.

The dashboard has a builder that fills these parameters for you and gives you the ready code.

The same URL works as a standalone payment page. Send it in a chat, an email or an invoice:

https://collect.izipay.me/checkout?key=colk_live_YOUR_KEY&amount=150&order_id=INV-2026-044

Payments API

Use the API when you build your own payment screen. All requests are JSON POST requests to one endpoint:

POST https://collect.izipay.me/api.php
Content-Type: application/json

Create an invoice

{
  "action": "create",
  "key": "colk_live_YOUR_KEY",
  "amount": 49,
  "currency": "usdt",
  "network": "trc20",
  "order_id": "A-1009"
}

Response:

{
  "ok": true,
  "payment_uuid": "2f6c1c3e-8d0a-4b6e-9a57-3c7f0e1d9b21",
  "deposit_address": "TQ7mZ4xK9vRr2pLw8sNc…",
  "pay_amount": 49,
  "pay_currency": "USDT",
  "network": "trc20",
  "amount_usd": 49,
  "expires_at": "2026-09-19 12:00:00"
}

Show the customer pay_amount of pay_currency and the deposit_address. For BTC, ETH, BNB, SOL, TRX and POL the amount is converted from USD at the current rate.

Check the status

{ "action": "status", "uuid": "2f6c1c3e-8d0a-4b6e-9a57-3c7f0e1d9b21" }
{
  "ok": true,
  "status": "paid",
  "raw_status": "confirmed",
  "amount_received": 49,
  "amount_usd": 49,
  "network": "trc20",
  "currency": "USDT",
  "deposit_address": "TQ7mZ4xK9vRr2pLw8sNc…",
  "expires_at": "2026-09-19 12:00:00"
}

Payment statuses

statusMeaning
waitingThe invoice is open and we are watching the address.
paidThe payment is confirmed on the blockchain and added to your balance.
expiredNothing arrived before expires_at. Create a new invoice.

Stablecoin payments are credited for the amount that actually arrived, never more than the invoice. Other coins are credited in proportion to what arrived.

Webhooks

Add your endpoint on the Webhooks page of the dashboard. It must be a public https:// address. We send a JSON POST for these events:

EventWhen
payment.confirmedA payment is confirmed and added to your balance.
refund.requestedA customer asked for a refund. Approve or decline it in the dashboard.
{
  "type": "payment.confirmed",
  "payment_id": 5073,
  "order_id": "A-1009",
  "amount_usd": 49.00,
  "fee_usd": 0.39,
  "network_fee_usd": 1.00,
  "net_usd": 47.61
}

Verify the signature

Every request has an X-Collect-Signature header: HMAC-SHA256 of the raw request body with your signing secret, in hex. Reject requests where it does not match, then reply with any 2xx status.

// PHP
$body = file_get_contents('php://input');
$sig  = hash_hmac('sha256', $body, 'cols_YOUR_SECRET');
if (!hash_equals($sig, $_SERVER['HTTP_X_COLLECT_SIGNATURE'] ?? '')) { http_response_code(401); exit; }
$event = json_decode($body, true);
if ($event['type'] === 'payment.confirmed') { /* mark order $event['order_id'] as paid */ }
// Node.js (Express, raw body)
const crypto = require('crypto');
const sig = crypto.createHmac('sha256', process.env.IZICOLLECT_SECRET).update(req.rawBody).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(req.get('X-Collect-Signature') || ''))) return res.sendStatus(401);
Treat the webhook as a signal and confirm big orders with the status call before you ship goods.

Coins and networks

NetworknetworkCoins
Tron (TRC20)trc20USDT, USDC, TRX
BNB Smart ChainbscUSDT, USDC, BNB
PolygonpolygonUSDT, USDC, POL
Ethereum (ERC20)ethUSDT, USDC, ETH
SolanasolUSDT, USDC, SOL
BitcoinbtcBTC

Fees

No monthly fee. Each confirmed payment has two deductions: 0.8% of the amount, and a network fee that covers the blockchain gas we pay to move the payment to your balance.

NetworkNetwork fee per payment
Tron (TRC20)$1.00
BNB Smart Chain$0.10
Polygon$0.10
Ethereum (ERC20)$1.00
Solana$0.05
Bitcoin$1.50

Your customer always pays the invoice amount. Both fees are deducted from the payment before it reaches your balance, and you see them per payment in the dashboard and in the webhook.

Refunds

After paying, the customer can open a refund form from the success screen and enter their wallet address. You get a refund.requested webhook and a request in Refunds. Nothing is sent until you approve. Approved refunds are sent from your balance automatically, minus the blockchain network fee. Refunds are available for Tron, BNB Smart Chain, Polygon and Ethereum payments.

Withdrawals

Withdraw your available balance in USDT to your own wallet on Tron, BNB Smart Chain, Polygon or Ethereum from the Withdraw page. The fee is 0.2%, the minimum is $5, and we pay the gas. Withdrawals usually arrive within a few minutes.

Limits and errors

LimitValue
Invoice amount$1 to $100,000
New invoices per account30 per minute
New invoices from one customer IP10 per minute
Open invoices per account150 at a time

Errors come back with "ok": false and a readable error message, with HTTP 400 for bad input, 401 for a wrong key, 403 for a blocked account and 429 for rate limits.

Questions about the integration? Write to support@izipay.me.