API v2 is in alpha and may change at any time. Use v1 for production.
GMJ Roaming API

Buy eSIMs and top up data. These endpoints spend your balance.


Buy eSIMs

POST
https://api.gmjroaming.com/api/v1
/checkout

Buys one or more packages from your balance and waits until they're ready, which can take several seconds. Use a generous client timeout (60 s).

The body is a JSON array. Every item must carry the same transaction_id, which you generate. It's your reference for this purchase.

  • 200: done. Fetch the eSIMs with POST /myesim and {"transaction_id": "..."}.
  • 500: provisioning failed and the balance was refunded. You can retry with the same transaction_id.
  • Sending a transaction_id that already completed returns 200 again, with no second charge.

Buy eSIMs › Request Body

​object[] · minItems: 1
packageCode
​string · required

From /list-esim.

count
​integer · min: 1 · required
transaction_id
​string · required

Your reference. Same value on every item.

Buy eSIMs › Responses

Purchased. The eSIMs are ready.

status
​string · const
Const value: success
code
​integer · const
Const value: 200
message
​string
currency
​string · const
Const value: USD
current_balance
​string

Balance after the purchase.

transaction_id
​string
​object

Buy eSIMs (sub-reseller account)

POST
https://api.gmjroaming.com/api/v1
/reseller/checkout

Same contract as /checkout, for sub-reseller accounts. The cost is charged to the parent account.

Buy eSIMs (sub-reseller account) › Request Body

​object[] · minItems: 1
packageCode
​string · required
count
​integer · min: 1 · required
transaction_id
​string · required

Buy eSIMs (sub-reseller account) › Responses

Purchased

status
​string · const
Const value: success
code
​integer · const
Const value: 200
message
​string
currency
​string · const
Const value: USD
current_balance
​string

Balance after the purchase.

transaction_id
​string
​object

List top-up plans for an eSIM

GET
https://api.gmjroaming.com/api/v1
/list-topupdataplan

List top-up plans for an eSIM › query Parameters

iccid
​string · required

List top-up plans for an eSIM › Responses

Top-up plans

Every v1 response uses this wrapper.
status
​string · enum
Enum values:
success
error
code
​integer
message
​string

Top up an eSIM

POST
https://api.gmjroaming.com/api/v1
/topup-esim

Adds a data plan from /list-topupdataplan to an eSIM. It's asynchronous: you get 202, and the top-up finishes in the background.

transaction_id is the eSIM's original purchase reference, not a new one. The server creates a new reference for the top-up and returns it as transaction_id in the response. Use that one with /check-status-payment.

Always send external_id (your own unique key for this top-up). The top-up reference becomes topup-<external_id>, so a retry with the same external_id is never charged twice.

Check the result with /check-status-payment: Success, or FAILED with the balance refunded.

Top up an eSIM › Request Body

packageCodeTopup
​string · required

packageCode from /list-topupdataplan.

iccid
​string · required
transaction_id
​string · required

The transaction_id of the purchase this eSIM came from.

external_id
​string

Recommended. Your idempotency key for this top-up.

esimTranNo
​string | null

Optional. The eSIM's esimTranNo from /myesim.

Top up an eSIM › Responses

A retry of a top-up that already succeeded. Nothing was charged.

status
​string · const
Const value: success
code
​integer
message
​string
currency
​string · const
Const value: USD
current_balance
​string
transaction_id
​string

The top-up reference. Use it with /check-status-payment.

transaction_status
​string · enum
Enum values:
PROCESSING
Success