Get an eSIM order
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/esims/orders/{orderId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/esims/orders/{orderId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/esims/orders/{orderId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "01K2Z3AB4S5T6V7W8XYZABCDEF",
"kind": "purchase",
"status": "completed",
"package": {
"id": "01K2Z3AB4C5D6E7F8GHJKMNPQR",
"code": "PKG-US-5GB",
"name": "United States 5GB"
},
"quantity": 1,
"customerId": null,
"price": {
"amount": "999",
"currency": "USD",
"display": "9.99"
},
"paid": {
"amount": "1568430",
"currency": "NGN",
"display": "15,684.30"
},
"fee": {
"amount": "0",
"currency": "NGN",
"display": "0.00"
},
"refunded": {
"amount": "0",
"currency": "NGN",
"display": "0.00"
},
"rate": "1570.000000000000",
"externalReference": "esim_20260829_001",
"failureReason": null,
"profileIds": [
"01K2Z3AB4R5S6T7V8WXYZABCDE"
],
"completedAt": "2026-08-29T10:30:12.000Z",
"createdAt": "2026-08-29T10:30:00.000Z",
"updatedAt": "2026-08-29T10:30:12.000Z"
}{
"statusCode": 400,
"message": "Must be a valid identifier.",
"code": "validation_failed",
"errors": [
{
"message": "Must be a valid identifier.",
"field": "accountId",
"code": "custom",
"path": [
"accountId"
]
}
]
}{
"statusCode": 401,
"code": "INVALID_API_KEY",
"message": "Invalid or inactive API credentials."
}{
"statusCode": 404,
"code": "resource_not_found",
"message": "Resource not found."
}{
"statusCode": 429,
"message": "Too many API requests. Try again later.",
"code": "api_key_rate_limit_exceeded",
"retryAfterSeconds": 17
}{
"statusCode": 500,
"code": "internal_server_error",
"message": "An unexpected error occurred."
}eSIM
Get an eSIM order
One order. Poll this while it is provisioning if you are not taking webhooks.
GET
/
v1
/
esims
/
orders
/
{orderId}
Get an eSIM order
curl --request GET \
--url https://sandbox-api.sakawave.example/v1/esims/orders/{orderId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.sakawave.example/v1/esims/orders/{orderId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://sandbox-api.sakawave.example/v1/esims/orders/{orderId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "01K2Z3AB4S5T6V7W8XYZABCDEF",
"kind": "purchase",
"status": "completed",
"package": {
"id": "01K2Z3AB4C5D6E7F8GHJKMNPQR",
"code": "PKG-US-5GB",
"name": "United States 5GB"
},
"quantity": 1,
"customerId": null,
"price": {
"amount": "999",
"currency": "USD",
"display": "9.99"
},
"paid": {
"amount": "1568430",
"currency": "NGN",
"display": "15,684.30"
},
"fee": {
"amount": "0",
"currency": "NGN",
"display": "0.00"
},
"refunded": {
"amount": "0",
"currency": "NGN",
"display": "0.00"
},
"rate": "1570.000000000000",
"externalReference": "esim_20260829_001",
"failureReason": null,
"profileIds": [
"01K2Z3AB4R5S6T7V8WXYZABCDE"
],
"completedAt": "2026-08-29T10:30:12.000Z",
"createdAt": "2026-08-29T10:30:00.000Z",
"updatedAt": "2026-08-29T10:30:12.000Z"
}{
"statusCode": 400,
"message": "Must be a valid identifier.",
"code": "validation_failed",
"errors": [
{
"message": "Must be a valid identifier.",
"field": "accountId",
"code": "custom",
"path": [
"accountId"
]
}
]
}{
"statusCode": 401,
"code": "INVALID_API_KEY",
"message": "Invalid or inactive API credentials."
}{
"statusCode": 404,
"code": "resource_not_found",
"message": "Resource not found."
}{
"statusCode": 429,
"message": "Too many API requests. Try again later.",
"code": "api_key_rate_limit_exceeded",
"retryAfterSeconds": 17
}{
"statusCode": 500,
"code": "internal_server_error",
"message": "An unexpected error occurred."
}Error codes
| Status | code | Cause |
|---|---|---|
404 | esim_order_not_found | No such order for this business. |
401 | INVALID_API_KEY | The key is missing, invalid, inactive, expired, from the other environment, or blocked by its IP allowlist. |
429 | api_key_rate_limit_exceeded | The per-minute limit for this key was exceeded. |
503 | esim_feature_disabled | eSIM is not enabled on this deployment. |
503 | esim_catalog_unavailable | The catalog is empty and could not be refreshed from the provider. |
503 | esim_provider_unavailable | The eSIM provider could not be reached. Nothing was charged. |
Authorizations
A secret API key, sent as Authorization: Bearer sk_test_… in sandbox or Bearer sk_live_… in live.
Path Parameters
Order ULID. A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"01K2Z3AB4C5D6E7F8G9HJKMNPQ"
Response
Successful response.
A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"01K2Z3AB4C5D6E7F8G9HJKMNPQ"
Available options:
purchase, topup completed is the success state. A failure refunds itself.
Available options:
provisioning, completed, failed, refunded, partially_refunded Show child attributes
Show child attributes
Required range:
x >= 1A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"01K2Z3AB4C5D6E7F8G9HJKMNPQ"
The USD list price.
Show child attributes
Show child attributes
What was debited, in the paying account’s own currency.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The eSIMs this order allocated.
A 26-character ULID.
Required string length:
26Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Example:
"2026-08-14T09:00:00.000Z"
Example:
"2026-08-14T09:00:00.000Z"
Example:
"2026-08-14T09:00:00.000Z"