Build with the eSIM Atlas API
Integrate eSIM provisioning into your platform with our RESTful API. Get started in minutes with comprehensive documentation and code examples.
OAuth 2.0
Secure client credentials authentication
Real-time
Instant eSIM activation webhooks
Global
Coverage in 190+ countries
https://api.slowboat.com.au/v1Authentication
Secure your API requests using OAuth 2.0 Client Credentials flow.
Get Access Token
Exchange your API credentials for an access token. Tokens expire after 1 hour.
curl -X POST https://api.slowboat.com.au/v1/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "client_credentials",
"client_id": "pk_live_your_client_id",
"client_secret": "sk_live_your_client_secret"
}'Token Response
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "read:products write:orders read:orders read:esims"
}Make Authenticated Requests
Include the token in the Authorization header for all API requests.
curl https://api.slowboat.com.au/v1/products \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"API Endpoints
Complete reference for all available API endpoints.
Products
Retrieve a paginated list of available eSIM products with optional filtering.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
region | string | Filter by region (US, EU, ASIA, GLOBAL) |
page | integer | Page number (default: 1) |
limit | integer | Results per page (default: 20, max: 100) |
Response
{
"data": [
{
"id": "prod_eu5gb30d",
"name": "Europe eSIM 5GB",
"description": "5GB data valid for 30 days",
"coverage": ["FR", "DE", "IT", "ES", "UK", "..."],
"data_amount_gb": 5,
"validity_days": 30,
"price": 2999,
"currency": "USD",
"status": "active"
}
],
"meta": {
"total": 150,
"page": 1,
"per_page": 20,
"total_pages": 8
}
}Orders
eSIMs
Webhooks
Receive real-time notifications for order and eSIM events.
Available Events
order.createdNew order placed
order.fulfilledeSIM assigned to order
order.failedOrder fulfillment failed
esim.activatedeSIM installed on device
esim.data_lowData below 20%
esim.expiredeSIM validity ended
Webhook Payload
{
"id": "evt_abc123",
"type": "order.fulfilled",
"created_at": "2025-01-15T10:35:00Z",
"data": {
"order_id": "ord_abc123xyz",
"status": "fulfilled",
"esims": [{
"iccid": "8901234567890123456",
"activation_code": "LPA:1$smdp.io$K2-ABCD"
}]
}
}X-Webhook-Signature header using your webhook secret.Error Handling
All errors return a consistent JSON structure with actionable information.
{
"error": {
"code": "invalid_request",
"message": "The product_id field is required",
"param": "product_id",
"doc_url": "https://docs.slowboat.com.au/errors/invalid_request"
},
"request_id": "req_abc123xyz"
}HTTP Status Codes
| Code | Description |
|---|---|
200 | Success |
400 | Bad Request - Invalid parameters |
401 | Unauthorized - Invalid or expired token |
403 | Forbidden - Insufficient permissions |
404 | Not Found - Resource doesn't exist |
429 | Rate Limited - Too many requests |
500 | Server Error - Something went wrong |
Rate Limits
API rate limits vary by plan. Exceeded limits return 429 status.