Live v1.0.3 eSIMDB & Comparison Portals Compliant

Esoim Data Plans & Partner API

Welcome to the official Esoim Public Partner API. This programmatic catalog feed provides automated, sub-millisecond access to our complete global inventory of prepaid travel eSIM packages across 200+ countries and regional bundles.

Coverage
200+
Global destinations
Active Plans
1,300+
Prepaid eSIM packages
Base Currency
EUR (€)
Exact Stripe checkout price

Comparison Portals & eSIMDB Standards

Our data plan feeds strictly comply with the official eSIMDB Provider Data Plans Specification (OpenAPI 3.0.3) and top telecom aggregator standards:

Direct Root JSON Array

Returns a clean root JSON Array [ {...} ] of individual product plans, enabling immediate automated validation and parsing.

Accurate Native Currency

Prices reflect true customer checkout charges in our native currency (EUR). Market conversions are cleanly handled on the comparison portal side.

Integer Data Capacity

Sub-1GB or fractional plans use precise MB integers, while multi-gigabyte plans use exact GB integers to eliminate precision loss.

ISO 3166-1 Alpha-2 Codes

Every plan lists its exact 2-letter uppercase country codes (e.g. ["DE", "FR", "ES"]), allowing 100% accurate search matching.

Access & Performance Headers

Our catalog feeds are public, read-only, and highly optimized. No API keys or authorization headers are required to fetch real-time packages.

Base URL https://esoim.com
Content-Type application/json; charset=utf-8
HTTP Caching Responses are accelerated via in-memory server cache (30-min window) with X-Cache: HIT / MISS headers. Average response time: < 15 ms.
Cache Bypass To force a live database re-sync, append ?nocache=1 to the request.

Partner Attribution & 30-Day Tracking

To automatically attach your partner referral tracking code to every product checkout link in the feed, pass ?ref=YOUR_CODE to the API endpoint:

GET https://esoim.com/esimdb/data-plans?ref=YOUR_PARTNER_CODE
30-Day First-Party Attribution Window
When a customer lands on esoim.com through an eSIMDB or partner link, a first-party cookie (esoim_ref=YOUR_CODE) is stored with a 30-day (2,592,000s) lifetime. Any purchase made within 30 days is credited to your partner account.
GET /esimdb/data-plans

Returns the complete active catalog of international travel eSIM packages according to OpenAPI 3.0.3 standards.

Endpoint URLs
Standard Comparison Feed:
GET https://esoim.com/esimdb/data-plans
Pre-tagged with Partner Referral Code:
GET https://esoim.com/esimdb/data-plans?ref=esimdb
Query Parameters
Parameter Type Requirement Description
ref string Optional Partner referral code (e.g. esimdb). Appended automatically to all product purchase links.
nocache boolean Optional Set ?nocache=1 to bypass the server cache and return immediate live catalog.
format string Optional official (default: flat JSON array) or wrapped (legacy object {"dataPlans": [...]}).
Live Response Sample (HTTP 200 OK)
[
  {
    "planName": "Germany eSIM 5 GB (30 Days)",
    "validity": 30,
    "dataCap": 5,
    "dataUnit": "GB",
    "dataCapPer": null,
    "reducedSpeed": null,
    "prices": {
      "EUR": 4.99
    },
    "coverages": [
      "DE"
    ],
    "link": "https://esoim.com/esim/germany?plan=101&ref=esimdb",
    "telephony": null,
    "subscription": false,
    "tethering": true,
    "eKYC": false,
    "canTopUp": true,
    "promoEnabled": true,
    "additionalInfo": "Instant email delivery with QR code.\nHigh-speed 4G/5G mobile data.\nNo physical SIM card swap required."
  },
  {
    "planName": "Japan eSIM 2 GB (1 Days)",
    "validity": 1,
    "dataCap": 2,
    "dataUnit": "GB",
    "dataCapPer": null,
    "reducedSpeed": 512,
    "prices": {
      "EUR": 2.99
    },
    "coverages": [
      "JP"
    ],
    "link": "https://esoim.com/esim/japan?plan=1243&ref=esimdb",
    "telephony": null,
    "subscription": false,
    "tethering": true,
    "eKYC": false,
    "canTopUp": false,
    "promoEnabled": true,
    "additionalInfo": "Instant email delivery with QR code.\nHigh-speed 4G/5G mobile data.\nNo physical SIM card swap required."
  }
]

Data Plan Schema Specification

Definition of each field provided within the product item objects:

Field Type Requirement Description & Constraints
planName string Recommended Marketing title of the plan (max 100 characters). E.g. "France eSIM 3 GB (15 Days)".
validity integer Required Plan duration in days. Set to 0 for plans with no expiration.
dataCap integer Required Total data allowance. For whole GB plans, integer value in GB (e.g. 5). For sub-1GB plans, integer in MB.
dataUnit string Required Unit of measurement: "MB", "GB", or "TB".
dataCapPer string | null Optional Reset period for recurring allowance (e.g. "day"). Set to null for total fixed allowance plans.
reducedSpeed integer | null Optional Throttled connection speed in kbps (e.g. 512 for 512 Kbps, 1000 for 1 Mbps) applied after exhausting high-speed dataCap. Set to null if data connection cuts off entirely.
prices object Required Customer checkout price keyed by 3-letter ISO 4217 currency code. E.g. {"EUR": 4.99}.
coverages array<string> Required List of supported 2-letter ISO 3166-1 alpha-2 country codes. E.g. ["DE", "FR"].
link string Recommended Direct purchase URL with plan selection (?plan=ID) and affiliate tracking attached.
telephony object | null Optional Voice & SMS capabilities. Set to null for pure data-only eSIMs.
subscription boolean Optional false for prepaid single-purchase plans.
tethering boolean Optional true when mobile hotspot / tethering is allowed.
eKYC boolean Optional false when passport scan or identity verification is not required.
canTopUp boolean Optional true if customers can recharge extra data on the same eSIM profile.

Integration Code Examples

# Fetch live eSIM catalog
curl -X GET "https://esoim.com/esimdb/data-plans?ref=YOUR_PARTNER_CODE" \
     -H "Accept: application/json"
import requests

url = "https://esoim.com/esimdb/data-plans?ref=YOUR_PARTNER_CODE"
response = requests.get(url, headers={"Accept": "application/json"})
plans = response.json()

print(f"Total available plans: {len(plans)}")
for plan in plans[:5]:
    print(f"- {plan['planName']}: €{plan['prices']['EUR']} ({len(plan['coverages'])} countries)")
async function getEsimPlans() {
  const response = await fetch('https://esoim.com/esimdb/data-plans?ref=YOUR_PARTNER_CODE');
  const plans = await response.json();

  console.log(`Fetched ${plans.length} plans successfully`);
  console.log('Sample plan:', plans[0]);
}

getEsimPlans();
<?php
$json = file_get_contents('https://esoim.com/esimdb/data-plans?ref=YOUR_PARTNER_CODE');
$plans = json_decode($json, true);

echo "Total plans: " . count($plans) . "\n";
echo "First plan: " . $plans[0]['planName'] . " - €" . $plans[0]['prices']['EUR'] . "\n";
?>
GET /google-merchant.xml

Standard XML RSS 2.0 product catalog feed for Google Merchant Center and Google Shopping integration.

https://esoim.com/google-merchant.xml