Quickstart
Accept your first stablecoin payment in under 5 minutes.
Get your API key
Sign up at inzipay.com and go to Settings → API Keys.
You’ll get two keys:
sk_test_...— test mode (mock payments, no real blockchain)sk_live_...— live mode (real stablecoin payments)
Start with the test key.
API keys are shown only once. Store them securely.
Create a checkout
cURL
curl -X POST https://api.inzilink.com/api/v1/checkouts \
-H "Authorization: Bearer sk_test_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"amount": "25.00",
"currency": "USD",
"description": "Order #12345",
"metadata": { "order_id": "ORD-123" },
"redirect_url": "https://yoursite.com/success",
"webhook_url": "https://yoursite.com/webhooks/inzi"
}'Open the checkout URL
The API returns a checkout_url. Redirect your user there:
{
"id": "chk_test_abc123def456",
"status": "pending",
"checkout_url": "https://inzilink.com/p/abc123",
"expires_at": "2026-04-04T12:30:00Z"
}The checkout page shows available chains/tokens, a QR code, and a copy-paste address. The user pays from any wallet.
Receive the webhook
In test mode, a mock checkout.completed webhook fires 5 seconds after checkout creation. No real blockchain transaction occurs.
{
"event": "checkout.completed",
"checkout_id": "chk_test_abc123def456",
"data": {
"status": "completed",
"amount": "25.00",
"currency": "USD",
"payment": {
"amount_crypto": "25.000000",
"crypto_currency": "USDT",
"network": "polygon",
"tx_hash": "0xmock...",
"confirmed_at": "2026-04-04T12:00:05Z"
},
"metadata": { "order_id": "ORD-123" }
}
}Verify the webhook signature
Every webhook includes an HMAC-SHA256 signature. Always verify it.
Node.js
import crypto from 'crypto'
function verifyWebhook(body, headers, secret) {
const timestamp = headers['x-inzi-timestamp']
const signature = headers['x-inzi-signature'].replace('sha256=', '')
const signedPayload = `${timestamp}.${body}`
const expected = crypto
.createHmac('sha256', secret)
.update(signedPayload)
.digest('hex')
// Timing-safe comparison
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))) {
throw new Error('Invalid webhook signature')
}
// Reject stale webhooks (> 5 min)
if (Math.abs(Date.now() / 1000 - parseInt(timestamp)) > 300) {
throw new Error('Webhook too old')
}
return JSON.parse(body)
}Go live
When you’re ready for real payments:
- Switch from
sk_test_tosk_live_key - Set your production
webhook_url - Set a settlement wallet address in Dashboard → Settings
That’s it. The API is identical — only the key changes.
Next steps
- Checkout API reference — full request/response schemas
- Webhook events — all events, retry logic, testing
- Telegram bot guide — accept payments in a Telegram bot
- Error handling — error format and codes