Seamless docs

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-Key required 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/quote returns 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.constructEvent in 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].