Встройте туристические eSIM в свой продукт
Продавайте eSIM в своём приложении или на сайте через единый REST API. Ищите по каталогу, оформляйте заказы и выдавайте клиентам готовые к установке eSIM под вашим брендом.
Весь жизненный цикл eSIM — внутри вашего продукта
От выбора тарифа до пополнения посреди поездки: каждый шаг клиента — это вызов API, которым управляете вы.
Продавайте любой тариф из своего каталога
Фильтруйте тарифы по стране, региону, объёму трафика и сроку, а затем оформляйте заказ для клиента одним вызовом. Каждый тариф возвращается с ценой, которую платите за него вы.
- Фильтры по стране, региону, трафику и числу дней
- Заказы оплачиваются с вашего предоплаченного баланса
- Ключи идемпотентности делают повторные запросы безопасными
Выдавайте eSIM в своём сценарии
Когда заказ выполнен, вы получаете ICCID, строку активации LPA и QR-код — через вебхук или запросив заказ.
- Подписанный вебхук order.fulfilled
- QR-код в формате PNG — можно сразу показать или отправить по email
- Строка LPA для установки в одно касание в вашем приложении
Путешественники остаются на связи и после продажи
Предлагайте пополнения трафика, переносите eSIM на новый телефон, оформляйте возвраты по подходящим заказам и скачивайте счета — всё через тот же API.
- Пополнения по ценам вашего аккаунта
- Повторная установка eSIM на новое устройство
- Возвраты и PDF-счета по каждому заказу
Всё для уверенного запуска
Бесплатная песочница
Тестовые ключи проводят весь сценарий — от заказа до eSIM и вебхука — без обращения к мобильной сети и без списаний с баланса.
Подписанные запросы
Каждый запрос подписывается HMAC-SHA256 с меткой времени, а повторно отправленные запросы отклоняются. Ключи можно ограничить IP-адресами ваших серверов.
Вебхуки с повторами
Подписанные события по заказам, eSIM, пополнениям и балансу повторяются с нарастающей задержкой больше суток, а журнал доставки позволяет отправить их заново.
Безопасные повторы
Передавайте Idempotency-Key с заказами и пополнениями. Повторный запрос в течение 24 часов вернёт первый ответ, а не спишет оплату дважды.
Спецификация OpenAPI 3.1
Импортируйте спецификацию в Postman, сгенерируйте типизированный клиент или начните с примеров на curl, Node и Python из документации.
Ключи с разграничением прав и понятные лимиты
Дайте каждому ключу доступ на чтение, на заказы или полный доступ. Лимиты запросов действуют для каждого ключа отдельно, а каждый ответ на аутентифицированный запрос показывает остаток.
Изучите документацию
Для каждого эндпоинта есть запрос и ответ, которые можно скопировать. Подпишите запрос своим ключом, направьте его в песочницу и начинайте.
curl --request GET \
--url 'https://api.roamgo.net/api/partner/v1/plans?country=JP&minDays=7' \
--header 'Authorization: Roamgo-HMAC-SHA256 keyId=<KEY_ID>, ts=<UNIX>, sig=<SIGNATURE>'{
"plans": [{
"id": "cm...",
"name": "Japan · 10 GB · 30 days",
"region": "Japan",
"countries": ["JP"],
"dataAmountMB": 10240,
"validityDays": 30,
"yourPriceCents": 1840,
"currency": "USD"
}],
"page": 1,
"pageSize": 24,
"total": 18
}curl --request POST \
--url 'https://api.roamgo.net/api/partner/v1/orders' \
--header 'Authorization: Roamgo-HMAC-SHA256 keyId=<KEY_ID>, ts=<UNIX>, sig=<SIGNATURE>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <UNIQUE_KEY>' \
--data '{"planId":"cm_plan_id","quantity":1,"customerEmail":"traveler@example.com","externalRef":"BOOKING-49102"}'HTTP/1.1 202 Accepted
{
"order": {
"id": "cm_order_id",
"status": "PAID",
"customerEmail": "traveler@example.com",
"totalCents": 1840,
"currency": "USD"
}
}curl --request GET \
--url 'https://api.roamgo.net/api/partner/v1/esims/cm_esim_id/qr' \
--header 'Authorization: Roamgo-HMAC-SHA256 keyId=<KEY_ID>, ts=<UNIX>, sig=<SIGNATURE>' \
--output esim-qr.pngHTTP/1.1 200 OK
Content-Type: image/png
Cache-Control: private, max-age=3600curl --request POST \
--url 'https://api.roamgo.net/api/partner/v1/esims/cm_esim_id/topups' \
--header 'Authorization: Roamgo-HMAC-SHA256 keyId=<KEY_ID>, ts=<UNIX>, sig=<SIGNATURE>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <UNIQUE_KEY>' \
--data '{"topUpProviderPlanId":"tu_q3J9v0cX2mBf7Lr1sPz8Kd","externalRef":"BOOKING-49102-TOPUP-1"}'HTTP/1.1 201 Created
{
"topUp": {
"id": "cm_topup_id",
"status": "COMPLETED",
"priceCents": 480,
"currency": "USD"
}
}import crypto from "node:crypto";
// X-Roamgo-Signature: t=<unix>,v1=<hex>
export function verifyRoamgoSignature(rawBody: string, header: string, secret: string) {
const match = header.match(/^t=(\d+),v1=([0-9a-f]+)$/);
if (!match) return false;
const [, ts, v1] = match;
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = crypto
.createHmac("sha256", secret)
.update(`${ts}.${rawBody}`)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected, "hex"), Buffer.from(v1, "hex"));
}{
"id": "evt_8d…",
"type": "order.fulfilled",
"createdAt": "2026-09-30T09:14:02.118Z",
"livemode": true,
"data": {
"order": {
"id": "cm_order_id",
"status": "FULFILLED",
"items": [{
"esims": [{
"iccid": "8910…",
"lpaString": "LPA:1$...",
"status": "ISSUED"
}]
}]
}
}
}Один API для каждого этапа продажи
Каждый ресурс ведёт к своему разделу справочника с параметрами, ошибками и примерами.
Каталог
Заказы
eSIM
Аккаунт
Интегрируйте API или запуститесь без кода
API — лишь один из способов продавать. Варианты ниже работают на том же каталоге, балансе и системе выдачи заказов.
Начните разработку в песочнице
Создайте бесплатный партнёрский аккаунт, сгенерируйте тестовые ключи в панели и проведите полный заказ — с QR-кодом и вебхуками — ещё до пополнения баланса.