Free · No key · No signup

The whole eSIM catalogue, as JSON

Live retail pricing, country coverage, data allowance and validity for every plan we sell. If you are building a comparison site, a travel tool or an AI agent, read it from here — it is open on purpose.

The endpoint

URLGET https://api.meisimusa.com/mm/products
AuthNone. There is no key to request.
Rate limit30 requests per minute per IP. Responses are CDN-cached for 60 seconds, so polling harder gains you nothing.
Filters?country=FR · ?region=europe · ?search=japan
CORSOpen — call it straight from a browser.
# Every plan we sell
curl 'https://api.meisimusa.com/mm/products'

# Only plans covering France
curl 'https://api.meisimusa.com/mm/products?country=FR'

# A single plan by id
curl 'https://api.meisimusa.com/mm/products/p3:2:631'

What comes back

A JSON object shaped { ok, count, products[] }. The fields worth knowing:

productIdStable identifier. Use it to fetch one plan, and as plan_id when provisioning a line through the numbers API.
retailPriceWhat a customer pays, in currencyCode (USD).
countriesISO country codes the plan covers. regions carries the regional grouping where one applies.
providerNameThe network the plan runs on.
productDetailsArray of { name, value } pairs — data allowance, validity in hours, voice and SMS terms, and network detail.

Reading productDetails

Details are a list rather than fixed keys, because different plan types carry different attributes. Pick out what you need:

const detail = (p, name) =>
  (p.productDetails || []).find(d => d.name === name)?.value;

const plans = (await (await fetch(
  'https://api.meisimusa.com/mm/products?country=JP'
)).json()).products;

for (const p of plans) {
  console.log(
    p.productId,
    '$' + p.retailPrice,
    detail(p, 'PLAN_DATA_LIMIT'),
    detail(p, 'PLAN_VALIDITY') + 'h'
  );
}

Fair use

There is no key because we would rather you had the data than scraped the storefront for it. The only ask is that you stay inside the rate limit and cache what you can — the catalogue changes on the order of hours, not seconds.

Need more? Higher limits, a change feed, or a webhook when pricing moves — tell us what you are building. It stays free; we would just like to know who is using it.

Related

Numbers API — provision a real US carrier line by API, for AI agents and automation. Authenticated, usage-billed.
Dealer API — ordering, wallet and top-ups for authorised resellers. Requires a dealer key.

Want to sell these plans, not just read them?

Dealers get their own pricing, a prepaid wallet and programmatic ordering.

Talk to us →