
# eSIM Compatibility Check

An eSIM (embedded SIM) is a digital SIM card built directly into a device's hardware that replaces the need for a physical plastic card. It allows users to download and change cellular network profiles over the air, making it easier to switch carriers or activate international data plans instantly. The first mobile devices with eSIM support were released in 2017 and eSIMs have gain large market share since.

## Is it still relevant to check for eSIM compatibility?

Even though most recent mobile devices support eSIMs, we strongly recommend to check the user's device for eSIM compatibility. Without a check, a user might buy travel data or a local line only to find out their device can't use it.

## Ways to check

There are 3 ways to check for eSIM compatibility:

1. [On-device check](#1-on-device-check) (native iOS and Android),
2. [device model matching against a list of devices](#2-device-model-matching-against-a-list-of-devices) (web), or
3. [asking the user](#3-asking-the-user) (all platforms).

While users usually know their device model, approaches 1 and 2 are much easier.

<Note type="info">
**Detection on web**

If you run Gigs in a web application or any other non-native integration, we recommend using regular methods to retrieve the mobile device model name and use the 2. approach.

</Note>

## 1. On-device check

This allows you to check the user’s device compatibility automatically.

### on **Android** via the Android SDK

This step requires Android 9 (API 28+).

1. Check if the Android version is 9 or higher
2. Use the [EuiccManager library](https://source.android.com/docs/core/connect/esim-euicc-api) to check eSIM compatibility on the device 

<CodeGroup title="Kotlin: Sample code to check eSIM compatibility">

```Kotlin
val manager = context.getSystemService(Context.EUICC_SERVICE) as EuiccManager
val isSupported = manager.isEnabled
```

</CodeGroup>

### on **iOS** via the iOS SDK

There is no reliable native iOS SDK support to check for eSIM compatibility. Please use the option to check for the device model.

### on **iOS** via the device model

1. Read the device model on your app
2. iPhone support eSIM as follows - this should be easy to filter out

| iPhone XS, XS Max, XR (2018) | First eSIM support — one eSIM \+ one physical nano-SIM |
| :---- | :---- |
| **iPhone 11** (2019), **SE 2nd gen** (2020) | Continued dual SIM (nano-SIM \+ eSIM) |
| **iPhone 12 series** (2020) | Continued dual SIM (nano-SIM \+ eSIM) |
| **iPhone 13 series** (2021) | First to support **two active eSIMs simultaneously** |
| **iPhone 14 series** (2022) | First **eSIM-only** iPhones — no physical SIM tray in the US |
| **iPhone 15+** | eSIM-only in the US; international models retain nano-SIM slot |

## 2. Device model matching against a list of devices

This approach works for all platforms on which you can retrieve the device model.

1. Get the user's device identifier from their OS. Depending on your integration this can be the hardware identifier (e.g. the Android `Build.MODEL` string) or the device's IMEI.
2. Look up the matching device model:
   - Call the [list all device models](https://developers.gigs.com/api/latest/core/devices#list-all-device-models) endpoint and filter by `hardwareIdentifier` (and optionally `brand` or `type`), or
   - Call the [search for device models](https://developers.gigs.com/api/latest/core/devices#search-for-device-models) endpoint with the device's `imei` for a direct lookup.
3. Check the `simTypes` array in the returned device model. The device is eSIM compatible if it includes `"eSIM"`.

<Note type="info">
You can also filter the list endpoint directly with the `simType=eSIM` query parameter to only return eSIM-capable device models.
</Note>

The device database is updated weekly. The list is sorted by creation date (most recently created first) and does not support alphabetical sorting. This means you should filter by identifier rather than relying on the ordering.

You will most likely want to add front end screens for this to confirm that your matching is correct.

## 3. Asking the user

Asking the user to check if their device is compatible with eSIMs should only be used as a fallback in case the others do not render a clear result. Ideally, you add instructions for the user to follow.

### iOS

Settings \> General \> About \> Scroll to the bottom sections.

The device is eSIM compatible if
- in the network details an EID is listed OR
- an "eSIM" is listed.

### Android

The exact path varies by manufacturer and Android version. Try one of the following:

- **Stock Android / Google Pixel:** Settings \> Network & Internet \> SIMs \> Look for an option like "Download a SIM instead?" or "Add SIM"
- **Samsung:** Settings \> Connections \> SIM manager \> See if "Add SIM" or "Add mobile plan" is available

The device is eSIM compatible if an option to download or add an eSIM is available.

### Display EID in device information

An alternative method is to ask the user to dial the following characters on their phone. This will show the device information. If an EID is listed, for instance as "EID 1", it means the phone supports eSIMs. If no EID is listed, it does not support eSIMs.

**Dial \*\#06\#**

* Open your phone's dialer.
* Type \*\#06\#
* A screen will pop up showing information. If you see "EID" listed, your device supports eSIM.

Note that this method might not work and should be considered as a fallback to the others listed above.
