InzoPay Docs InzoPay API Reference

InzoPay API Reference

The InzoPay REST API lets you accept crypto and local wallet payments, manage transactions, and send settlements — all over simple HTTP. This reference covers every endpoint with live examples in Node.js, Python, and cURL.

Base URL
https://api.inzopay.com/v1

Authentication

All requests require an API key in the Authorization header as a Bearer token. Use live keys in production and test keys in development.

Live keys start with ik_live_ and test keys with ik_test_. Never mix them.
export INZOPAY_KEY="ik_live_sk_xxxxxxxxxxxx"

curl https://api.inzopay.com/v1/payment-links \
  -H "Authorization: Bearer $INZOPAY_KEY"

First Payment in 5 Minutes

Three steps: create a payment link via API, share it with your customer, then receive a webhook when payment completes.

Step 1 — Create a payment link

curl https://api.inzopay.com/v1/payment-links \
  -H "Authorization: Bearer $INZOPAY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount":1500,"currency":"USDT","expires_in":1800}'

Step 2 — API response

Response
{
  "id":          "pl_xK2wFq3L9m",
  "url":         "https://pay.inzopay.com/xK2wFq3L9m",
  "amount":      1500,
  "currency":   "USDT",
  "status":     "active",
  "expires_at": "2026-05-01T15:02:00Z"
}

Step 3 — Handle the webhook

When payment completes, InzoPay sends a payment.paid event to your webhook URL. Verify the signature then fulfill the order.

Sandbox & Testing

Use ik_test_ keys for development. All sandbox transactions are completely isolated from production and never touch real funds.

To simulate a successful payment on Sandbox, send any amount to the test wallet address. Confirmation happens automatically after 30 seconds.

Error Handling

InzoPay uses standard HTTP status codes. All errors return JSON with an error object containing a code and message.

StatusMeaning
200 Success
400 Bad request — check your parameters
401 Missing or invalid API key
403 Forbidden — IP blocked or restricted key
404 Resource not found
429 Rate limited — use exponential backoff
500 Server error — we are on it
POST api.inzopay.com/v1/payment-links
Creates a new shareable payment link. The link automatically expires after the specified duration.
Parameter Type Description
amount number required Amount in specified currency
currency string required USDT BTC ETH
methods string[] required Allowed payment methods: USDT-TRC20 USDT-ERC20 BTC ETH vodafone_cash
title string optional Title shown on the checkout page
webhook_url string optional URL to receive payment notifications
redirect_url string optional Redirects customer after successful payment
expires_in integer optional Expiry in seconds. Default: 1800 (30 min). Max: 2592000 (30 days)
usage_limit integer optional Max number of payments. null = unlimited
metadata object optional Custom data returned in webhooks (max 10 keys)
GET api.inzopay.com/v1/payment-links/:id
Returns details of a specific payment link by ID.
GET api.inzopay.com/v1/payment-links
Returns a paginated list of payment links ordered newest first.
Parameter Type Description
limit integer optional Number of results (1-100). Default: 20
after string optional Cursor for pagination
status string optional active expired disabled
DELETE api.inzopay.com/v1/payment-links/:id
Immediately expires the payment link. Customers visiting the link will see an expired message.

Payment Statuses

Every payment transitions through a series of statuses from creation to final confirmation.

pending
Waiting for customer transaction
confirming
TX detected — awaiting confirmations
paid
Confirmed on blockchain
expired
Link expired without payment
failed
Processing error
underpaid
Short payment — manual review needed

Get a Payment

GET api.inzopay.com/v1/payments/:id
Returns details of a specific payment by ID.

List Payments

GET api.inzopay.com/v1/payments
Returns a paginated list of all payments.

Webhooks Overview

Webhooks are HTTP notifications InzoPay sends to your server in real time when important events occur. Instead of polling the API, you are notified automatically.

InzoPay retries delivery up to 5 times with exponential backoff (1m, 5m, 30m, 2h, 12h). Return 200 immediately then process the event asynchronously.

Verifying Webhook Signatures

Every webhook is signed with HMAC-SHA256 using your endpoint's Signing Secret. Always verify the signature before processing any event.

Webhook without signature verification = serious security risk. Any third party can send fake requests to your endpoint.
$payload = file_get_contents('php://input');
$sig     = $_SERVER['HTTP_X_INZOPAY_SIGNATURE'] ?? '';
$secret  = getenv('INZOPAY_WEBHOOK_SECRET');

$parts = [];
parse_str(str_replace(',', '&', $sig), $parts);
$expected = hash_hmac('sha256', ($parts['t'] ?? '') . '.' . $payload, $secret);

if (!hash_equals($expected, $parts['v1'] ?? '')) {
    http_response_code(400); exit('Invalid signature');
}
$event = json_decode($payload, true);
if ($event['type'] === 'payment.paid') fulfill_order($event['data']['metadata']['order_id']);
http_response_code(200);

Webhook Events

EventTrigger
payment.paid Payment fully confirmed on blockchain
payment.confirming TX detected on chain, before full confirmation
payment.failed Processing failed or link expired
payment.underpaid Amount received is less than required
payout.sent Settlement successfully sent on chain
payout.failed Settlement failed to send
wallet.deposit New deposit detected on a wallet

Node.js / TypeScript

SDK coming soon — use cURL or fetch directly for now.

Python

SDK coming soon.

PHP

SDK coming soon.

cURL

All endpoints are available directly via cURL — see the full example in the Authentication section above.

Wallets API

Documentation in progress.

Payouts API

Documentation in progress.

Rate Limits

Use exponential backoff on 429 errors. Response headers include Retry-After in seconds.
EndpointLimitWindow
POST /payment-links 100 per minute / API key
GET /payments 300 per minute / API key
POST /payouts 30 per minute / merchant
All endpoints 1,000 per minute / merchant

Changelog

v1.0 — 2024-10-05

  • Initial API release — Payment Links, Webhooks, and Payouts
  • Support for USDT-TRC20, USDT-ERC20, BTC, and ETH
  • Egyptian wallets: Vodafone Cash and Orange Money