SprintPay E-sim
Reseller API

E-sim Reseller API

Sell global eSIM data and phone plans from your website through SprintPay.

Base URL https://web.sprintpay.online/api/merchant/vas/esim

E-sim Reseller API

Base URL: https://web.sprintpay.online/api

Sell global E-sim data and phone plans on your website. Call SprintPay from your backend — your merchant wallet is debited in NGN and orders are fulfilled automatically.


1. Overview

Layer Role
Your website Product UI, customer pricing, checkout, receipts
SprintPay (E-sim API) Authentication, wallet ledger, vendor pricing, order tracking
Upstream provider eSIM provisioning, QR codes, network status

You integrate only with SprintPay. Do not expose upstream credentials on your site.


2. Authentication

Every request requires both credentials:

Credential How to send
Webkey key in JSON body, query string, or X-Api-Key header
Webhook secret Authorization: Bearer <secret> or X-SprintPay-Token
POST /api/merchant/vas/esim/orders HTTP/1.1
Host: web.sprintpay.online
Content-Type: application/json
X-Api-Key: your_webkey_here
Authorization: Bearer your_webhook_secret_here

3. Integration flow

1. List packages       → GET  /api/merchant/vas/esim/packages
2. Quote price         → POST /api/merchant/vas/esim/quote
3. Create order        → POST /api/merchant/vas/esim/orders
4. Poll order status   → GET  /api/merchant/vas/esim/orders/{externalOrderId}
5. Deliver QR / code   → when status = completed
6. Check usage         → GET  /api/merchant/vas/esim/esims/{iccid}/usage
7. Top up (optional)   → GET topup-options, then POST topup

Orders are asynchronous. After POST /orders, status is usually processing until the eSIM is provisioned. Poll until completed or failed.


4. Endpoints

Base path: /api/merchant/vas/esim

Catalogue

GET /packages

List available E-sim packages with vendor prices.

Param Description
country ISO country code (e.g. US, JP, GB)
region Region name filter
type data, phone, or omit for all enabled types
search Search name, code, or country
page Page number (default 1)
limit Per page, max 200 (default 50)
{
  "status": true,
  "data": {
    "packages": [
      {
        "packageCode": "JP_7D_1GB",
        "name": "Japan 7 Days 1GB",
        "locationCode": "JP",
        "planType": "data",
        "volumeGB": 1,
        "validityDays": 7,
        "retailUsdCents": 500,
        "retailUsdFormatted": "$5.00",
        "chargeNgn": 7500,
        "marginPercent": 15,
        "supportTopUp": true
      }
    ],
    "pagination": { "page": 1, "limit": 50, "total": 120, "pages": 3 }
  }
}

GET /packages/{packageCode}

Single package details (same price fields as list).

POST /quote

Preview price and wallet balance before purchase.

{
  "key": "your_webkey",
  "packageCode": "JP_7D_1GB"
}

Orders

POST /orders

Create an eSIM order. Wallet is debited immediately; provisioning may take a few seconds.

{
  "key": "your_webkey",
  "packageCode": "JP_7D_1GB",
  "externalOrderId": "YOUR-UNIQUE-REF-123",
  "email": "customer@example.com"
}
Field Required Notes
packageCode Yes From catalogue
externalOrderId Yes Your unique reference (idempotency per webkey)
email No Stored for your records

Success (201)

{
  "status": true,
  "message": "E-sim order created. QR details will be available when provisioning completes.",
  "data": {
    "externalOrderId": "YOUR-UNIQUE-REF-123",
    "orderId": "upstream-order-id",
    "status": "processing",
    "packageCode": "JP_7D_1GB",
    "chargeNgn": 7500,
    "retailUsdFormatted": "$5.00"
  }
}

GET /orders

List your orders. Query: status, page, limit.

GET /orders/{orderRef}

Get one order by externalOrderId or upstream orderId.

{
  "status": true,
  "data": {
    "externalOrderId": "YOUR-UNIQUE-REF-123",
    "status": "completed",
    "iccid": "8901234567890123456",
    "qrCodeUrl": "https://...",
    "activationCode": "LPA:1$...",
    "supportTopUp": true,
    "canTopUp": true
  }
}

eSIM management

GET /esims/{iccid}

Live eSIM details (must belong to your webkey). Includes supportTopUp and canTopUp when the original package supports top-ups.

GET /esims/{iccid}/usage

Data usage statistics.

GET /esims/{iccid}/topup-options

List valid top-up packages for an existing eSIM. Always call this before topping up.

Field Description
canTopUp true if at least one top-up package is available for this eSIM
topupPackages Array of eligible top-up plans with chargeNgn
{
  "status": true,
  "data": {
    "iccid": "8901234567890123456",
    "canTopUp": true,
    "topupPackages": [
      {
        "packageCode": "CKH205",
        "name": "Bulgaria 1GB 7Days",
        "volumeGB": 1,
        "duration": 7,
        "price": 203,
        "priceFormatted": "$2.03",
        "retailUsdCents": 233,
        "retailUsdFormatted": "$2.33",
        "chargeNgn": 3495
      }
    ]
  }
}

POST /esims/{iccid}/topup

Add a top-up to an existing eSIM. Use a packageCode from topup-options only.

{
  "key": "your_webkey",
  "packageCode": "TOPUP_CODE_FROM_OPTIONS",
  "externalOrderId": "YOUR-TOPUP-REF-456"
}

Phone plans: topping up extends validity and keeps the same phone number.


5. Top-up eligibility

Field Where Meaning
supportTopUp Package catalogue, order, eSIM detail Original plan supports top-ups
canTopUp Order (when iccid exists), eSIM detail, topup-options This eSIM can be topped up right now

Recommended flow: check supportTopUp when listing packages → after purchase, call GET /topup-options to confirm canTopUp and get valid packageCode values → POST /topup.


6. Pricing

Field Description
retailUsdCents / retailUsdFormatted Your cost in USD
chargeNgn Amount debited from your SprintPay wallet

You may mark up further when selling to your own customers.


7. Order statuses

Status Meaning
processing Paid; waiting for eSIM provisioning
completed QR / activation code available
failed Order failed; wallet refunded when applicable

8. Phone plans

  • Filter catalogue with ?type=phone.
  • Real phone number is assigned after the end user activates the eSIM on device.
  • Do not show placeholder msisdn until status is active.

9. Error responses

{
  "status": false,
  "message": "Insufficient wallet balance.",
  "balance": 1200,
  "required": 7500
}
HTTP Meaning
401 Missing/invalid webkey or secret
402 Insufficient wallet balance
403 Account not verified or restricted
404 Package or order not found
409 Duplicate externalOrderId
503 E-sim disabled or not configured

10. Code examples

List packages (Japan)

curl -s "https://web.sprintpay.online/api/merchant/vas/esim/packages?country=JP&limit=10" \
  -H "X-Api-Key: YOUR_WEBKEY" \
  -H "Authorization: Bearer YOUR_WEBHOOK_SECRET"

Create order

curl -s -X POST "https://web.sprintpay.online/api/merchant/vas/esim/orders" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: YOUR_WEBKEY" \
  -H "Authorization: Bearer YOUR_WEBHOOK_SECRET" \
  -d '{
    "packageCode": "JP_7D_1GB",
    "externalOrderId": "SHOP-ORDER-99001",
    "email": "buyer@example.com"
  }'

Check order

curl -s "https://web.sprintpay.online/api/merchant/vas/esim/orders/SHOP-ORDER-99001" \
  -H "X-Api-Key: YOUR_WEBKEY" \
  -H "Authorization: Bearer YOUR_WEBHOOK_SECRET"

Check top-up options

curl -s "https://web.sprintpay.online/api/merchant/vas/esim/esims/8901234567890123456/topup-options" \
  -H "X-Api-Key: YOUR_WEBKEY" \
  -H "Authorization: Bearer YOUR_WEBHOOK_SECRET"

Top up an eSIM

curl -s -X POST "https://web.sprintpay.online/api/merchant/vas/esim/esims/8901234567890123456/topup" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: YOUR_WEBKEY" \
  -H "Authorization: Bearer YOUR_WEBHOOK_SECRET" \
  -d '{
    "packageCode": "CKH205",
    "externalOrderId": "SHOP-TOPUP-99002"
  }'

11. Related docs