Plan feed

Version 2026-10-28, effective 28 October 2026

For price-comparison sites listing Simvito travel eSIMs: every plan we sell, with its price in each checkout currency, in the eSIMDB Provider API DataPlan format.

1. Quick start

  1. In your partner dashboard, open API keys and create a key. It is shown once; keep it on your server.
  2. Pull the feed. Replace YOUR_KEY with your key:
curl --compressed -H "x-api-key: YOUR_KEY" https://api.simvito.com/feeds/v1/plans -o plans.json
  1. Show each record with its link as it is. The link opens checkout on simvito.com with that plan selected and carries your code (via=yourcode); an order from it is credited to you.
  2. Optional: add &subid= with your own ID for the page or placement (letters, digits, . _ -, up to 64; nothing about the visitor). It comes back on the order as sub_id, next to variant_id (the link’s v=).

2. Authentication

  • Send your key in the x-api-key header, as in the eSIMDB Provider API. Authorization: Bearer svp_… is accepted too.
  • Each site has its own keys. The dashboard shows when each key was last used, and a key can be revoked on its own. A revoked key stops working within 5 minutes.
  • If our key service is briefly unreachable, keys keep working on their last check for up to 24 hours, so the feed stays up; a key revoked during such an outage can work until it ends.
  • The same key reads your orders through the orders API.
GET https://api.simvito.com/feeds/v1/plans
x-api-key: svp_your_key

3. Response

  • A JSON array, one record per plan and validity period, in the eSIMDB Provider API DataPlan format plus two extension fields. A reader built for that format needs no new parser.
  • About 33,500 records: about 55 MB with every currency, about 46 MB with USD only, under 5 MB with Accept-Encoding: gzip.
  • The response has no customer data: only the catalog, prices and your own purchase links.
  • Every response, errors included, carries x-request-id. Quote it when you write to us about a request.

A real record (a daily plan with the full fair-use fields), with your code in the link:

{
  "planName": "Japan 3GB/day for 7 Days (5G, 128 Kbps after cap)",
  "validity": 7,
  "dataCap": 3,
  "dataUnit": "GB",
  "prices": {
    "USD": 7.95,
    "EUR": 7.27,
    "GBP": 6.08,
    "HKD": 62.38,
    "CNY": 54.07,
    "SGD": 10.39,
    "JPY": 1280,
    "AUD": 11.53,
    "NZD": 14.22,
    "CAD": 11.37,
    "BRL": 43.36,
    "IDR": 147086,
    "MYR": 33.16,
    "PHP": 518.93,
    "THB": 273.84,
    "KRW": 10767,
    "PLN": 32.01,
    "CHF": 6.72,
    "SEK": 80.58,
    "TWD": 264
  },
  "coverages": [
    {
      "code": "JP",
      "networks": [
        {
          "name": "KDDI",
          "types": ["4G", "5G"]
        },
        {
          "name": "SoftBank",
          "types": ["4G", "5G"]
        }
      ]
    }
  ],
  "subscription": false,
  "promoEnabled": false,
  "telephony": null,
  "hasAds": false,
  "payAsYouGo": false,
  "newUserOnly": false,
  "link": "https://simvito.com/checkout/?s=japan&v=variant_01M2S8RTA4JXWNBMT0CNKZVS7G&d=7&via=yourcode&utm_source=yourcode&utm_medium=referral",
  "dataCapPer": "day",
  "reducedSpeed": 128,
  "capacityInfo": "Unlimited data at 128 Kbps after 3GB of high-speed data per day is used up.\nThe daily high-speed allowance resets at 00:00 (UTC+8).",
  "validityInfo": "Each day of validity is a full 24-hour period from the start of plan validity.\nActivate within 90 days of purchase.",
  "additionalInfo": "Validity starts when the eSIM first connects to a network at the destination.\nOn Android phones, TikTok doesn't work on this plan.",
  "canTopUp": false,
  "internetBreakouts": [
    { "country": "HK" },
    { "country": "SG" }
  ],
  "dailyReset": {
    "type": "calendar",
    "time": "00:00",
    "timezone": "UTC+8"
  }
}

4. Fields

A field that doesn’t apply is omitted, as in the eSIMDB format. Unknown values are never filled with a guess.

FieldType and unitMeaningOmitted or null
planNamestring, ≤ 100Destination, allowance and validity, e.g. Japan 1GB/day for 7 Days. Unique in the feed; when two plans would read the same, a short qualifier is added ((5G), (512 Kbps after cap), (stops at cap), (app-restricted)). An unlimited plan capped from the start always carries the cap (Thailand Unlimited for 7 Days (max 10 Mbps)). A multi-country plan names its region with the number of destinations (Europe (35 destinations)) or lists the countries, shortened when they don’t fit (China mainland and 2 more destinations); coverages always lists every country.Always present.
validityinteger, daysEach validity period is its own record with its own price.Always present.
dataCap, dataUnitinteger; MB or GBHigh-speed allowance. Whole gigabytes in GB, anything else in MB (1.5 GB = 1536 MB). 0 = unlimited with no high-speed cap (see maxSpeed).Always present.
dataCapPer"day"The allowance renews every day (see dailyReset).Omitted: the allowance is for the whole validity.
reducedSpeedinteger, kbpsSpeed after the allowance is used up; data continues at this speed.Omitted, with no exhaustionBehavior: data stops when the allowance is used up.
exhaustionBehavior"unknown"Extension. The supplier hasn’t said whether data stops or continues slowly after the allowance. Don’t read the missing reducedSpeed as “stops”.Omitted: the after-cap behaviour is known (see reducedSpeed).
maxSpeedinteger, kbpsSpeed cap from the start, e.g. unlimited at 10 Mbps.Omitted: no cap from the start.
capacityInfostringThe fair-use policy in words, with the reset rule where known, e.g. Unlimited data at up to 10 Mbps.Omitted: nothing known to say.
validityInfostringHow days are counted (calendar days in a stated time zone, or 24-hour periods) and the activation deadline.Omitted: not stated.
additionalInfostringWhen validity starts and apps that don't work on the plan, one item per line.Omitted: nothing to add.
pricesobject, currency → numberThe final card price in each currency. See Prices.Always present; USD always included.
coveragesarray of { code, networks? }Countries (ISO 3166-1 alpha-2). networks lists the operators we can confirm there, with their network types (2G–5G, LTE).networks omitted: we haven’t confirmed the operator, not that there is none.
internetBreakoutsarray of { country }Where the data exits to the internet (ISO2): the IP country websites see.Omitted: the supplier doesn't give it.
dailyResetobject or nullExtension, daily plans only. See Extension fields.null: the supplier hasn’t said how the daily allowance renews. Omitted on plans that aren’t daily.
canTopUpbooleantrue: more data or days can be bought for the same eSIM on simvito.com.Omitted: not stated.
eKYCbooleanIdentity verification is required.Omitted: not stated.
tetheringbooleantrue: hotspot / tethering allowed.Omitted: the supplier hasn't said.
telephonynullData-only eSIMs: no phone number, no calls.Always null.
subscription, payAsYouGo, newUserOnly, hasAdsbooleanOne-off purchases, open to everyone, no ads.Always false.
promoEnabledbooleanAlways false: comparison sites have no discount code, and a link never changes the price.Always present.
linkURLPurchase link for this exact plan and validity, with your referral. Use it as it is; you may add &subid=<your id>.Always present.

5. Extension fields

Two fields are additions to the eSIMDB DataPlan format; everything else keeps that format’s names, types and omission rules. A reader that ignores the two still reads every record; it only loses the difference between “stops at cap” and “not stated”, and the reset time, which capacityInfo also gives in words.

  • exhaustionBehavior: "unknown" when it isn’t confirmed yet what happens after the allowance. capacityInfo says the same in words.
  • dailyReset: when a daily allowance renews. Present on every daily plan (dataCapPer: "day").
dailyResetMeaning
{ "type": "calendar", "time": "00:00", "timezone": "UTC+8" }Renews at a fixed time of day in that time zone. time can be a window such as "23:00-24:00".
{ "type": "calendar", "time": null, "timezone": "UTC+8" }Renews on calendar days in that time zone; the exact time isn't given. Either member can be null when not given.
{ "type": "rolling", "time": null, "timezone": null }Renews every 24 hours from when the plan's validity started.
nullThe supplier hasn't said how the daily allowance renews.

The rest of the fair-use policy uses the standard fields: daily high-speed data is dataCap + dataUnit with dataCapPer: "day", the speed after the daily cap is reducedSpeed, and a speed cap from the start is maxSpeed.

6. Prices

  • prices has one entry per currency a buyer can pay in by card at checkout (currently 20: USD, EUR, GBP, HKD, CNY, SGD, JPY, AUD, NZD, CAD, BRL, IDR, MYR, PHP, THB, KRW, PLN, CHF, SEK, TWD), unless your account receives USD only.
  • Each amount is the final amount charged for a card payment in that currency, after rounding, with no fees added later. It matches the checkout page. Other payment methods cost the same or less.
  • Prices are the same for every partner and for visitors who come to simvito.com directly.
  • JPY, KRW, IDR and TWD are whole numbers.

7. Caching and exchange rates

  • Every 200 carries an ETag. Send it back as If-None-Match (the weak form W/"…" works too) and you get 304 Not Modified with no body until the catalog, a price or an exchange rate changes.
  • Right after a change, two requests a few seconds apart can for up to a minute alternate between the new and the previous version, each with its own ETag; the newer one wins on your next pull.
  • Non-USD prices use our checkout exchange rates, which update once a day, so they can change while the USD price doesn’t. X-Rates-As-Of says which day’s rates the prices use; X-Currencies lists the currencies in prices.
ETAG=$(grep -i '^etag:' headers.txt | cut -d' ' -f2- | tr -d '\r')
curl -sS --compressed -H "x-api-key: YOUR_KEY" -H "If-None-Match: $ETAG" -D headers.txt -o plans.json https://api.simvito.com/feeds/v1/plans

8. Rate limits

  • Once an hour is right, with If-None-Match: you pick up new rates the same day. Don’t pull more than once a minute.
  • Each IP address can make about 30 requests a minute; above that you get 429 with Retry-After in seconds.

9. Errors

Errors are JSON: { "error": { "code": "…", "message": "…" } }. Your dashboard’s Integration status page lists your recent errors with their request IDs.

HTTPcodeMeaningWhat to do
401missing_keyNo key in the request.Send x-api-key.
401invalid_keyThe key isn't one of ours.Copy it again, or create a new key.
401revokedThe key was revoked.Create a new key.
403no_scopeThe key can't read the feed.Create a new key under API keys.
403forbiddenYour partner account isn't active.Write to partners@simvito.com.
429rate_limitedToo many requests from your IP address.Wait Retry-After seconds.
503catalog_unavailableWe refused to publish an incomplete catalog (we never serve a partial list), usually while it updates.Retry after Retry-After seconds; keep your last copy.
503auth_unavailableWe can't check your key right now.Retry after Retry-After seconds.
503format_unavailableThe feed format set for your account isn't available yet.Write to partners@simvito.com.
503terms_conflictYour account's settings need a check on our side.Write to partners@simvito.com.
500internal_errorSomething went wrong on our side.Retry later; if it keeps happening, send us the x-request-id.

11. Orders from your links

  • A visit through a record’s link is recorded on our server; an order within 30 days is credited to the latest valid referral. The full rules: Attribution rules.
  • Your orders and commission are in the dashboard under Orders, and in the orders API.

12. Versioning and changes

The version is in the path (/feeds/v1). Changes are listed here with their date.

DateChange
2026-10-28First version: a key per site in x-api-key, every checkout currency in prices, X-Rates-As-Of and X-Currencies, the exhaustionBehavior and dailyReset extensions.
2026-10-28Wording: an unlimited plan capped from the start carries the cap in planName and gets a capacityInfo; multi-country names read (N destinations) or list the countries; the app-restriction and unconfirmed after-cap sentences were rewritten. New, optional: /feeds/v1/destination-links. Every ETag changed with it.

13. Questions

Email partners@simvito.com with your partner account’s email address and, for a request, its x-request-id. Never send your API key.

Plan feed reference · Simvito Partners