Esims

Import a BYO (tenant-supplied) physical eSIM activation code

Registers a bring-your-own (BYO) eSIM activation code as owned inventory. Provide either { smdpAddress, matchingId?, confirmationCode? } or { lpaCode } — supplying both, or neither, returns 400. An optional name sets a display label on the created eSIM (up to 15 characters).

Subject to per-owner and daily import limits, and disabled entirely unless BYO imports are enabled for this deployment (409 byo_disabled). Idempotent via idempotencyKey: replaying the same key with an identical request returns the original response; the same key with a different request returns 409 idempotency_conflict.

When rent-first billing is off (default), the import is free — 201 with the eSIM. Setting autoInstall: true additionally dispatches an install immediately after import (deviceId may only be set together with autoInstall): this returns 202 with {esim, operationId, statusUrl} when the install claim succeeds (poll GET /esims/{id}/install-status), or 201 with the eSIM plus installDispatch: {ok: false, reason} when the install could not be dispatched — the import itself still succeeds either way.

When rent-first billing is on, import additionally requires available device capacity (409 device_pool_empty) and is subject to a per-owner awaiting-payment cap (409 byo_awaiting_payment_cap). On success the eSIM is created awaiting_payment and a checkout is started: 201 with {esim, rentStatus, checkoutUrl} when the checkout URL is ready immediately, or 202 with checkoutUrl: null otherwise — poll GET /esims/{id} until it's populated. Once payment is confirmed, install is triggered automatically.

post/numbers/esims/import

Request body

smdpAddressstring

SM-DP+ activation host — bare hostname ONLY, no port/scheme/path.

matchingIdstring
confirmationCodestring
lpaCodestring

Full LPA activation code

carrierNamestring
countryCodestring
notesstring
msisdnstring

Self-reported E.164 MSISDN for this eSIM's line — an unverified label, never used for routing

namestring nullable

User-defined display label — NFC-normalized, up to 15 GRAPHEMES (not UTF-16 code units; an emoji/flag may span several). Omit/null/empty/whitespace-only leaves it unset.

idempotencyKeystring

Client-supplied key; replaying the same key+request returns the original import instead of importing again

autoInstallboolean

Rent OFF only: dispatch install-on-device immediately after a successful import. No-op when ESIM_BYO_RENT_ENABLED=true.

deviceIdstring

physedge device id to auto-install onto; requires autoInstall:true and rent OFF. Omit for a random pool device.

Example request

{
  "smdpAddress": "smdp.example.com",
  "lpaCode": "LPA:1$smdp.example.com$QR-MATCH-1",
  "msisdn": "+33612345678",
  "name": "Mom's phone",
  "deviceId": "physedge-dev-8f3a2c"
}

Response

eSIM imported — plain eSIM, an inline-resolved rent checkout, or an eSIM with a failed autoInstall dispatch

Changes