All API resources
eSIMs
Prepaid data eSIMs for single countries, regions and the whole world, sold by the eSIM providers on the exchange, such as Airalo and eSimplified. Purchases are charged to an account balance and return the activation code, LPA string and QR code at once.
List eSIM countries
GET/buyers/esim/countries
Lists the country names, followed by the region names, you can pass as country to Market View (eSIM). Country names are upper case (for example JAPAN); region names are as the sellers define them (for example Europe). Free.
Parameters
No parameters.
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X GET \
"https://apiv2.telecomsxchange.com/buyers/esim/countries"import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.get(
"https://apiv2.telecomsxchange.com/buyers/esim/countries",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/countries");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"countries": [
{
"country": "AFGHANISTAN"
},
{
"country": "ALBANIA"
},
{
"country": "Europe"
}
]
}Market View (eSIM)
POST/buyers/esim/market
Searches eSIM data packages for a country, a region or worldwide (Global). Returns each package's ID, name, validity, data allowance, networks, supported countries, seller and price_with_fee (USD, including the TCXC commission). Packages listed for the exact country come first, then by price. Free.
Parameters
countrystringform fieldRequiredCountry name from List eSIM countries (for example JAPAN), a region name such as Europe, or Global for worldwide packages. Case does not matter.
i_vendorintegerform fieldOptionalSearch only this seller, by ID. 0 or empty searches all sellers.
esim_vendorstringform fieldOptionalSeller login to search, for example eSIMP. Ignored when i_vendor is set; an unknown login searches all sellers.
data_GBnumberform fieldOptionalData allowance range: 0.5 (0.5 to 1 GB), 1 (1 to 5 GB), 5 (5 to 10 GB), 10 (10 to 20 GB).
validity_daysintegerform fieldOptionalValidity range: 1 (1 to 7 days), 7 (7 to 15), 15 (15 to 30), 30 (30 to 60), 60 (60 to 90), 90 (90 or more).
pagerintegerform fieldOptionalPackages to return per seller, not in total.
offintegerform fieldOptionalOffset within each seller's results.
Errors
| Message | When |
|---|---|
"country parameter is required" | country is empty |
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X POST \
"https://apiv2.telecomsxchange.com/buyers/esim/market" \
-d country=JAPAN \
-d i_vendor=484 \
-d esim_vendor=eSIMP \
-d data_GB=1 \
-d validity_days=30 \
-d pager=5 \
-d off=0import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.post(
"https://apiv2.telecomsxchange.com/buyers/esim/market",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
data={"country": "JAPAN", "i_vendor": "484", "esim_vendor": "eSIMP", "data_GB": "1", "validity_days": "30", "pager": "5", "off": "0"},
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/market");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(['country' => "JAPAN", 'i_vendor' => "484", 'esim_vendor' => "eSIMP", 'data_GB' => "1", 'validity_days' => "30", 'pager' => "5", 'off' => "0"]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"search_results": [
{
"i_esim_package": "1306",
"i_vendor": "484",
"country_code": "jp",
"name": "Japan 1 GB 7 Days",
"validity_days": "7",
"data_gb": "1",
"networks": "KDDI Rakuten Mobile Inc.",
"vendor_login": "eSIMP",
"price_with_fee": "3.49",
"supported_countries": [
{
"country_name": "JAPAN",
"country_code": "JP"
}
]
},
{
"i_esim_package": "1307",
"i_vendor": "484",
"country_code": "jp",
"name": "Japan 3 GB 15 Days",
"validity_days": "15",
"data_gb": "3",
"networks": "",
"vendor_login": "eSIMP",
"price_with_fee": "7.99",
"supported_countries": [
{
"country_name": "JAPAN",
"country_code": "JP"
}
]
},
{
"i_esim_package": "1308",
"i_vendor": "484",
"country_code": "jp",
"name": "Japan 5 GB 30 Days",
"validity_days": "30",
"data_gb": "5",
"networks": "KDDI Rakuten Mobile Inc.",
"vendor_login": "eSIMP",
"price_with_fee": "11.99",
"supported_countries": [
{
"country_name": "JAPAN",
"country_code": "JP"
}
]
},
"… 2 more items"
]
}Purchase an eSIM
POST/buyers/esim/purchase
Buys an eSIM package from Market View (eSIM). Charges the package price plus the TCXC commission to the account (or the account whose balance it uses) and returns the ICCID, the LPA activation string, a PNG QR code in base64 and an iOS install link, ready to install. Available funds are checked against the listed price before buying.
messsage (three s), not message. The amount charged is the final package price at the moment of purchase plus commission, which can differ slightly from the listed price_with_fee.Parameters
i_esim_packageintegerform fieldRequiredPackage ID from Market View (eSIM).
i_accountintegerform fieldRequiredYour account to charge. It needs balance plus credit limit of at least the package's price_with_fee.
Errors
| Message | When |
|---|---|
"i_esim_package parameter is required to identify the package" | i_esim_package is missing or 0 |
"i_account parameter is required" | i_account is missing or 0 |
"Package not found" | no package has this ID |
"Package not found (3)" | the package's seller is no longer available |
"Account not found" | i_account is not one of your accounts |
"Insufficient available funds (own) for selected account" | the account's balance plus credit limit is below the package price with commission |
"Insufficient available funds (use balance of) for selected account" | the account uses another account's balance and that account cannot cover the price |
"Package is not available anymore, please retry market search to get the updated list of packages" | the package is no longer offered |
"Purchase process encountered unexpected error, please retry market search to get the updated list of packages" | the eSIM could not be issued |
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X POST \
"https://apiv2.telecomsxchange.com/buyers/esim/purchase" \
-d i_esim_package=1306 \
-d i_account=1501import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.post(
"https://apiv2.telecomsxchange.com/buyers/esim/purchase",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
data={"i_esim_package": "1306", "i_account": "1501"},
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/purchase");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(['i_esim_package' => "1306", 'i_account' => "1501"]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"iccid": "8910300000012345678",
"i_esim_order": 412,
"order_uuid": "5f0c6a7e-2b1d-4c8e-9a3f-7d2e1b6c9a40",
"lpa": "LPA:1$smdp.example.net$TN20261022A1B2C3D4",
"qr_base64": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAF4CAIAAAD...",
"ios_install_link": "https://esimsetup.apple.com/esim_qrcode_provisioning?carddata=LPA:1$smdp.example.net$TN20261022A1B2C3D4"
}List top-up packages
POST/buyers/esim/topup/list
Lists the top-up packages available for one of your eSIMs, with price_with_fee in USD including the TCXC commission. Only USD-priced packages are returned. Free.
Parameters
iccidstringform fieldRequiredICCID of an eSIM you bought. Non-digits are removed.
Errors
| Message | When |
|---|---|
"iccid parameter is required" | iccid is missing or has no digits |
"ICCID not found" | the ICCID is not on one of your accounts |
"API Error, please try again later" | top-ups cannot be retrieved at the moment |
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X POST \
"https://apiv2.telecomsxchange.com/buyers/esim/topup/list" \
-d iccid=8910300000012345678import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.post(
"https://apiv2.telecomsxchange.com/buyers/esim/topup/list",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
data={"iccid": "8910300000012345678"},
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/topup/list");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(['iccid' => "8910300000012345678"]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"packages": [
{
"name": "Ukraine 1 GB 7 Days",
"data_GB": "1.00",
"network": [],
"plan_type": "Data Only",
"validity_days": 7,
"validity_days_display": "7 Days",
"package_type_id": 18509,
"activation_policy": "The validity period starts when the eSIM connects to any supported network(s).",
"supported_countries": [
{
"country_name": "Ukraine",
"country_code": "UA"
}
],
"price_with_fee": "1.10"
},
{
"name": "Ukraine 3 GB 30 Days",
"data_GB": "3.00",
"network": [],
"plan_type": "Data Only",
"validity_days": 30,
"validity_days_display": "30 Days",
"package_type_id": 13837,
"activation_policy": "The validity period starts when the eSIM connects to any supported network(s).",
"supported_countries": [
{
"country_name": "Ukraine",
"country_code": "UA"
}
],
"price_with_fee": "3.30"
}
]
}Purchase a top-up
POST/buyers/esim/topup/purchase
Buys a top-up package for one of your eSIMs. The package price is confirmed again at purchase, the price plus commission is charged to i_account (or the account whose balance it uses), and the order UUID is returned. The paying account does not have to be the one that holds the eSIM.
Parameters
iccidstringform fieldRequiredICCID of an eSIM you bought.
package_type_idstringform fieldRequiredpackage_type_id from List top-up packages (numeric or text, depending on the eSIM).
i_accountintegerform fieldRequiredYour account to charge.
Errors
| Message | When |
|---|---|
"iccid parameter is required" | iccid is missing or has no digits |
"i_account parameter is required" | i_account is missing or 0 |
"package_type_id parameter is required" | package_type_id is missing |
"Account not found (1)" | the ICCID is not on one of your accounts |
"API Error, please try again later" | top-ups cannot be retrieved at the moment |
"Package not found, try to search for topup packages again" | package_type_id is not among the eSIM's current USD top-ups |
"Account not found" | i_account is not one of your accounts |
"Insufficient available funds for account (own)" | the account's balance plus credit limit is below the price |
"Insufficient available funds for account (use balance of)" | the account uses another account's balance and that account cannot cover the price |
"Package is not available anymore, please try another package" | the top-up is no longer offered |
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X POST \
"https://apiv2.telecomsxchange.com/buyers/esim/topup/purchase" \
-d iccid=8910300000012345678 \
-d package_type_id=18509 \
-d i_account=1501import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.post(
"https://apiv2.telecomsxchange.com/buyers/esim/topup/purchase",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
data={"iccid": "8910300000012345678", "package_type_id": "18509", "i_account": "1501"},
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/topup/purchase");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(['iccid' => "8910300000012345678", 'package_type_id' => "18509", 'i_account' => "1501"]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"order_uuid": "c40d0f55-8993-40cf-8d83-108ff80ff4ed"
}eSIM order history
POST/buyers/esim/orders
Lists your eSIM purchases and top-ups in a time range, newest first, with the amount charged, status, ICCID, package details and, for purchases, the activation code, LPA string and QR code. Free.
Parameters
date_fromstringform fieldOptionalStart of the range, YYYY-MM-DD HH:MM:SS. Default: 24 hours ago.
date_tostringform fieldOptionalEnd of the range, YYYY-MM-DD HH:MM:SS. Default: now.
pagerintegerform fieldOptionalOrders per page.
offintegerform fieldOptionalOffset of the first order.
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X POST \
"https://apiv2.telecomsxchange.com/buyers/esim/orders" \
-d date_from='2026-10-01 00:00:00' \
-d date_to='2026-10-22 23:59:59' \
-d pager=20 \
-d off=0import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.post(
"https://apiv2.telecomsxchange.com/buyers/esim/orders",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
data={"date_from": "2026-10-01 00:00:00", "date_to": "2026-10-22 23:59:59", "pager": "20", "off": "0"},
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/orders");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(['date_from' => "2026-10-01 00:00:00", 'date_to' => "2026-10-22 23:59:59", 'pager' => "20", 'off' => "0"]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"orders": [
{
"i_esim_order": "6",
"i_account": "1181",
"i_vendor": "484",
"package_name": "India 1 GB 7 Days",
"package_country_code": "IN",
"package_networks": "",
"package_validity_days": "0",
"package_data_gb": "0",
"iccid": "8910300000027319600",
"order_type": "top-up",
"amount_charged": "3.49",
"status": "complete",
"order_uuid": "c40d0f55-8993-40cf-8d83-108ff80ff4ed",
"activation_code": "",
"sm_dp_address": "",
"lpa": null,
"qr_base64": null,
"create_ts": "2025-12-18 22:15:49",
"account_name": "RouteTester",
"country_name": "INDIA"
},
{
"i_esim_order": "5",
"i_account": "1181",
"i_vendor": "484",
"package_name": "India 1 GB 7 Days",
"package_country_code": "in",
"package_networks": "Reliance JIO",
"package_validity_days": "7",
"package_data_gb": "1",
"iccid": "8910300000027319600",
"order_type": "purchase",
"amount_charged": "3.49",
"status": "complete",
"order_uuid": "503ee0f0-74a2-420a-a6a4-3168eead8bdf",
"activation_code": "TN20241105110404EC9DF631",
"sm_dp_address": "consumer.e-sim.global",
"lpa": "LPA:1$consumer.e-sim.global$TN20241105110404EC9DF631",
"qr_base64": "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",
"create_ts": "2025-12-18 22:07:12",
"account_name": "RouteTester",
"country_name": "INDIA"
},
{
"i_esim_order": "4",
"i_account": "1928",
"i_vendor": "484",
"package_name": "Kuwait 3 GB 15 Days",
"package_country_code": "KW",
"package_networks": "",
"package_validity_days": "0",
"package_data_gb": "0",
"iccid": "8910300000030228001",
"order_type": "top-up",
"amount_charged": "10.99",
"status": "complete",
"order_uuid": "ec622b5a-418f-4c9a-8fce-838b41b989fc",
"activation_code": "",
"sm_dp_address": "",
"lpa": null,
"qr_base64": null,
"create_ts": "2025-12-16 00:38:54",
"account_name": "SMS-Route-Test",
"country_name": "KUWAIT"
},
"… 1 more items"
]
}List purchased eSIMs
POST/buyers/esim/list
Lists your eSIMs, newest first, with their live status: profile state (for example RELEASED, INSTALLED, ENABLED), remaining data, days to expiry, and the activation details and iOS install link. With iccid, returns that one eSIM as an esim object instead of an esims list. Free; each eSIM's status is fetched live, so large pages are slower.
Parameters
iccidstringform fieldOptionalReturn only this eSIM. Non-digits are removed.
esim_vendorstringform fieldOptionalSeller login to filter by, for example eSIMP. An unknown login is ignored.
pagerintegerform fieldOptionaleSIMs per page.
offintegerform fieldOptionalOffset of the first eSIM.
Errors
| Message | When |
|---|---|
"eSIM not found" | iccid is given and no eSIM of yours matches |
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X POST \
"https://apiv2.telecomsxchange.com/buyers/esim/list" \
-d iccid=8910300000012345678 \
-d esim_vendor=eSIMP \
-d pager=6 \
-d off=0import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.post(
"https://apiv2.telecomsxchange.com/buyers/esim/list",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
data={"iccid": "8910300000012345678", "esim_vendor": "eSIMP", "pager": "6", "off": "0"},
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/list");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(['iccid' => "8910300000012345678", 'esim_vendor' => "eSIMP", 'pager' => "6", 'off' => "0"]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"esims": [
{
"i_esim": "45",
"i_account": "48",
"i_esim_order": "55",
"iccid": "19220000000184396",
"status": "complete",
"create_ts": "2026-01-05 17:05:15",
"i_vendor": "31",
"package_name": "Europe 1 GB 7 Days",
"package_country_code": "1E",
"package_networks": "",
"package_validity_days": "7",
"package_data_gb": "1",
"order_type": "purchase",
"amount_charged": "1.1",
"order_uuid": "b49ddddc-a67f-47e6-8b21-11180d280b52",
"activation_code": "22184396",
"sm_dp_address": "test.esim.com",
"lpa": "LPA:1$test.esim.com$22184396",
"qr_base64": "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",
"order_status": "complete",
"esim_status": "INSTALLED",
"esim_create_ts": "2026-01-05 17:05:15",
"order_package_networks": "",
"supported_countries": [
{
"country_name": "ALBANIA",
"country_code": "AL"
},
{
"country_name": "AUSTRIA",
"country_code": "AT"
},
{
"country_name": "BOSNIA AND HERZEGOWINA",
"country_code": "BA"
},
"… 46 more items"
],
"esim_status_message": "eSIM Installed",
"esim_last_operation_date": "2026-01-05 17:15:39",
"data_usage_remaining_bytes": 1073741824,
"days_left_to_expiry": 6,
"data_allowance_bytes": 1073741824,
"account_name": "Voice-QA",
"ios_install_link": "https://esimsetup.apple.com/esim_qrcode_provisioning?carddata=LPA:1$test.esim.com$22184396"
},
{
"i_esim": "44",
"i_account": "4",
"i_esim_order": "51",
"iccid": "19220000000173165",
"status": "complete",
"create_ts": "2025-12-24 10:43:06",
"i_vendor": "31",
"package_name": "Israel 1 GB 7 Days",
"package_country_code": "il",
"package_networks": "",
"package_validity_days": "7",
"package_data_gb": "1",
"order_type": "purchase",
"amount_charged": "1.1",
"order_uuid": "4e0ebf2c-8bbb-46c2-9156-1abf0a50e253",
"activation_code": "22173165",
"sm_dp_address": "test.esim.com",
"lpa": "LPA:1$test.esim.com$22173165",
"qr_base64": "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",
"order_status": "complete",
"esim_status": "ERROR",
"esim_create_ts": "2025-12-24 10:43:06",
"order_package_networks": "",
"supported_countries": [],
"esim_status_message": "The eSIM encountered an error while installing",
"esim_last_operation_date": "2026-01-05 16:07:10",
"data_usage_remaining_bytes": 1073741824,
"days_left_to_expiry": -6,
"data_allowance_bytes": 1073741824,
"account_name": "smpp",
"ios_install_link": "https://esimsetup.apple.com/esim_qrcode_provisioning?carddata=LPA:1$test.esim.com$22173165"
},
{
"i_esim": "43",
"i_account": "48",
"i_esim_order": "50",
"iccid": "19220000000191207",
"status": "complete",
"create_ts": "2025-12-16 09:59:38",
"i_vendor": "31",
"package_name": "Africa 1 GB 7 Days",
"package_country_code": "1A",
"package_networks": "",
"package_validity_days": "7",
"package_data_gb": "1",
"order_type": "purchase",
"amount_charged": "1.1",
"order_uuid": "4a2d48e3-f4fb-48c6-b6bd-088da9d29556",
"activation_code": "22191207",
"sm_dp_address": "test.esim.com",
"lpa": "LPA:1$test.esim.com$22191207",
"qr_base64": "iVBORw0KGgoAAAANSUhEUgAAAUgAAAFICAIAAAC9dvBkAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFs0lEQVR4nO3dQW4bSRBFweFg7n9leaH1AEWonMp+jFgbZFPiQ22+yq+vr69/gJZ/f/sBgPuEDUHChiBhQ5CwIUjYECRsCBI2BAkbgoQNQcKGIGFDkLAh6L/zf/p6vf7ecyx362/gTn6Gk39vN/k8t97L9/CEExuChA1BwoYgYUOQsCFI2BAkbAgSNgQJG4KEDUHChqA3tuInnvj/itzaHk9umKvvdcsnfw+/ObEhSNgQJGwIEjYECRuChA1BwoYgYUOQsCFI2BAkbAi6vBU/Mbk9ntwM37oT+9bPZ9t94NtUv4ffnNgQJGwIEjYECRuChA1BwoYgYUOQsCFI2BAkbAgSNgT9wla8anLjPbk5P1Hdkz+XExuChA1BwoYgYUOQsCFI2BAkbAgSNgQJG4KEDUHChiBb8Wu23ePtfvJP5sSGIGFDkLAhSNgQJGwIEjYECRuChA1BwoYgYUOQsCHoF7bi1T3wti305Mb7xLbf+7bnucuJDUHChiBhQ5CwIUjYECRsCBI2BAkbgoQNQcKGIGFD0OWt+K1dMT83uV2/dc/5tn37czmxIUjYECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQJGwIemMr3r6H+eequ+ttqp/rLic2BAkbgoQNQcKGIGFDkLAhSNgQJGwIEjYECRuChA1Br/Pl7RPvar61u95m8v7tyW32reepvs45JzYECRuChA1BwoYgYUOQsCFI2BAkbAgSNgQJG4KEDUGX7xWf3Nbe8snP447uGfN7cic2BAkbgoQNQcKGIGFDkLAhSNgQJGwIEjYECRuChA1Bb9wrfu0tB+9Y3rap3vbZt+3kt3nu99CJDUHChiBhQ5CwIUjYECRsCBI2BAkbgoQNQcKGIGFD0Bv3ip+Y3BVP7m+fuPG+Zds950/8Xcxv8p3YECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQJGwIEjYEvbEV37bRveWJ2+xbrzO5hZ5U3a6fc2JDkLAhSNgQJGwIEjYECRuChA1BwoYgYUOQsCFI2BD0Ol+xTu63t91lPemJP+dtm+rJZ550/vNxYkOQsCFI2BAkbAgSNgQJG4KEDUHChiBhQ5CwIUjYEPTGveIntu2uq1voW8+zbVO9847uJ3JiQ5CwIUjYECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQdHkrPmnb7vqW6p3q1Y335F3o55zYECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQJGwIEjYELd2Kb7vvenLnPHm39q332ra3P9H+jjmxIUjYECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQJGwIelVve543uRl+4nud2LbJP7Ftt//NiQ1BwoYgYUOQsCFI2BAkbAgSNgQJG4KEDUHChiBhQ9Ab94pvuxd60q098K1t9s598s/f69brTP6+Tsy348SGIGFDkLAhSNgQJGwIEjYECRuChA1BwoYgYUOQsCHoja34iSfeUl69o3tyUz1p293jJ88z/91wYkOQsCFI2BAkbAgSNgQJG4KEDUHChiBhQ5CwIUjYEHR5K35ici/9xF3xLZN3mE/eGb7N5N8anHNiQ5CwIUjYECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQ9Atb8U+2bQv9xD35icnPdeLkve4+jxMbgoQNQcKGIGFDkLAhSNgQJGwIEjYECRuChA1BwoYgW/FHqt5Pfsvkvv3kdea39E5sCBI2BAkbgoQNQcKGIGFDkLAhSNgQJGwIEjYECRuCfmErPrkZ/mTb9tLb7hWffJ15TmwIEjYECRuChA1BwoYgYUOQsCFI2BAkbAgSNgQJG4Iub8Un98CfbNsO/MTknnzyc+38zjuxIUjYECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQJGwIej335mTg/zixIUjYECRsCBI2BAkbgoQNQcKGIGFDkLAhSNgQJGwIEjYECRuC/gCs2ayRRSfxsAAAAABJRU5ErkJggg==",
"order_status": "complete",
"esim_status": "DOWNLOADED",
"esim_create_ts": "2025-12-16 09:59:38",
"order_package_networks": "",
"supported_countries": [
{
"country_name": "BOTSWANA",
"country_code": "BW"
},
{
"country_name": "CONGO, THE DRC",
"country_code": "CD"
},
{
"country_name": "COTE D IVOIRE",
"country_code": "CI"
},
"… 14 more items"
],
"esim_status_message": "eSIM Installed but is off",
"esim_last_operation_date": "2026-01-05 17:22:41",
"data_usage_remaining_bytes": 4294967296,
"days_left_to_expiry": 6,
"data_allowance_bytes": 1073741824,
"account_name": "Voice-QA",
"ios_install_link": "https://esimsetup.apple.com/esim_qrcode_provisioning?carddata=LPA:1$test.esim.com$22191207"
}
]
}List eSIM regions
GET/buyers/esim/regions
Lists the eSIM regions the sellers define, each with its region code. Use the region name as country in Market View (eSIM). Free.
Parameters
No parameters.
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X GET \
"https://apiv2.telecomsxchange.com/buyers/esim/regions"import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.get(
"https://apiv2.telecomsxchange.com/buyers/esim/regions",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/regions");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"regions": [
{
"region": "Europe",
"region_country_code": "1E"
},
{
"region": "Asia",
"region_country_code": "1A"
},
{
"region": "Global",
"region_country_code": "2G"
}
]
}List regions covering a country
POST/buyers/esim/countries_regions
Lists the region codes whose regional packages cover a country, so you can tell which regional packages also work there. Free.
Parameters
country_codestringform fieldRequiredTwo-letter ISO country code in lower case, for example jp.
pagerintegerform fieldRequiredNumber of rows to return.
offintegerform fieldOptionalOffset of the first row.
Errors
| Message | When |
|---|---|
"missing country_code" | country_code is empty |
curl --digest -u "$TCXC_USERNAME:$TCXC_API_KEY" -X POST \
"https://apiv2.telecomsxchange.com/buyers/esim/countries_regions" \
-d country_code=jp \
-d pager=50 \
-d off=0import os
import requests
from requests.auth import HTTPDigestAuth
resp = requests.post(
"https://apiv2.telecomsxchange.com/buyers/esim/countries_regions",
auth=HTTPDigestAuth(os.environ["TCXC_USERNAME"], os.environ["TCXC_API_KEY"]),
data={"country_code": "jp", "pager": "50", "off": "0"},
)
print(resp.json())$ch = curl_init("https://apiv2.telecomsxchange.com/buyers/esim/countries_regions");
curl_setopt_array($ch, [
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
CURLOPT_USERPWD => getenv('TCXC_USERNAME') . ':' . getenv('TCXC_API_KEY'),
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(['country_code' => "jp", 'pager' => "50", 'off' => "0"]),
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);{
"status": "success",
"countries_region": [
{
"country_code": "jp",
"region_country_code": "1A"
},
{
"country_code": "jp",
"region_country_code": "2G"
}
]
}