Developers
Three ways to accept payments — from a ready-made link with no code at all to a full API integration with webhooks.
Payment link
Created in the dashboard. Good for messengers, invoices and a QR code at the counter.
No codeReady-made module
Integration with InSales and other platforms: the payment method appears right in the shop basket.
Set up in an hourREST API
Create a payment from your server, use a ready payment page on our domain or a form right on your site, and get the result as a webhook signed with HMAC-SHA256.
Full controlWhat the integration looks like
Your server creates a payment and gets a link to send the buyer to. When the payment finishes, we call your webhook URL and sign the call. Keys are issued in the merchant cabinet, section “API and webhooks”.
POST /api/v2/paymentscurl -X POST https://exezine.az/api/v2/payments \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-1024-try-1" \
-d '{
"amount": 4990,
"currency": "AZN",
"order_id": "1024",
"description": "Order #1024",
"customer": { "email": "client@example.com" },
"return_url": "https://your-site.az/thanks"
}'
201 Created{
"id": "EXZ-20260922-1FA5E8A416",
"object": "payment",
"status": "pending",
"amount": 4990,
"currency": "AZN",
"order_id": "1024",
"checkout_url": "https://exezine.az/checkout/EXZ-20260922-1FA5E8A416",
"created_at": "2026-09-22T20:15:00+04:00"
}
POST /your-webhookX-Exezine-Event: payment.succeeded
X-Exezine-Event-Id: evt_9f1c2b3a4d5e
X-Exezine-Signature: t=1758560100,v1=<HMAC-SHA256>
{
"id": "evt_9f1c2b3a4d5e",
"type": "payment.succeeded",
"livemode": true,
"data": { "object": {
"id": "EXZ-20260922-1FA5E8A416",
"status": "succeeded",
"amount": 4990,
"currency": "AZN",
"order_id": "1024"
} }
}
PHP$body = file_get_contents('php://input');
[$t, $v1] = sscanf($_SERVER['HTTP_X_EXEZINE_SIGNATURE'], 't=%d,v1=%s');
$ok = hash_equals(hash_hmac('sha256', $t . '.' . $body, $secret), $v1)
&& abs(time() - $t) < 300; // the signature is valid for 5 minutes
HTML<div id="pay"></div>
<script src="https://exezine.az/assets/js/exezine-checkout.js"></script>
<script>
ExezineCheckout.mount('#pay', {
url: payment.checkout_url,
onSuccess: function (p) { location.href = '/thanks'; }
});
</script>
The full specification is available as OpenAPI 3.1 — import it into Postman or Insomnia.
Full documentation
A reference for every endpoint: creating payments, statuses, refunds, payment links, webhooks with signature verification and the embedded form. You can send the link to your developer — no account is needed for it.
Integration security
- The API key is sent in the Authorization header only — never in the page URL.
- Every webhook is signed with HMAC-SHA256: verify the signature before changing an order status.
- Treat a webhook as a possible duplicate: process it idempotently by order_id.
- Card data never passes through your server — it is captured on the bank page.
Need the full specification or sandbox access? Write to support@exezine.az and we will send the documentation and test keys.