Skip to content

eSIMBench API

A free public JSON API for the live travel-eSIM benchmark. Grab a key in one click, hit any endpoint, 500 requests/hour. No payment, no premium tier — if you need more, message @aliakbaraffinco on Telegram. Please link back to esimbench.com when you publish scores.

1. Getting started

Grab a key (no email, no verification — one HTTP request):

curl "https://esimbench.com/api/v1/keys/new?name=YourApp"

Use it as a Bearer token on every other endpoint:

curl -H "Authorization: Bearer esb_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
  "https://esimbench.com/api/v1/score/airalo"

2. Authentication

Send your key in the Authorization header as Bearer <key>. Never put it in a query string. Missing/invalid key → 401. Lost the key? Just generate a new one.

3. Rate limits

500 requests / hour per key. Every response includes:

X-RateLimit-Limit: 500
X-RateLimit-Remaining: 342
X-RateLimit-Reset: 1717200000   (epoch seconds when the bucket rolls over)

Over the limit → 429 with a friendly reset message. Buckets are hourly (KV-backed) so you reset on the hour mark, not 60 min after first call.

4. Endpoints

GET /api/v1/keys/new?name=YourApp

No auth. Returns a new key. name is optional (label only; no PII).

{
  "key": "esb_live_…",
  "name": "YourApp",
  "created_at": "2026-06-01",
  "rate_limit": "500 requests / hour",
  "docs": "https://esimbench.pages.dev/api/docs",
  "source": "esimbench.com"
}

GET /api/v1/leaderboard

The live leaderboard — every active provider, ranked. Edge-cached 1h.

{
  "quarter": "live",
  "updated_at": "2026-06-01T…",
  "source": "esimbench.com",
  "providers": [
    { "rank": 1, "provider": "yesim", "score": 77.8, "grade": "B+", "rank_change": null },
    …
  ]
}

GET /api/v1/score/{provider}

Full scorecard data for one provider — bench score, grade, rank, all 8 dimensions.

curl -H "Authorization: Bearer esb_live_…" \
  "https://esimbench.com/api/v1/score/yesim"
{
  "provider": "yesim",
  "bench_score": 77.8,
  "grade": "B+",
  "rank": 1,
  "rank_change": null,
  "dimensions": {
    "app_quality":       { "score": 79.6, "weight": 0.10, "confidence": "high" },
    "fair_use_refunds":  { "score": 90,   "weight": 0.10 },
    "hotspot_tethering": { "score": 50,   "weight": 0.05 }
  },
  "pending_dimensions": ["speed_coverage", "pricing_value", "plan_flexibility", "customer_support", "five_g_access"],
  "quarter": "live",
  "updated_at": "2026-06-01T…",
  "source": "esimbench.com",
  "scorecard_url": "https://esimbench.pages.dev/provider/yesim"
}

Pending dimensions are listed honestly — they're excluded from the weighted bench (never counted as zero). When a provider doesn't have enough verified dimensions to grade fairly, grade is "NR" (Not Rated).

GET /api/v1/score/{provider}/dimension/{dimension}

One dimension detail — score, weight, confidence, raw_value.

Dimensions: speed_coverage, pricing_value, plan_flexibility, app_quality, customer_support, hotspot_tethering, five_g_access, fair_use_refunds.

GET /api/v1/use-case/{slug}

The ranked list of providers for a use case (video-calls, digital-nomads, …) with re-weighted scores.

5. Embed badges

A 3-line iframe drops a live scorecard on any page. No API key required, edge-cached.

<iframe src="https://esimbench.com/embed/badge/airalo"
        width="340" height="120" frameborder="0" loading="lazy"
        title="Airalo eSIM scorecard — eSIMBench"></iframe>

Query params: ?theme=light|dark, ?show=grade|score|both, ?highlight=<dimension_id>. Or use the visual builder if you'd rather click around.

6. Attribution

Please credit eSIMBench when you publish scores. Embed badges link back automatically; for API responses, surface the scorecard_url field as a clickable link. It's how this project stays free.

7. Contact

API questions, higher limits, partnerships → Telegram @aliakbaraffinco.