Seamless Partner API
Sell eSIMs powered by the Seamless platform from your travel app, fintech, publication, or MVNO. Catalog → quote → order → activate → top-up → refund, all behind one bearer key.
Get a key
Sign up at partner.withseamless.com. Your sandbox key (sk_test_…) and a $100 sandbox-wallet credit ship immediately. A production key (sk_live_…) is issued after a 48-hour operator review.
Quickstart
Install the Node SDK and create your first sandbox order:
npm install @withseamless/node
import { Seamless } from "@withseamless/node";
const seamless = new Seamless({ apiKey: process.env.SEAMLESS_API_KEY! });
const me = await seamless.identity.me();
const spain = await seamless.catalog.getCountry("spain");
const order = await seamless.orders.create({
lines: [{ package_detail_id: spain.packages[0].package_detail_id }],
payment_mode: "partner_wallet",
});
const sim = order.lines[0].sims[0];
const install = await seamless.esims.installLink(sim.iccid);
console.log("Apple one-tap: ", install.apple_url);
console.log("Android one-tap:", install.android_url);Concepts
- Bearer keys.
sk_test_hits the sandbox (real shapes, stub providers, $0 SKU).sk_live_hits production. Single environment; the prefix is the only switch. - Idempotency.
Idempotency-Keyrequired on every mutating call. Same key + same body within 24h = cached replay. Same key + different body =409 idempotency_mismatch. The SDK auto-injects a UUID per call. - Pricing quotes.
GET /pricing/quotereturns a 15-minute HMAC-signed token. Pass it back at order create to lock the price against drift. - Webhooks. Stripe-format
Seamless-Signature: t=<unix>,v1=<hex>with 5-minute replay window.Webhooks.constructEventin the SDK verifies and parses in one call. 11 event types — see the API reference.
API reference
Full machine-readable contract at /reference (rendered from openapi.yaml).
Support
Email [email protected]. For commercial conversations (production approval, revenue share), [email protected].