> ## Documentation Index
> Fetch the complete documentation index at: https://developers.mioesim.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SKUs and packages: the MIOeSIM catalog

> Understand how SKUs (coverage areas) and packages (data plans) are structured in the MIOeSIM catalog, and which fields matter when building and placing orders.

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

| Field         | Type    | Description                                                            |
| ------------- | ------- | ---------------------------------------------------------------------- |
| `skuid`       | Integer | Unique identifier for the SKU.                                         |
| `display`     | String  | Human-readable name, e.g. `"Japan"`, `"Africa"`, `"Asia 8 countries"`. |
| `countryCode` | String  | ISO 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

| Field               | Type    | Description                                                                                                                                      |
| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `priceid`           | Integer | Unique plan identifier. Pass this when placing an order.                                                                                         |
| `flows`             | Integer | Data amount (paired with `unit`).                                                                                                                |
| `unit`              | String  | Data unit: `GB` or `MB`.                                                                                                                         |
| `days`              | Integer | Plan validity in days from activation.                                                                                                           |
| `price`             | Double  | Cost of the plan.                                                                                                                                |
| `flowType`          | Integer | `0` = renewable plan, `1` = non-renewable plan.                                                                                                  |
| `supportDaypass`    | Integer | DayPass behavior. See [DayPass packages](#daypass-packages).                                                                                     |
| `minDay` / `maxDay` | Integer | Valid range of days for DayPass orders.                                                                                                          |
| `mustDate`          | Integer | `1` = a start date is required when placing the order.                                                                                           |
| `expireDays`        | Integer | `0` = plan activates immediately on SIM activation; non-zero = plan expires N days after the SIM is activated regardless of whether it was used. |
| `apiCode`           | String  | Unique string identifier for the package, e.g. `"40-0-3-1-G"`. Used for direct ordering.                                                         |
| `networkDtoList`    | Array   | Supported network operators and types (3G, LTE, 5G).                                                                                             |
| `premark`           | String  | Free-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](#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:

| Value | Meaning                                                                                     |
| ----- | ------------------------------------------------------------------------------------------- |
| `0`   | Regular plan — the `days` field is fixed.                                                   |
| `1`   | DayPass — you specify the number of days when ordering, within the `minDay`–`maxDay` range. |
| `2`   | Enumerated — 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:

| Value | Meaning                                                                                                   |
| ----- | --------------------------------------------------------------------------------------------------------- |
| `0`   | **Renewable** — the customer can purchase a follow-on plan for the same eSIM after the current plan ends. |
| `1`   | **Non-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.

<AccordionGroup>
  <Accordion title="Understanding the premark field">
    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.
  </Accordion>
</AccordionGroup>
