Deliver the eSIM
A completed order holds one eSIM for each one you bought. Each has an activation code and install links your customer can use on their phone.
Reading the eSIMs
Read the order with GET /v1/orders/{id} (scope orders:read). The esims list is empty while the order is processing and complete once it is completed. To find an eSIM later, use GET /v1/esims, filtered by iccid if you want one (scope esims:read).
# A completed order carries its eSIMs
curl https://api.travixorglobal.com/v1/orders/ORDER_ID \
-H "Authorization: Bearer $TRAVIXOR_API_KEY"
# Find one eSIM by its serial number (ICCID)
curl "https://api.travixorglobal.com/v1/esims?iccid=8901234567890123456" \
-H "Authorization: Bearer $TRAVIXOR_API_KEY"interface Esim {
id: string
iccid: string | null
activation_code: string | null
ios_install_link: string | null
android_install_link: string | null
}
const res = await fetch('https://api.travixorglobal.com/v1/orders/ORDER_ID', {
headers: { authorization: `Bearer ${process.env.TRAVIXOR_API_KEY}` },
})
const { order } = (await res.json()) as { order: { status: string; esims: Esim[] } }
if (order.status === 'completed') {
for (const esim of order.esims) {
// Put activation_code in a QR code, or show the install link that matches the customer's phone.
console.log(esim.iccid, esim.activation_code, esim.ios_install_link, esim.android_install_link)
}
}import os
import requests
res = requests.get(
"https://api.travixorglobal.com/v1/orders/ORDER_ID",
headers={"Authorization": f"Bearer {os.environ['TRAVIXOR_API_KEY']}"},
timeout=30,
)
order = res.json()["order"]
if order["status"] == "completed":
for esim in order["esims"]:
# Put activation_code in a QR code, or show the install link that matches the customer's phone.
print(esim["iccid"], esim["activation_code"], esim["ios_install_link"], esim["android_install_link"]){
"id": "9c26b0e4-1a7d-4e38-b5f2-d4803c7a19e6",
"order_id": "e3a94d17-72c0-4b85-9f1e-6d08a2c5b7f1",
"iccid": "8901234567890123456",
"status": "ready",
"activation_code": "LPA:1$smdp.example.invalid$AAAA-BBBB-CCCC-DDDD",
"ios_install_link": "https://example.invalid/install/ios/AAAA-BBBB",
"android_install_link": "https://example.invalid/install/android/AAAA-BBBB",
"data_total_mb": null,
"data_used_mb": null,
"data_left_mb": null,
"activated_at": null,
"expires_at": null,
"updated_at": "2026-11-02T09:30:07.000Z"
}What to give your customer
| Field | Use |
|---|---|
activation_code | The string that starts with LPA:1$. Put it in a QR code for the customer to scan with the phone camera or the phone's eSIM settings, or let them paste it. |
ios_install_link | Opens the install screen on an iPhone. Good for an email or a button on a phone. |
android_install_link | Opens the install screen on an Android phone. |
iccid | The eSIM's serial number. Handy for support, and for finding the eSIM again. |
Your customer scans the QR code or taps the link on the phone that will use the eSIM. For a QR code, any QR library will do; encode the activation_code exactly as you received it.
Handle the code with care
- An activation code installs one eSIM, once. Treat it like a ticket: send it only to the customer who bought it.
- Do not write activation codes to your logs.
- If an install did not work, do not buy again. Check the order, and contact us with the order
id.
Data use
The data_total_mb, data_used_mb and data_left_mb fields, and activated_at and expires_at, are filled in when the information is available and can be null. Do not depend on them to cut off service or to bill your customer.