Byg rejse-eSIM'er ind i dit produkt
Sælg eSIM'er fra din egen app eller hjemmeside med ét REST-API. Søg i kataloget, afgiv ordrer, og lever eSIM'er, der er klar til installation, til dine kunder under dit brand.
Hele eSIM-livscyklussen i dit eget produkt
Fra valget af abonnement til optankning midt på rejsen er hvert trin, din kunde tager, et API-kald, du styrer.
Sælg ethvert abonnement i dit katalog
Filtrer abonnementer efter land, region, data og varighed, og afgiv derefter en ordre for en kunde med ét kald. Hvert abonnement returneres med den pris, du betaler for det.
- Filtrer efter land, region, data og dage
- Ordrer betales af din forudbetalte saldo
- Idempotensnøgler gør nye forsøg sikre
Lever eSIM'et i dit eget flow
Når en ordre er gennemført, får du ICCID, LPA-aktiveringsstrengen og en QR-kode, via webhook eller ved at læse ordren.
- order.fulfilled-webhook, signeret
- QR-kode som PNG, klar til at vise eller sende pr. e-mail
- LPA-streng til installation med ét tryk i din app
Hold de rejsende forbundet efter salget
Tilbyd dataoptankninger, flyt et eSIM til en ny telefon, refundér berettigede ordrer, og download fakturaer, alt sammen fra det samme API.
- Optankninger prissat til din konto
- Geninstaller et eSIM på en ny enhed
- Refusioner og PDF-fakturaer pr. ordre
Alt, hvad du skal bruge for at lancere med ro i maven
Gratis sandbox
Testnøgler kører hele flowet, fra ordre til eSIM til webhook, uden at kontakte et netværk eller bruge af saldoen.
Signerede anmodninger
Hver anmodning signeres med HMAC-SHA256 og et tidsstempel, og genafspillede anmodninger afvises. Nøgler kan begrænses til dine serveres IP-adresser.
Webhooks, der prøver igen
Signerede hændelser for ordrer, eSIM'er, optankninger og saldo, som sendes igen med stigende interval i mere end et døgn, med en leveringslog, du kan afspille igen.
Sikkert at prøve igen
Send en Idempotency-Key med ordrer og optankninger. En gentagelse inden for 24 timer returnerer det første svar i stedet for at trække betalingen to gange.
OpenAPI 3.1-specifikation
Importér specifikationen i Postman, eller generér en typet klient, eller start med eksemplerne i curl, Node og Python i dokumentationen.
Afgrænsede nøgler, klare grænser
Giv hver nøgle læse-, ordre- eller fuld adgang. Grænserne for antal kald gælder pr. nøgle, og hvert godkendt svar viser, hvor meget der er tilbage.
Udforsk dokumentationen
Hvert endpoint har en anmodning og et svar, du kan kopiere. Signér med din nøgle, peg på sandboxen, og kom i gang.
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"
}]
}]
}
}
}Ét API til alle dele af salget
Hver ressource linker til sin reference med parametre, fejl og eksempler.
Katalog
Ordrer
eSIM'er
Konto
Integrer API'et, eller lancer uden kode
API'et er én måde at sælge på. Mulighederne herunder kører på det samme katalog, den samme saldo og den samme levering.
Begynd at bygge i sandboxen
Opret en gratis partnerkonto, generér testnøgler i dashboardet, og gennemfør en hel ordre, inklusive QR-kode og webhooks, før du sætter saldo ind.