Integra le eSIM da viaggio nel tuo prodotto
Vendi eSIM dalla tua app o dal tuo sito con un’unica API REST. Cerca nel catalogo, crea ordini e consegna ai tuoi clienti eSIM pronte da installare, con il tuo marchio.
L’intero ciclo di vita della eSIM, dentro il tuo prodotto
Dalla scelta del piano alla ricarica a metà viaggio, ogni passo del tuo cliente è una chiamata API che controlli tu.
Vendi qualsiasi piano del tuo catalogo
Filtra i piani per paese, regione, dati e durata, poi crea l’ordine per un cliente con una sola chiamata. Ogni piano viene restituito con il prezzo che paghi tu.
- Filtri per paese, regione, dati e giorni
- Ordini pagati con il tuo credito prepagato
- Le chiavi di idempotenza rendono sicuri i nuovi tentativi
Consegna la eSIM nel tuo flusso
Quando un ordine viene evaso ricevi l’ICCID, la stringa di attivazione LPA e un codice QR, tramite webhook o leggendo l’ordine.
- Webhook order.fulfilled, firmato
- Codice QR in PNG, pronto da mostrare o inviare via email
- Stringa LPA per installare con un tocco nella tua app
Mantieni connessi i viaggiatori dopo la vendita
Offri ricariche dati, sposta una eSIM su un nuovo telefono, rimborsa gli ordini idonei e scarica le fatture, tutto dalla stessa API.
- Ricariche con i prezzi del tuo account
- Reinstalla una eSIM su un nuovo dispositivo
- Rimborsi e fatture PDF per ogni ordine
Tutto quello che ti serve per andare in produzione senza pensieri
Sandbox gratuita
Le chiavi di test eseguono l’intero flusso, dall’ordine alla eSIM fino al webhook, senza contattare alcuna rete né spendere credito.
Richieste firmate
Ogni richiesta è firmata con HMAC-SHA256 e un timestamp, e i tentativi di replay vengono respinti. Puoi limitare le chiavi agli indirizzi IP dei tuoi server.
Webhook con nuovi tentativi
Eventi firmati per ordini, eSIM, ricariche e credito, ritentati a intervalli crescenti per oltre un giorno, con un registro delle consegne che puoi rieseguire.
Nuovi tentativi sicuri
Invia un Idempotency-Key con ordini e ricariche. Una ripetizione entro 24 ore restituisce la prima risposta invece di addebitare due volte.
Specifica OpenAPI 3.1
Importa la specifica in Postman o genera un client tipizzato, oppure parti dagli esempi in curl, Node e Python della documentazione.
Chiavi con permessi, limiti chiari
Assegna a ogni chiave l’accesso in lettura, agli ordini o completo. I limiti di frequenza valgono per singola chiave, e ogni risposta autenticata mostra quanto ne resta.
Esplora la documentazione
Ogni endpoint ha una richiesta e una risposta da copiare. Firma con la tua chiave, punta alla sandbox e inizia.
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"
}]
}]
}
}
}Un’unica API per ogni fase della vendita
Ogni risorsa rimanda al suo riferimento, con parametri, errori ed esempi.
Catalogo
Ordini
eSIM
Account
Integra l’API o lancia senza codice
L’API è solo uno dei modi per vendere. Le opzioni qui sotto usano lo stesso catalogo, lo stesso credito e la stessa evasione degli ordini.
Inizia a sviluppare nella sandbox
Crea un account partner gratuito, genera le chiavi di test nella dashboard ed esegui un ordine completo, codice QR e webhook inclusi, prima di aggiungere credito.