Issue gift cards & eSIMs in one call
One catalog for every product family. An order is priced the moment you place it and never above the ceiling you set, it is idempotent against your prepaid wallet, and webhooks are signed — so retries are safe and launch day is boring.
API keys are issued and managed in the merchant dashboard once your workspace is approved.
How an order flows
One short loop — three calls and a signed webhook — and it's the same loop for every product family.
Find a product
GET /products
Browse one catalog of gift cards, eSIM plans, and top-ups by category, country, or text — or refresh exactly the products you sell by id.
Place the order
POST /orders
Send the item: it is priced and ordered in one call, never above the ceiling you set. Replays with the same key return the same order.
Get the webhook
order.fulfilled
A signed event tells you the moment fulfillment completes. No polling loops.
Reveal the code
POST /orders/{id}/fulfillment
Fetch codes and PINs over a dedicated, audited endpoint — never cached, every reveal counted.
Your language, plain HTTPS
A clean, predictable REST API — JSON in, JSON out, an X-Api-Key header, and no SDK required. Find, order, reveal: your first order is three calls.
const BASE = "https://integration.xegora.com/api/v1";const response = await fetch(`${BASE}/orders`, { method: "POST", headers: { "X-Api-Key": process.env.XEGORA_API_KEY!, "Content-Type": "application/json", "Idempotency-Key": "order-10231", }, body: JSON.stringify({ clientReference: "po-10231", item: { productId, variantId, quantity: 1, currency: "USD" }, maximumTotal: 60.0, // the price your buyer saw }),});const order = await response.json();// 409 price_above_maximum carries quotedTotal — show the new price insteadconsole.log(order.status); // "reserved" — wait for "fulfilled", then reveal- Idempotent orders
- Signed webhooks
- Scoped API keys
- Prefunded wallet
The core surface, end to end
Real request and response shapes — click any row. Withdrawals, deposit history, and product images round out the surface; the complete reference lives at docs.xegora.com.
POST /api/v1/orders
Order against your prepaid wallet: send the item to price and order it in one call (with an optional maximumTotal), or a quoteId. The Idempotency-Key header is required — a retry returns the same order. Scope: orders.create.
{
"id": "0198e000-1111-7abc-9def-222233334444",
"clientReference": "po-10231",
"status": "reserved",
"total": 58.50,
"currency": "USD",
"lines": [
{ "productId": "0198d72d-99d6-75a6-9f12-971050ba7a5f", "variantId": "0198d72d-a15b-7cbf-…",
"productName": "Everyday Digital Gift Card", "variantLabel": "50", "quantity": 1,
"unitPrice": 58.50, "currency": "USD", "faceValue": 50, "faceCurrency": "EUR" }
],
"createdAtUtc": "2026-09-05T12:01:02Z",
"updatedAtUtc": "2026-09-05T12:01:02Z"
}The boring infrastructure you actually want
Everything that makes an issuing integration survive real traffic — idempotency, signatures, scoped credentials, and a wallet that can't overspend.
Unified catalog
Gift cards, eSIM plans, and phone top-ups share one schema, one price feed, and one order flow. Integrate once and every product Xegora adds is yours automatically.
Idempotent orders
Order creation and fulfillment reveal both take an Idempotency-Key header. Network blip, timeout, aggressive retry loop — replay the request as many times as you like and exactly one order exists.
Signed webhooks
order.processing, order.fulfilled, order.failed, order.refunded, and wallet.credited are delivered over HTTPS with an HMAC-SHA256 signature (X-Xegora-Signature), retried at-least-once, and deduplicated by a stable X-Xegora-Event-Id.
Least-privilege keys
Every key carries an explicit scope set — catalog reads, quoting, ordering, wallet reads, and money-moving scopes are all separate — plus an optional CIDR allow-list and expiry. Revocation is immediate.
Prefunded wallet
Orders reserve from your prepaid balance and capture on fulfillment; failures release the reservation automatically. Fund it on-chain to a permanent deposit address, and withdraw unused funds only to your own registered payout details.
Catalog built for selection
Browse by category, country or text, narrow to fixed or custom amounts, and refresh the products you sell by id in one call — with redemption steps and the brand's other countries on every product, priced in your sell currency.
Wholesale prices, no surprises
The quote is the price. Everything else about your commercial terms is agreed when your merchant workspace is set up.
- Wholesale product pricing in your sell currency — the quote's total is exactly what your wallet is debited
- No hidden per-call fees; a flat 120 requests/minute rate limit per workspace
- Your workspace plan (setup and terms) is agreed at merchant onboarding
- Withdrawals of unused funds are quoted transparently — fee, net, and payout date up front
Ready to issue your first order?
Apply for a merchant workspace from your account, get approved, and issue scoped API keys from the dashboard — then your first order is three calls away. The full reference is waiting at docs.xegora.com.