A profile is what you actually sold. This page covers the install payload — which is the part your customer touches — and is honest about how current the usage counters are. Note where these objects come from: an order's esims[] carries the complete profile, so ordinarily you never call the endpoints here to deliver something. They are for reading a profile back afterwards.
The install payload
Every provisioned profile carries an activation object with four routes onto a handset. Give your customer at least two of them: QR codes fail on a phone that is the only screen available, and manual entry fails when someone mistypes a matching id.
Field
What it is
Use it when
qr_code_data_url
A base64 PNG, ready to put in an <img src>. Scannable at the same size and quiet zone the consumer app uses.
The customer has a second screen, or you are printing it into an email or a voucher.
apple_universal_link
A one-tap install link on iOS. A pure transform of the activation code, so it is null exactly when that is.
The customer is reading this on the iPhone that will hold the eSIM. It is the highest-conversion route by a distance.
activation_code
The LPA string: LPA:1$<smdp>$<matching id>. Android can accept it directly on most devices.
A copy-and-paste flow, or your own QR rendering.
smdp_address
The SM-DP+ host and the matching id, as separate fields.
The manual entry screen, which is the fallback that always works and the one your support team will walk people through.
Usage counters, and how stale they are
data_used_bytes and data_total_bytes are JSON numbers on this API. On the consumer API the same counters are strings. If you have integrated both, they are not the same type.
voice_total_min is null on a data-only plan, which is most of the catalogue.
Profile states
Status
Means
pending
Ordered, not yet issued by the supplier.
provisioned
Issued and installable. This is the state a fresh order lands in.
installed
The profile has been downloaded onto a device.
active
In use, and consuming the bundle.
suspended
Halted.
expired
Past its validity window.
depleted
The bundle is used up.
cancelled
Voided.
Addressing a profile
By ICCID, not by an internal id — because the ICCID is what your own support process already has: it is printed on the customer’s screen and it is what they will quote at you. Scope is your account and the mode of the key you send, so a live key cannot read a sandbox profile.
Sandbox profiles are recognisable on sight
ICCID 89999... 19 digits, Luhn-valid, ITU-reserved private-network range
SM-DP+ sandbox.simway.pro a host we own that can issue nothing
Matching id SB-... the tell in a support ticket
A sandbox activation code pasted into a real handset fails at DNS rather than reaching somebody else’s SM-DP+. More on the sandbox.
Opaque. Pass back next_cursor from the previous page, or omit it to start again. A malformed cursor is a 400 naming cursor, never a silent first page.≤ 512 characters
Addressed by ICCID rather than by an internal id, because the ICCID is what your own support process already has: it is on your customer’s screen.
The install payload is complete — an SM-DP+ address and matching id for manual entry, a full LPA: activation code, a scannable QR as a data URL, and an Apple universal link that installs the profile in one tap on iOS.