Wbuduj eSIM dla podróżnych w swój produkt
Sprzedawaj eSIM we własnej aplikacji lub na stronie dzięki jednemu REST API. Przeszukuj katalog, składaj zamówienia i dostarczaj klientom gotowe do instalacji eSIM pod Twoją marką.
Cały cykl życia eSIM we własnym produkcie
Od wyboru planu po doładowanie w trakcie podróży: każdy krok klienta to wywołanie API, nad którym masz kontrolę.
Sprzedawaj dowolny plan z katalogu
Filtruj plany według kraju, regionu, ilości danych i czasu ważności, a potem jednym wywołaniem złóż zamówienie dla klienta. Każdy plan jest zwracany z ceną, jaką za niego płacisz.
- Filtrowanie według kraju, regionu, danych i liczby dni
- Zamówienia opłacane z przedpłaconych środków
- Klucze idempotencji sprawiają, że ponowienia są bezpieczne
Dostarczaj eSIM we własnym procesie
Gdy zamówienie zostanie zrealizowane, otrzymujesz ICCID, ciąg aktywacyjny LPA i kod QR, przez webhook lub odczytując zamówienie.
- Podpisany webhook order.fulfilled
- Kod QR jako PNG, gotowy do wyświetlenia lub wysłania e-mailem
- Ciąg LPA do instalacji jednym dotknięciem w Twojej aplikacji
Utrzymuj podróżnych w kontakcie po sprzedaży
Oferuj doładowania danych, przenoś eSIM na nowy telefon, zwracaj środki za kwalifikujące się zamówienia i pobieraj faktury, wszystko przez to samo API.
- Doładowania w cenach Twojego konta
- Ponowna instalacja eSIM na nowym urządzeniu
- Zwroty i faktury PDF dla każdego zamówienia
Wszystko, czego potrzebujesz, by wdrażać bez obaw
Darmowy sandbox
Klucze testowe pozwalają przejść cały proces, od zamówienia przez eSIM po webhook, bez łączenia się z żadną siecią i bez wydawania środków.
Podpisane żądania
Każde żądanie jest podpisywane za pomocą HMAC-SHA256 i znacznika czasu, a powtórzone żądania są odrzucane. Klucze można ograniczyć do adresów IP Twoich serwerów.
Webhooki z ponawianiem
Podpisane zdarzenia dotyczące zamówień, eSIM, doładowań i środków, ponawiane w coraz dłuższych odstępach przez ponad dobę, z dziennikiem dostarczeń, które możesz wysłać ponownie.
Bezpieczne ponowienia
Wysyłaj nagłówek Idempotency-Key z zamówieniami i doładowaniami. Powtórzenie w ciągu 24 godzin zwraca pierwszą odpowiedź, zamiast pobierać opłatę drugi raz.
Specyfikacja OpenAPI 3.1
Zaimportuj specyfikację do Postmana lub wygeneruj typowanego klienta albo zacznij od przykładów w curl, Node i Pythonie z dokumentacji.
Klucze z zakresem uprawnień, jasne limity
Nadaj każdemu kluczowi dostęp do odczytu, do zamówień lub pełny. Limity żądań są liczone osobno dla każdego klucza, a każda uwierzytelniona odpowiedź pokazuje, ile zostało.
Poznaj dokumentację
Każdy endpoint ma żądanie i odpowiedź do skopiowania. Podpisz swoim kluczem, skieruj żądania na sandbox i zaczynaj.
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"
}]
}]
}
}
}Jedno API do każdego etapu sprzedaży
Każdy zasób prowadzi do swojej referencji z parametrami, błędami i przykładami.
Katalog
Zamówienia
eSIM
Konto
Zintegruj API albo wystartuj bez kodu
API to tylko jeden ze sposobów sprzedaży. Poniższe opcje działają na tym samym katalogu, środkach i realizacji zamówień.
Zacznij budować w sandboxie
Załóż darmowe konto partnera, wygeneruj klucze testowe w panelu i przeprowadź pełne zamówienie, łącznie z kodem QR i webhookami, zanim dodasz jakiekolwiek środki.