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.
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.
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"
import Inzopay from 'inzopay'; const client = new Inzopay({ apiKey: process.env.INZOPAY_SECRET_KEY, sandbox: process.env.NODE_ENV !== 'production', });
import inzopay client = inzopay.Client( api_key=os.environ["INZOPAY_SECRET_KEY"], sandbox=os.environ.get("ENV") != "production", )
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}'
const link = await client.paymentLinks.create({ amount: 1500, currency: 'USDT', title: 'Brand Identity Design', methods: ['USDT-TRC20', 'vodafone_cash'], webhook_url: 'https://yoursite.com/webhook', redirect_url:'https://yoursite.com/success', expires_in: 1800, metadata: { order_id: 'INV-2026-0041' }, }); console.log(link.url); // → https://pay.inzopay.com/xK2wFq3L9m
link = client.payment_links.create( amount=1500, currency="USDT", title="Brand Identity Design", methods=["USDT-TRC20", "vodafone_cash"], webhook_url="https://yoursite.com/webhook", expires_in=1800, metadata={"order_id": "INV-2026-0041"}, )
Step 2 — API 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.
Error Handling
InzoPay uses standard HTTP status codes. All errors return JSON with an error object containing a code and message.
Create a Payment Link
USDT BTC ETH
USDT-TRC20 USDT-ERC20 BTC ETH vodafone_cash
Get a Payment Link
List Payment Links
active expired disabled
Expire a Payment Link
Payment Statuses
Every payment transitions through a series of statuses from creation to final confirmation.
Get a Payment
List 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.
Verifying Webhook Signatures
Every webhook is signed with HMAC-SHA256 using your endpoint's Signing Secret. Always verify the signature before processing any event.
$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);
app.post('/webhook', express.raw({ type: '*/*' }), (req, res) => { const sig = req.headers['x-inzopay-signature']; const secret = process.env.INZOPAY_WEBHOOK_SECRET; let event; try { event = Inzopay.webhooks.constructEvent(req.body, sig, secret); } catch (err) { return res.status(400).send(`Signature error: ${err.message}`); } if (event.type === 'payment.paid') fulfillOrder(event.data.metadata.order_id); res.json({ received: true }); });
@app.route('/webhook', methods=['POST']) def webhook(): sig = request.headers.get('X-Inzopay-Signature') secret = os.environ['INZOPAY_WEBHOOK_SECRET'] try: event = inzopay.webhooks.construct_event(request.get_data(), sig, secret) except inzopay.SignatureVerificationError: return 'Invalid signature', 400 if event['type'] == 'payment.paid': fulfill_order(event['data']['metadata']['order_id']) return jsonify(received=True)
Webhook Events
Node.js / TypeScript
Python
PHP
cURL
All endpoints are available directly via cURL — see the full example in the Authentication section above.
Wallets API
Payouts API
Rate Limits
429 errors. Response headers include Retry-After in seconds.
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