Skip to main content
The MIOeSIM catalog is organized into two layers: SKUs define what coverage area a product covers (a country, a region, or a multi-country bundle), and packages define the specific data plan you can order within that coverage area — the amount of data, validity period, price, and renewal behavior. To place an order, you need both a SKU and a package identifier.

SKUs

A SKU represents a single coverage area. It can be a single country (e.g. Japan), a named group of countries (e.g. Asia 8 countries), or a continent-level region (e.g. Africa). SKUs are the top-level grouping for the catalog — you browse SKUs first, then look up the packages available within each SKU.

SKU fields

FieldTypeDescription
skuidIntegerUnique identifier for the SKU.
displayStringHuman-readable name, e.g. "Japan", "Africa", "Asia 8 countries".
countryCodeStringISO country or region code associated with the SKU.

Retrieving SKUs

Use one of the following endpoints depending on how you want to display the catalog:
  • GET /api_esim/getSkus — returns a flat list of all SKUs.
  • GET /api_esim/getSkuByGroup — returns SKUs grouped by continent: Asia, Europe, Africa, Latin America, North America, Oceania, and Common.
For physical SIM cards, SKUs are tied to a distribution partner (DP). Retrieve them using:
GET /api_esim/getDpSupportSkuInfo?dpId=<your-dp-id>
Pass the dpId assigned to your distribution partner account. The response lists only the SKUs that partner supports.

Packages (plans)

A package is a purchasable data plan within a SKU. It defines the data allowance, validity period, price, and behavior rules that govern the plan. When you place an order, you reference a specific package by its priceid or apiCode.

Package fields

FieldTypeDescription
priceidIntegerUnique plan identifier. Pass this when placing an order.
flowsIntegerData amount (paired with unit).
unitStringData unit: GB or MB.
daysIntegerPlan validity in days from activation.
priceDoubleCost of the plan.
flowTypeInteger0 = renewable plan, 1 = non-renewable plan.
supportDaypassIntegerDayPass behavior. See DayPass packages.
minDay / maxDayIntegerValid range of days for DayPass orders.
mustDateInteger1 = a start date is required when placing the order.
expireDaysInteger0 = plan activates immediately on SIM activation; non-zero = plan expires N days after the SIM is activated regardless of whether it was used.
apiCodeStringUnique string identifier for the package, e.g. "40-0-3-1-G". Used for direct ordering.
networkDtoListArraySupported network operators and types (3G, LTE, 5G).
premarkStringFree-text plan description including APN, activation policy, and cancellation policy.

Key fields explained

priceid vs apiCode — Both identify a package, but they are used differently. Use priceid when building a standard order flow from catalog results. Use apiCode when you need a stable, human-readable identifier for a package that you can hardcode or store externally without relying on integer IDs. See API code below. mustDate — When this is 1, include a startDate parameter in your order request. The plan activates on that date rather than at the time of purchase. expireDays — A non-zero value means the plan has a hard expiry window. For example, if expireDays is 30, the plan expires 30 days after the eSIM is first activated, even if the data is unused.

DayPass packages

A DayPass package lets you order a flexible number of days rather than a fixed plan. The supportDaypass field controls this behavior:
ValueMeaning
0Regular plan — the days field is fixed.
1DayPass — you specify the number of days when ordering, within the minDaymaxDay range.
2Enumerated — specific day counts are available rather than an open range.
When ordering a DayPass package (supportDaypass=1), include a days parameter in your order request set to the number of days you want, between minDay and maxDay inclusive. The plan’s total data and price are calculated proportionally.
POST /api_esim/addEsimOrder
{
  "priceid": 12345,
  "days": 7,
  ...
}

API code

The apiCode field is a string identifier for a package, for example "40-0-3-1-G". It is unique across the catalog and stable over time. Use apiCode when you want to order a specific package directly without first browsing the catalog. Pass apiCode instead of priceid in your order request. This is useful when you have pre-negotiated specific plans with MIOeSIM and want to reference them by a known identifier in your integration.

Renewability

The flowType field tells you whether a plan can be renewed after it expires:
ValueMeaning
0Renewable — the customer can purchase a follow-on plan for the same eSIM after the current plan ends.
1Non-renewable — the plan cannot be extended. A new eSIM must be ordered for continued use.
When building a renewal flow, check flowType before presenting a renewal option to your customers. Attempting to renew a non-renewable plan will return an error.
The premark field is a free-text string returned on each package. It contains the plan’s operational details as provided by the carrier, including:
  • APN — the access point name the user must configure on their device, if required.
  • Activation policy — conditions under which the plan activates (e.g. activates on first data use, activates on a specified date).
  • Cancellation policy — whether the plan is refundable and under what conditions.
Parse or display premark content to your customers before purchase, particularly the APN setting, since some carriers require manual APN configuration for the plan to work correctly.