Download OpenAPI specification:
Server-to-Server API for automated partner integrations with digital goods distribution platform.
1.2.0
GET /services/esim/{iccid}/status — response schema corrected to match
the actual provider response (previously documented fields like
esim_id, data_balance, active_packages did not exist in the real
response; see EsimStatus/EsimPackage schemas for the current shape)POST /catalog/quote — locks a SKU's price for ~90 seconds;
pass the returned quote_id to POST /orders to guarantee the order
is created at that price. See the rate limits table below for its bucket.Limits are enforced per partner (not per IP), independently for each
group below — exhausting one does not affect the others. Exceeding a
limit returns 429 Too Many Requests. The response includes
X-RateLimit-Limit and X-RateLimit-Remaining headers on every
request, and Retry-After on 429 responses.
| Endpoints | Limit |
|---|---|
GET /catalog/* (products, pricelist, categories) |
300 requests/minute |
POST /catalog/quote |
120 requests/minute |
GET /orders, GET /orders/{uuid} |
120 requests/minute |
POST /orders, POST /esim/{iccid}/topup |
120 requests/minute |
GET /services/esim/{iccid}/status |
60 requests/minute |
Order status changes are pushed via webhooks — prefer
subscribing to those over polling GET /orders/{uuid}, both to reduce
latency and to stay comfortably under the read limit.
{- "success": true,
- "data": {
- "partner": {
- "uuid": "a3c3c002-1bcc-4593-bf39-e591c1d22cf0",
- "name": "Partner Name",
- "email": "partner@example.com",
- "currency": "USD",
- "is_active": true,
- "balance": {
- "balance": -58.18,
- "currency": "USD",
- "reserved_amount": 0,
- "available_balance": 41.82,
- "allow_overdraft": true,
- "overdraft_limit": 100,
- "is_overdrafted": true
}
}
}
}{- "success": true,
- "data": {
- "balance": -29.09,
- "currency": "USD",
- "reserved_amount": 0,
- "available_balance": 70.91,
- "allow_overdraft": true,
- "overdraft_limit": 100,
- "is_overdrafted": true
}
}Paginated balance transaction history
| cursor | string Pagination cursor from meta.next_cursor |
| per_page | integer [ 1 .. 100 ] Default: 50 Items per page (max 100) |
{- "success": true,
- "data": [
- {
- "type": "charge",
- "amount": -29.09,
- "balance_after": -58.18,
- "currency": "USD",
- "created_at": "2026-02-24T11:37:58+00:00",
- "order_id": "12161770-8560-4377-9795-e8a70aaceb07",
- "payment_method": null,
- "fee_amount": 0,
- "original_amount": null,
- "original_currency": null,
- "exchange_rate": null
}, - {
- "type": "topup",
- "amount": 500,
- "balance_after": 441.82,
- "currency": "USD",
- "created_at": "2026-02-23T11:37:58+00:00",
- "order_id": null,
- "payment_method": "bank_transfer",
- "fee_amount": 0,
- "original_amount": null,
- "original_currency": null,
- "exchange_rate": null
}
], - "meta": {
- "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wMi0yMyAxMTozNzo1OCIsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
- "prev_cursor": null,
- "per_page": 50
}
}Get paginated product list with optional filters
| locale | string Enum: "en" "ru" Example: locale=en Locale for translations (defaults to partner's locale) |
| cursor | string Pagination cursor from previous response |
| per_page | integer <= 200 Default: 100 Items per page |
| category_id | integer Filter by category |
| type | string Enum: "voucher" "recharge_fixed" "recharge" "voucher_open_range" "esim" "other" Filter by product type |
| include_skus | boolean Default: false Include SKU list (without pricing) |
{- "success": true,
- "data": [
- {
- "id": "019bc0dd-8423-739c-a557-5387d900152b",
- "name": "Apple gift card | USA",
- "type": "voucher",
- "denomination_type": "fixed",
- "category": {
- "id": 18,
- "name": "Test"
}, - "description": "<p>With the credit from a gift card, you can get music, movies, TV shows, apps, books, audiobooks, Apple Music memberships and more.</p>",
- "image": "",
- "attributes": {
- "digital_acceptance": "online"
}, - "fields": [ ],
- "skus": [
- {
- "id": "019bc0dd-8434-7246-a0fa-a8a29b88eeee",
- "name": "$2 Apple Gift Card",
- "image": "",
- "attributes": {
- "denomination": "2",
- "denomination_currency": "USD"
}
}, - {
- "id": "019bc0dd-844e-726d-af0a-24187668feef",
- "name": "$3 Apple Gift Card",
- "image": "",
- "attributes": {
- "denomination": "3",
- "denomination_currency": "USD"
}
}
]
}
], - "meta": {
- "next_cursor": "eyJpZCI6MTIzLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
- "prev_cursor": null,
- "per_page": 100
}
}Get product with SKUs, pricing and stock information
| uuid required | string <uuid> |
| locale | string Enum: "en" "ru" Example: locale=en Locale for translations (defaults to partner's locale) |
{- "success": true,
- "data": {
- "id": "019bc0dd-8423-739c-a557-5387d900152b",
- "name": "Apple gift card | USA",
- "type": "voucher",
- "denomination_type": "fixed",
- "category": {
- "id": 18,
- "name": "Test"
}, - "description": "<p>With the credit from a gift card, you can get music, movies, TV shows, apps, books, audiobooks, Apple Music memberships and more.</p>",
- "image": "",
- "attributes": {
- "digital_acceptance": "online"
}, - "skus": [
- {
- "id": "019bc0dd-8434-7246-a0fa-a8a29b88eeee",
- "name": "$2 Apple Gift Card",
- "price": 2.2,
- "currency": "USD",
- "stock": 100,
- "max_per_order": 1,
- "image": "",
- "attributes": {
- "denomination": "2",
- "denomination_currency": "USD"
}
}, - {
- "id": "019bc0dd-844e-726d-af0a-24187668feef",
- "name": "$3 Apple Gift Card",
- "price": 3.3,
- "currency": "USD",
- "stock": 50,
- "max_per_order": 1,
- "image": "",
- "attributes": {
- "denomination": "3",
- "denomination_currency": "USD"
}
}
]
}
}SKU prices and stock status
| locale | string Enum: "en" "ru" Example: locale=en Locale for translations (defaults to partner's locale) |
| cursor | string |
| per_page | integer <= 200 Default: 100 |
| category_id | integer |
| type | string Enum: "voucher" "recharge_fixed" "esim" |
{- "success": true,
- "data": [
- {
- "sku_id": "019bc0dd-8434-7246-a0fa-a8a29b88eeee",
- "denomination_type": "fixed",
- "price": 2.2,
- "currency": "USD",
- "stock": 100,
- "max_per_order": 1
}, - {
- "sku_id": "019bc0dd-844e-726d-af0a-24187668feef",
- "denomination_type": "fixed",
- "price": 3.3,
- "currency": "USD",
- "stock": 50,
- "max_per_order": 1
}, - {
- "sku_id": "019d732c-57c0-739a-8a38-b767229f881f",
- "denomination_type": "custom",
- "currency": "AED",
- "stock": 9999,
- "max_per_order": 99,
- "markup_percent": -2,
- "markup_fixed": 0,
- "rate": 0.272
}
], - "meta": {
- "next_cursor": "eyJpZCI6MTIzLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
- "prev_cursor": null,
- "per_page": 100
}
}Locks the current price for a SKU for a short time, returning a quote_id
you can pass to POST /orders (as quote_id) to guarantee the order is
charged exactly this price, even if it changes before you place the order.
expires_at in
the response). Request a fresh quote if it expires before you order.POST /orders without quote_id still
works exactly as before, priced at whatever is current at that moment.fields.amount you
intend to order with — the locked price is only valid for that amount.| sku_id required | string <uuid> |
| fields required | object Same fields you would send in |
{- "sku_id": "019bc0dd-8562-7173-afd9-a5cc534fafb7",
- "fields": {
- "quantity": 1
}
}{- "success": true,
- "data": {
- "quote_id": "0199a1e2-4b3a-7c9e-9e2a-1c2f6a7b9d31",
- "price": 29.09,
- "quantity": 1,
- "amount": null,
- "denomination_currency": null,
- "total_amount": 29.09,
- "currency": "USD",
- "expires_at": "2026-01-15T11:55:59+00:00"
}
}Available categories with attributes
| locale | string Enum: "en" "ru" Example: locale=en Locale for translations (defaults to partner's locale) |
| target | string Enum: "product" "sku" Filter attributes by target |
{- "success": true,
- "data": [
- {
- "id": 0,
- "name": "string",
- "parent_id": 0,
- "attributes": [
- {
- "code": "string",
- "name": "string",
- "type": "text",
- "target": "product"
}
]
}
]
}Get order history with filters
| cursor | string |
| per_page | integer <= 100 Default: 50 |
| status | string Enum: "created" "processing" "completed" "cancelled" "failed" "partially_completed" |
| external_id | string Search by your order ID |
| date_from | string <date-time> Example: date_from=2025-01-01T00:00:00Z |
| date_to | string <date-time> Example: date_to=2025-01-31T23:59:59Z |
{- "success": true,
- "data": [
- {
- "id": "7898e683-4e56-44a3-9782-eca3f758a844",
- "external_id": "ORD-12345",
- "status": "completed",
- "total_amount": 29.09,
- "currency": "USD",
- "metadata": null,
- "created_at": "2026-01-15T11:54:29+00:00",
- "items": [
- {
- "sku_id": "019bc0dd-8562-7173-afd9-a5cc534fafb7",
- "sku_name": "$30 Apple Gift Card",
- "quantity": 1,
- "price": 29.09,
- "currency": "USD",
- "status": "completed",
- "delivery_data": [
- {
- "pin": "9b329e7e9764a41cf516e7e716035c2e",
- "expiration": null,
- "serialNumber": ""
}
], - "customer_data": null,
- "error_message": null
}
]
}
], - "meta": {
- "next_cursor": null,
- "prev_cursor": null,
- "per_page": 50
}
}Create new order. Requires HMAC-SHA256 signature for S2S authentication.
X-Timestamp header is requiredX-Signature header is requiredAuthorization: Bearer {s2s_token} is requiredmessage = timestamp + sku_id + external_id
signature = HMAC-SHA256(message, partner_secret)
Where timestamp is the value from X-Timestamp header (Unix integer),
sku_id is item.sku_id from request body, external_id is external_id from request body.
Example:
timestamp = "1768478058"
sku_id = "019bc0dd-8562-7173-afd9-a5cc534fafb7"
external_id = "ORD-12345"
message = "1768478058019bc0dd-8562-7173-afd9-a5cc534fafb7ORD-12345"
signature = hmac_sha256(message, partner_secret)
partner_secret from your partner settings (not the API token!)quote_id (from POST /catalog/quote) to guarantee
the order is charged exactly the price you saw.| X-Timestamp required | integer Example: 1768478058 Unix timestamp (tolerance ±5 minutes) |
| X-Signature required | string Example: 13fbd7a9a501ea39aeec861a27158dfa00c491aa657798adac8ed9b2066a6fa2 HMAC-SHA256 signature (hex) |
| external_id required | string Your unique order identifier |
required | object |
| metadata | object or null Custom metadata for your records |
| quote_id | string or null <uuid> Optional. |
{- "external_id": "ORD-12345",
- "item": {
- "sku_id": "019bc0dd-8562-7173-afd9-a5cc534fafb7",
- "fields": {
- "quantity": 1
}
}
}{- "success": true,
- "message": "Order created successfully",
- "data": {
- "id": "12161770-8560-4377-9795-e8a70aaceb07",
- "external_id": "ORD-12345",
- "status": "completed",
- "total_amount": 29.09,
- "currency": "USD",
- "metadata": null,
- "created_at": "2026-01-15T12:58:23+00:00",
- "items": [
- {
- "sku_id": "019bc0dd-8562-7173-afd9-a5cc534fafb7",
- "sku_name": "$30 Apple Gift Card",
- "quantity": 1,
- "price": 29.09,
- "currency": "USD",
- "status": "completed",
- "delivery_data": [
- {
- "pin": "8f8649ff5c017b31869c99a37749d0d6",
- "expiration": null,
- "serialNumber": ""
}
], - "customer_data": null,
- "error_message": null
}
]
}
}Get order by UUID
| uuid required | string <uuid> Example: 7898e683-4e56-44a3-9782-eca3f758a844 Order UUID |
{- "success": true,
- "data": {
- "id": "7898e683-4e56-44a3-9782-eca3f758a844",
- "external_id": "ORD-12345",
- "status": "completed",
- "total_amount": 29.09,
- "currency": "USD",
- "metadata": null,
- "created_at": "2026-01-15T11:54:29+00:00",
- "items": [
- {
- "id": 1,
- "sku_id": "019bc0dd-8562-7173-afd9-a5cc534fafb7",
- "sku_name": "$30 Apple Gift Card",
- "quantity": 1,
- "price": 29.09,
- "currency": "USD",
- "status": "completed",
- "delivery_data": [
- {
- "pin": "9b329e7e9764a41cf516e7e716035c2e",
- "expiration": null,
- "serialNumber": ""
}
], - "customer_data": null,
- "error_message": null
}
]
}
}Add a new data package to an existing eSIM by creating a top-up order.
This endpoint creates a regular order that recharges an existing eSIM instead of creating a new one.
X-Timestamp header is requiredX-Signature header is requiredAuthorization: Bearer {s2s_token} is requiredIMPORTANT: Top-up signature uses ICCID instead of SKU ID.
message = timestamp + iccid + external_id
signature = HMAC-SHA256(message, partner_secret)
Where:
timestamp is the value from X-Timestamp header (Unix integer)iccid is the ICCID from URL pathexternal_id is from request bodyExample:
timestamp = "1768478058"
iccid = "8944422711108338982"
external_id = "topup-12345"
message = "17684780588944422711108338982topup-12345"
signature = hmac_sha256(message, partner_secret)
can_renew: true status (check via /services/esim/{iccid}/status)external_id must be unique across all your orders/orders endpointsku_uuid is not provided, uses the same SKU as original eSIM purchase| iccid required | string Example: 8944422711108338982 eSIM ICCID to top-up |
| X-Timestamp required | integer Example: 1768478058 Unix timestamp (tolerance ±5 minutes) |
| X-Signature required | string Example: 13fbd7a9a501ea39aeec861a27158dfa00c491aa657798adac8ed9b2066a6fa2 HMAC-SHA256 signature (hex, lowercase) |
| external_id required | string Your unique order identifier |
| sku_uuid | string <uuid> SKU UUID for the data package to add. Optional - if not provided, uses the same SKU as the original eSIM purchase. |
{- "external_id": "topup-12345",
- "sku_uuid": "029bc0dd-8562-7173-afd9-a5cc534fafb8"
}{- "success": true,
- "message": "Top-up order created successfully",
- "data": {
- "id": "42161770-8560-4377-9795-e8a70aaceb10",
- "external_id": "topup-12345",
- "status": "completed",
- "total_amount": 15,
- "currency": "USD",
- "metadata": null,
- "created_at": "2026-01-15T14:30:00+00:00",
- "items": [
- {
- "sku_id": "029bc0dd-8562-7173-afd9-a5cc534fafb8",
- "sku_name": "10GB Europe Data",
- "quantity": 1,
- "price": 15,
- "currency": "USD",
- "status": "completed",
- "delivery_data": [
- {
- "iccid": "8944422711108338982",
- "status": "recharged",
- "message": "Package successfully added to existing eSIM"
}
], - "customer_data": {
- "iccid": "8944422711108338982",
- "quantity": 1
}, - "error_message": null
}
]
}
}Get current status, data balance, and details for an eSIM by ICCID.
| iccid required | string Example: 8944422711108338982 eSIM ICCID (unique identifier) |
{- "success": true,
- "data": {
- "sim": {
- "id": "6c4045e5-e041-400e-ada1-b5320e20f01d",
- "iccid": "8944422711108338982",
- "qr_code_text": "LPA:1$rsp-3104.idemia.io$ABC-123-DEF",
- "smdp_address": "rsp-3104.idemia.io",
- "matching_id": "ABC-123-DEF",
- "created_at": "2026-01-15T10:00:00.000000Z",
- "last_bundle": "10GB Europe Data",
- "status": "Installed",
- "total_bundles": 1,
- "can_renew": true,
- "android_universal_link": "https://esimsetup.android.com/esim_qrcode_provisioning?carddata=LPA:1$rsp-3104.idemia.io$ABC-123-DEF",
- "policy": "The package can be renewed after the validity period ends or all the data is consumed.",
- "sim_applied": true,
- "number": null
}, - "in_use_packages": [
- {
- "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
- "package_type_id": "f0e1d2c3-b4a5-4968-8778-6655443322aa",
- "sim_id": "6c4045e5-e041-400e-ada1-b5320e20f01d",
- "package": "10GB Europe Data",
- "initial_data_quantity": 10,
- "initial_data_unit": "GB",
- "rem_data_quantity": 8.5,
- "rem_data_unit": "GB",
- "date_created": "2026-01-15 10:00:00",
- "date_activated": "2026-01-15T10:05:00.000000Z",
- "date_expiry": "2026-02-14T10:05:00.000000Z",
- "activated": true,
- "status": "Installed",
- "sim": {
- "description": "Duplicate of the top-level `sim` object"
}, - "unlimited": false,
- "extra_info": null
}
], - "assigned_packages": [ ],
- "completed_packages": [ ],
- "revoked_packages": [ ],
- "coverage": [
- {
- "id": 205,
- "country_name": "Ireland",
- "code": "ie",
- "iso": "irl",
- "network_name": "Vodafone Ireland Limited",
- "network_code": "IRLEC",
- "t_2G": true,
- "th_3G": true,
- "for-4G": true,
- "fiv_5G": true
}
], - "overall_usage": {
- "initial_data_quantity": 10,
- "initial_data_unit": "GB",
- "rem_data_quantity": 8.5,
- "rem_data_unit": "GB"
}
}
}Configure your webhook URL in partner settings. The system will send HTTP POST requests to that URL on order events.
Every webhook request includes two headers for authenticity verification:
X-Timestamp — Unix timestamp (seconds)X-Signature — HMAC-SHA256 signatureSignature calculation:
message = timestamp + event + idempotency_key
signature = HMAC-SHA256(message, partner_secret)
Where event and idempotency_key are top-level fields from the webhook JSON body.
Timestamp tolerance is ±5 minutes.
Each webhook includes a unique idempotency_key (UUID). Use it to safely
handle duplicate deliveries — the same event may be retried up to 3 times
with exponential backoff (10s, 100s) if your server doesn't return HTTP 2xx.
Your endpoint must return HTTP 2xx within 10 seconds. Non-2xx responses or timeouts are treated as failures and trigger retries.
Sent when an order reaches status: completed, failed or partially_completed.
| event | string Value: "order.status_changed" |
| timestamp | string <date-time> ISO 8601 timestamp of when the event occurred |
| idempotency_key | string <uuid> Unique key for this delivery — use to safely deduplicate retries |
object |
{- "event": "order.status_changed",
- "timestamp": "2026-01-15T12:58:23+00:00",
- "idempotency_key": "550e8400-e29b-41d4-a716-446655440000",
- "data": {
- "order": {
- "id": "12161770-8560-4377-9795-e8a70aaceb07",
- "external_id": "ORD-12345",
- "status": "completed",
- "total_amount": 29.09,
- "currency": "USD",
- "completed_at": "2026-01-15T12:58:23+00:00",
- "items": [
- {
- "sku_id": "019bc0dd-8562-7173-afd9-a5cc534fafb7",
- "quantity": 1,
- "price": 29.09,
- "status": "completed",
- "delivery_data": [
- {
- "pin": "ABCD-EFGH-IJKL-MNOP",
- "serial_number": "VOUCHER123456",
- "expiration_date": "2027-01-15"
}
]
}
]
}
}
}Sent when an order is refunded (fully or partially).
The order status does not change on refund — check the refund block.
For fully refunded items delivery_data is revoked and no longer returned
by the API; the codes must not be used or resold.
| event | string Value: "order.refunded" |
| timestamp | string <date-time> ISO 8601 timestamp of when the event occurred |
| idempotency_key | string <uuid> Unique key for this delivery — use to safely deduplicate retries |
object |
{- "event": "order.refunded",
- "timestamp": "2026-01-20T10:15:00+00:00",
- "idempotency_key": "880e8400-e29b-41d4-a716-446655440003",
- "data": {
- "order": {
- "id": "12161770-8560-4377-9795-e8a70aaceb07",
- "external_id": "ORD-12345",
- "status": "completed",
- "total_amount": 29.09,
- "currency": "USD",
- "completed_at": "2026-01-15T12:58:23+00:00",
- "refund": {
- "status": "full",
- "amount": 29.09,
- "refunded_at": "2026-01-20T10:15:00+00:00"
}, - "items": [
- {
- "sku_id": "019bc0dd-8562-7173-afd9-a5cc534fafb7",
- "quantity": 1,
- "price": 29.09,
- "status": "completed",
- "refunded_amount": 29.09
}
]
}
}
}