> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Troubleshoot eSIM activation and purchase failures (reseller lane)

> The reseller travel-eSIM lane at Numbers → eSIM: device LPA rejects the activation QR or the profile download fails, the detail page shows 'No activation material yet', purchase dialog failures (balance, role, stock), duplicate-purchase 409s, the owner/admin/billing visibility gate, and what to capture before escalating.

# Troubleshoot eSIM activation and purchase failures (reseller lane)

Orbit runs two eSIM lanes with different failure sets. This page is the
runbook for the **reseller lane**: travel-eSIM profiles you buy in bulk at
**Numbers → eSIM** in the dashboard, assign to your own end customers, and
hand over as an SGP.22 activation QR or activation code. The failure set
here is purchase, activation, and visibility. If you operate IoT/M2M SIMs
through the API instead, your rows (order `409`, OTA queueing, quota gates)
live in the [lifecycle guide's troubleshooting table](https://docs.orbit.devotel.io/guides/connectivity-sim-lifecycle.md#10-troubleshooting),
not on this page. See the [eSIM glossary entry](https://docs.orbit.devotel.io/reference/glossary.md#esim-embedded-sim)
for the shared vocabulary, and [eSIM reseller billing model](https://docs.orbit.devotel.io/concepts/esim-reseller-billing-model.md)
for how purchases debit your Orbit balance.

## Two lanes, two failure sets

* **Reseller travel eSIM (this page).** Bought with the purchase dialog on
  **Numbers → eSIM**, billed to your Orbit balance, assigned with a customer
  reference you set, and installed by the end user scanning the QR on the
  per-SIM detail page (or entering the activation code by hand). Failures
  surface in the purchase dialog, on the detail page's install card, or as
  a device-side LPA error during activation.
* **API connectivity SIM.** Ordered and operated through the connectivity
  endpoints; its lifecycle is `ordered → active ⇄ suspended → terminated`
  and its failure table is [§10 of the lifecycle guide](https://docs.orbit.devotel.io/guides/connectivity-sim-lifecycle.md#10-troubleshooting).
  A `409 ICCID already provisioned` raised by those endpoints is diagnosed
  there; the same ICCID pattern raised by a dashboard purchase is the
  duplicate-purchase row below.

## Symptom → cause → fix

| Symptom | Cause | Fix |
| - | - | - |
| QR renders, but the device reports the activation code as invalid or the profile download fails | The failure is between the device's LPA and the upstream SM-DP+: the device does not support eSIM provisioning, its profile slot is full, or the activation code was already consumed by another install (a code installs one profile) | Read the exact LPA error text on the device. Confirm the device supports eSIM, and check the **Installation** column on the detail page: if it reads **Installed**, the code was consumed by an earlier install and cannot be reused. If the error names a code that was never installed, escalate with the capture set below. |
| Detail page shows **"No activation material yet"** instead of a QR | The upstream has not yet assigned this profile its SM-DP+ address and activation code. The page withholds the QR until both halves exist rather than showing a half-formed activation string. | Wait a few minutes after purchase and reload the page; the assignment usually lands shortly after purchase. The row is already yours and your balance was charged correctly. If it is still missing well after purchase, escalate with the ICCID and your organization id. |
| Purchase dialog: "Insufficient balance — add funds in Billing and try again." | The purchase total exceeds your available Orbit balance. | Top up in **Billing**, then retry the same package. |
| Purchase dialog: "Your role can't spend from the account balance. Ask an owner or admin." | The signed-in role is not in the purchasing allow-list. | An owner or admin completes the purchase, or is assigned one of the roles below. |
| Purchase dialog: the service answers that fewer eSIMs are available than requested (e.g. "Only 7 eSIMs available. Please select a smaller package.") | The requested quantity exceeds the stock currently available. | Lower the quantity. The dialog quotes the currently available stock before you confirm. |
| A purchase errored or timed out, but the eSIMs appear in your list afterwards (or a retry of the same purchase returns a `409` — ICCID already provisioned) | The first purchase completed even though its response never reached you; the retry collides with ICCIDs that are now provisioned. | Check the list before retrying: the **Total eSIMs** card counts what you own, and the rows are in your inventory, not lost. This is the same ICCID-already-provisioned pattern the [connectivity guide §10](https://docs.orbit.devotel.io/guides/connectivity-sim-lifecycle.md#10-troubleshooting) lists for the API lane, with the same reading: reuse the existing rows, do not re-order. |
| A teammate cannot see **Numbers → eSIM** or its purchase button at all | The whole surface is role-gated, the same allow-list as **Billing**: `owner`, `admin`, and `billing` roles. Roles outside it never see the page. | An owner or admin handles the eSIM work, or changes the teammate's role in the organization settings. Access follows role; no other entitlement turns the surface on. |
| The list says **"No eSIMs match your search or filter."** while the stat cards count eSIMs | A search term or status filter is hiding them. Note the filters reconcile status with assignment: rows your customers are using count under **Assigned** even when their raw status is `ACTIVE`, so a filter choice can look empty while the card counts them. | Clear the filters. If the page shows **"Showing the X most recent of Y eSIMs"**, search and filters only cover the loaded window; narrow by status instead of searching across the full inventory. |

## The activation string, and what the missing-QR state shows

The install card composes the SGP.22 string the device expects as
`LPA:1$<SM-DP+ address>$<activation code>` and encodes it in the QR. The
**Activation code** field below the QR carries the bare activation code for
manual entry: paste that value on the device, not the composed
`LPA:1$...` string — the composed string belongs to the QR alone and fails
in manual-entry fields.

When either half is not yet assigned, the detail page shows this panel in
place of the QR:

```text theme={null}
No activation material yet
This profile hasn't been issued an SM-DP+ address and activation code.
It usually appears shortly after purchase.
```

That panel is the expected state between your purchase and the upstream
assignment; it is not a broken purchase. The QR, the manual-entry field,
and the SM-DP+ address field all appear together once both halves exist.

### Full error sample

For a purchase failure, paste the dialog text exactly as shown, plus the
package you selected. For an activation failure, capture:

```text theme={null}
ICCID:  89...            (from the detail page header)
Org id: <your organization id>
Device: <model, OS version>
LPA error: <exact text or code the device shows>
```

## Decision checklist

1. Split the surface first: did the failure happen in the dashboard
   (purchase, visibility, list) or on the end user's device (activation)?
2. Purchase failure: read the dialog text. Balance → top up and retry.
   Role → owner/admin/billing completes it. Stock → lower the quantity.
   Anything else (timeout, generic error) → check the list before
   retrying; the purchase may already have landed.
3. Activation failure: open the SIM's detail page. No QR → wait for the
   upstream assignment and reload. QR present → the failure is between the
   device and the SM-DP+: confirm eSIM support on the device and that the
   code was not already installed elsewhere.
4. Visibility or list oddity: check the status filter and search term, the
   loaded-window notice, and the viewer's role against the allow-list.

## Fixes NOT to try

* Do not hand-build an `LPA:1$...` string and paste it into the device's
  manual-entry field; manual entry takes the bare activation code, and the
  composed string fails there.
* Do not re-click **Purchase** after a timeout or unknown error without
  checking the list first; the charge may already have landed and a blind
  retry is the duplicate-purchase `409` above.
* Do not order through the API connectivity lane to work around a reseller
  purchase failure; the two lanes have separate billing models and
  lifecycles, and a connectivity order will not appear in your reseller
  inventory. See [Connectivity SIM model](https://docs.orbit.devotel.io/concepts/connectivity-sim-model.md).
* Do not treat "No activation material yet" as a failed purchase and
  re-buy; the original row is in your inventory and its activation
  material follows the upstream assignment.

## What Orbit does not control

* The profile download itself runs between the end user's device LPA and
  the upstream SM-DP+. A valid, unconsumed activation code that the device
  still rejects is an upstream or device-side failure; Orbit can confirm
  the assignment state, not retry the download on the device's behalf.
* Device capability: the end user's device must support eSIM
  provisioning. A device without an LPA cannot install any profile,
  regardless of the purchase state.
* Assignment timing: the SM-DP+ address and activation code are issued by
  the upstream after purchase, and Orbit surfaces them once both are
  present. A short window without activation material is normal.

## When to escalate

Open a ticket when the checklist ends in an upstream or device-side
failure, when activation material is still missing well after purchase,
or when a purchase error gave no dialog text to match on. Include the
ICCID, your organization id, the device model and OS version, the exact
LPA error text, and which rows of the checklist you walked. For balance
and billing questions behind a failed purchase, see
[Billing and account gates](https://docs.orbit.devotel.io/reference/troubleshooting-hub.md) in the hub.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.