Developer docs
Wanderly API
Public, read-only feeds of the full Wanderly eSIM catalog — built for comparison sites, affiliates and aggregators such as esimDB, esims.io and eSIM Radar. No API key required.
Overview
Two feeds are available. Both are read-only, CORS-enabled, served over HTTPS from getwanderly.com and refreshed on every catalog sync. Prices are live retail prices — the same ones a customer sees at checkout.
| Parameter | Type | Description |
|---|---|---|
| v1 catalog feed | JSON / CSV | General-purpose feed with our native field names. Best for custom integrations and spreadsheets. |
| v2 eSIM Radar feed | JSON | Matches the eSIM Radar ingest schema exactly (plan_name, data_amount_gb, duration_days, price_usd, affiliate_link, country_iso_code, …). |
# v1 catalog feed — JSON
https://getwanderly.com/api/catalog.json
# v1 catalog feed — CSV
https://getwanderly.com/api/catalog.csv
# v2 eSIM Radar feed — JSON
https://getwanderly.com/api/v2/catalog.jsonAuthentication & limits
No authentication, no API key, no signup. Send a plain GET request. Responses include an ETag and Last-Modified; send If-None-Match to get a cheap 304 Not Modified and skip re-downloading an unchanged feed.
- Each endpoint returns the complete catalog in one response
- Refreshed daily — please poll no more than once per hour
- Use
generated_at/updated_atfor change detection - CORS:
*
Catalog feed (v1)
GET https://getwanderly.com/api/catalog.json
GET https://getwanderly.com/api/catalog.csvReturns every active plan in our native schema under products. The CSV variant carries the same columns with a header row — drop it straight into a spreadsheet or a bulk importer. Filter client-side on country_code, coverage_type or plan_kind.
{
"provider": "Wanderly",
"website": "https://getwanderly.com",
"currency": "USD",
"generated_at": "2026-08-06T20:00:00.000Z",
"count": 2231,
"products": [
{
"product_id": "PC2G2GAZG",
"sku": "AF_1_7",
"name": "Afghanistan 1GB 7Days",
"country_code": "AF",
"country_name": "Afghanistan",
"coverage": "AF",
"coverage_type": "Single",
"plan_kind": "total",
"data_type": "Data in Total",
"data_gb": 1,
"validity_days": 7,
"unlimited": false,
"network_speed": "3G",
"hotspot": true,
"kyc_required": false,
"topup_supported": true,
"topup_type": "Data Reloadable for same area within validitity",
"currency": "USD",
"price": 8.99,
"price_per_gb": 8.99,
"url": "https://getwanderly.com/destinations/afghanistan",
"buy_url": "https://getwanderly.com/destinations/afghanistan?plan=PC2G2GAZG",
"last_updated": "2026-08-06T05:00:08.213+00:00"
}
]
}eSIM Radar feed (v2)
Returns the catalog in eSIM Radar's documented schema, with live USD/EUR/GBP conversion, parsed fair-usage policy for daily plans and an activation_policy of FIRST_USAGE or INSTALL. Affiliate links carry utm_source=esimradar.
GET https://getwanderly.com/api/v2/catalog.json{
"plan_name": "Thailand 5GB - 30 Days",
"data_amount_gb": 5.0,
"duration_days": 30,
"price_usd": 12.99,
"price_eur": 11.94,
"price_gbp": 10.21,
"affiliate_link": "https://getwanderly.com/destinations/thailand?plan=TH_5_30&utm_source=esimradar",
"country_iso_code": "TH",
"is_unlimited": false,
"fair_usage_policy_gb": null,
"network_type": "4G/5G",
"activation_policy": "FIRST_USAGE",
"supports_topup": true,
"networks": []
}Note: networks is intentionally empty — our upstream supplier does not expose carrier names in the catalog, and we would rather return nothing than guess.
Field reference (v1)
| Parameter | Type | Description |
|---|---|---|
| product_id / sku | string | Stable unique plan identifiers. Use product_id as your primary key. |
| data_gb | number | Included data in GB (per day when plan_kind is daily). |
| validity_days | integer | Plan validity in days from activation. |
| plan_kind | daily | total | total = fixed bucket of data; daily = allowance per day. |
| coverage / coverage_type | string | ISO codes covered, and Single / Regional / Global. |
| unlimited | boolean | True for unlimited plans (fair-usage may apply). |
| price | number | Live retail price in currency (USD), tax exclusive. |
| price_per_gb | number | Derived price efficiency metric for ranking. |
| network_speed | string | Max network generation, e.g. 3G, 4G, 4G/5G. |
| hotspot / kyc_required | boolean | Tethering allowed; whether ID verification is required. |
| topup_supported / topup_type | boolean / string | Whether and how the eSIM can be topped up. |
| url / buy_url | string | Destination page and direct plan deep link on getwanderly.com. |
| last_updated | ISO datetime | Last time this plan's data or price changed. |
Examples
curl "https://getwanderly.com/api/catalog.json"const res = await fetch("https://getwanderly.com/api/catalog.json");
const { plans } = await res.json();
const japan = plans.filter((p) => p.country_code === "JP");
console.log(japan.length, "Japan plans");const { plans } = await (await fetch("https://getwanderly.com/api/catalog.json")).json();
const best = {};
for (const p of plans) {
const cur = best[p.country_code];
if (!cur || p.price_per_gb_usd < cur.price_per_gb_usd) best[p.country_code] = p;
}
console.log(best.TH);=IMPORTDATA("https://getwanderly.com/api/catalog.csv")curl -H 'If-None-Match: "<previous-etag>"' -i "https://getwanderly.com/api/v2/catalog.json"
# 304 Not Modified means nothing changed since your last syncChangelog & support
- v2 — eSIM Radar schema feed with multi-currency pricing and activation policy.
- v1 — Catalog feed in Wanderly's native schema, JSON and CSV.
Integration questions, higher rate limits or a custom schema? Email support@getwanderly.com and we will get you set up.