> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.simjuno.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.simjuno.com/_mcp/server.

# Overview

> Start here for the SimJuno API and developer documentation.

SimJuno is an eSIM platform for browsing, purchasing, provisioning, and managing eSIM plans.

Use this documentation to integrate with the SimJuno API, understand available endpoints, and test requests against the generated API reference. For typed API access with built-in authentication and retries, use the [TypeScript](/sdks/typescript-sdk), [Python](/sdks/python-sdk), or [PHP](/sdks/php-sdk) SDK. You can also [set up signed webhooks](/webhook) for eSIM lifecycle and usage events.

## API base URL

```text
https://api.simjuno.com/v1
```

## Rate limit

Each API key is limited to **8 requests per 1-second window**. Requests above this [rate limit](/rate-limits) return `429 Too Many Requests`; throttle requests and retry with backoff.

## SimJuno integration flow

1. **API** — Create an [API key](/authentication) and send it with every request. Call `GET /reseller/balance` to verify access and retrieve your reseller wallet balance.
2. **API** — Call `GET /esim/destination` to retrieve the supported countries, regions, and global destinations.
3. **UI** — Ask the customer to select a destination.
4. **API** — Call `GET /esim/destination/{slug}` to list the available plans for that destination.
5. **UI** — Ask the customer to select a plan. Display the plan's data allowance, validity, network coverage, and your retail total.
6. **API** — Before placing the order, call `GET /esim/package/{slug}` to confirm the plan's current details and price.
7. **API** — Call `POST /esim/order` with an `orderList` of package `slug` and `count` pairs plus a unique reseller `transaction_id`. An order can contain up to 100 eSIMs across all items. To safely retry it, reuse the same `transaction_id` and `orderList`. Store the returned `esim_ids`.
8. **Webhook/API** — Wait for an [`ORDER_STATUS` webhook](/webhook#order-status), then call `GET /esim/{id}` for each returned eSIM ID to retrieve its provisioning details (`qrCodeUrl`, `shortUrl`, or `ac`). If you do not configure webhooks, poll this endpoint until those details are available.
9. **UI** — Show the provisioning details to the customer and ask them to install and activate the eSIM on a compatible device.
10. **API** — Call `GET /esim/{id}/usage` to display current data usage. Call `GET /esim` to list all eSIMs ordered through your reseller account.
11. **API** — To add more data to an active eSIM, call `GET /esim/package/{slug}/topup` to list the top-up packages available for its plan, then call `POST /esim/{id}/topup` with the chosen package `slug` and a unique reseller `transaction_id`. The cost is debited from your reseller wallet. To safely retry, reuse the same `transaction_id` with the same eSIM and `slug`.
12. **API** — If necessary, call `POST /esim/{id}/cancel`. An eSIM can only be cancelled if it has not been activated yet. Any eligible refund is returned to your reseller wallet.