Intégrez les eSIM de voyage à votre produit
Vendez des eSIM depuis votre propre application ou site web avec une seule API REST. Parcourez le catalogue, passez des commandes et livrez à vos clients des eSIM prêtes à installer, sous votre marque.
Tout le cycle de vie de l’eSIM, dans votre propre produit
Du choix du forfait à la recharge en plein voyage, chaque étape de votre client est un appel d’API que vous contrôlez.
Vendez n’importe quel forfait de votre catalogue
Filtrez les forfaits par pays, région, volume de données et durée, puis passez commande pour un client en un seul appel. Chaque forfait est renvoyé avec le prix que vous payez.
- Filtrage par pays, région, données et nombre de jours
- Commandes réglées avec votre crédit prépayé
- Les clés d’idempotence sécurisent les nouvelles tentatives
Livrez l’eSIM dans votre propre parcours
Lorsqu’une commande est traitée, vous recevez l’ICCID, la chaîne d’activation LPA et un QR code, par webhook ou en consultant la commande.
- Webhook order.fulfilled, signé
- QR code au format PNG, prêt à afficher ou à envoyer par e-mail
- Chaîne LPA pour une installation en un geste dans votre application
Gardez les voyageurs connectés après la vente
Proposez des recharges de données, transférez une eSIM vers un nouveau téléphone, remboursez les commandes éligibles et téléchargez les factures, le tout depuis la même API.
- Recharges au prix de votre compte
- Réinstallation d’une eSIM sur un nouvel appareil
- Remboursements et factures PDF par commande
Tout ce qu’il vous faut pour passer en production sereinement
Sandbox gratuite
Avec les clés de test, tout le flux s’exécute, de la commande à l’eSIM puis au webhook, sans solliciter de réseau ni dépenser de crédit.
Requêtes signées
Chaque requête est signée avec HMAC-SHA256 et un horodatage, et les requêtes rejouées sont refusées. Les clés peuvent être limitées aux adresses IP de vos serveurs.
Des webhooks qui réessaient
Événements signés pour les commandes, les eSIM, les recharges et le crédit, renvoyés à intervalles croissants pendant plus d’une journée, avec un journal des livraisons que vous pouvez rejouer.
Nouvelles tentatives sans risque
Envoyez un en-tête Idempotency-Key avec les commandes et les recharges. Une répétition dans les 24 heures renvoie la première réponse au lieu de débiter deux fois.
Spécification OpenAPI 3.1
Importez la spécification dans Postman ou générez un client typé, ou partez des exemples curl, Node et Python de la documentation.
Clés à portée définie, limites claires
Donnez à chaque clé un accès en lecture, aux commandes ou complet. Les limites de débit s’appliquent par clé, et chaque réponse authentifiée indique ce qu’il reste.
Explorez la documentation
Chaque endpoint comporte une requête et une réponse prêtes à copier. Signez avec votre clé, pointez vers la sandbox et lancez-vous.
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"
}]
}]
}
}
}Une seule API pour chaque étape de la vente
Chaque ressource renvoie vers sa référence, avec paramètres, erreurs et exemples.
Catalogue
Commandes
eSIM
Compte
Intégrez l’API, ou lancez-vous sans code
L’API n’est qu’une des façons de vendre. Les options ci-dessous reposent sur le même catalogue, le même crédit et la même livraison.
Commencez à développer dans la sandbox
Créez un compte partenaire gratuit, générez des clés de test dans le tableau de bord et exécutez une commande complète, QR code et webhooks compris, avant même d’ajouter du crédit.