Roamzy · API for AI Agents

One eSIM. Built for agents.

Roamzy is the first eSIM provider with a public, machine-readable, security-hardened API for AI agents. Claude, Cursor, Continue, ChatGPT — any MCP client or any HTTP client — can query coverage, estimate costs, and purchase a global eSIM on the user's behalf. USDT payments, per-megabyte billing, 193 countries.

🚀 Try without sign-up. Install the MCP server with NO Roamzy account required — on the first tool call it auto-mints an anonymous account. The eSIM works immediately on USDT payment. Attach to a permanent Google or Telegram account whenever you want, or never.

MCP-ready No-signup mode 193 countries USDT-only 5-layer spending defense OpenAPI 3.0

Quick start without sign-up (recommended)

Install the MCP server with no Roamzy account required. The agent auto-creates an anonymous account on first use — you can claim it later by signing in with Google or Telegram (optional; the eSIM works either way).

1. Edit your Claude Desktop config

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "roamzy": {
      "command": "npx",
      "args": ["-y", "@roamzy/mcp-server"]
    }
  }
}

That's it — no env block needed. The MCP server detects no ROAMZY_API_TOKEN and mints an anonymous account on the first authenticated tool call (~1s round-trip to roamzy.io).

Open source on GitHub (MIT) · Published on npm as @roamzy/mcp-server · Behind a firewall? Pin https://roamzy.io/mcp/roamzy-mcp-latest.tgz instead — same code.

2. Restart Claude and ask

You: Buy me an eSIM for Japan with $20 USDT through Roamzy
Claude: [calls roamzy_create_order] → returns msisdn, pay_url, claim_url
Claude: Your eSIM number will be 2040400002. To complete:
        1. Pay $20 USDT at https://nowpayments.io/...
        2. After payment (~5-15 min), I'll fetch your QR code.
        3. (Optional) Attach this eSIM to your Roamzy account anytime at
           https://roamzy.io/claim.html?token=rc_... — just sign in with
           Google or Telegram + enter your eSIM number.

3. After payment

Once USDT settles (typical 5-15 min), the agent fetches roamzy_get_esim and renders the QR PNG inline in chat. Scan it with your phone camera; the eSIM activates instantly.

Anonymous spending limits (tighter than normal accounts)

LimitAnonymousClaimed account
Daily cap$30 USDT$50 USDT (raisable to $1000)
Monthly cap$100 USDT$500 USDT (raisable to $10k)
Cool-off (first 7 days)$30 hard$50 hard
Big-txn confirmation$50$200 (raisable)
Max active eSIMs1 until claimed5

Tighter for anonymous because the account has no OAuth identity yet — limits blast radius if the MCP token leaks before you claim. Claiming promotes you to the normal-account tier instantly.

Quick start with a pre-created token (for managed environments)

If you want spending limits visible in a dashboard from day one, or you're scripting agents at scale, create a token first.

1. Create a token

Sign in at /dashboard/settings, open API & Agents, click Create new token. The plain text shows once — save it then.

2. Edit your Claude Desktop config

{
  "mcpServers": {
    "roamzy": {
      "command": "npx",
      "args": ["-y", "@roamzy/mcp-server"],
      "env": {
        "ROAMZY_API_TOKEN": "rk_live_xxx",
        "ROAMZY_ENABLE_PURCHASE": "false"
      }
    }
  }
}

3. Restart Claude and ask

You: How much does an eSIM cost in Japan for 1 GB through Roamzy?
Claude: [calls roamzy_estimate(country_slug="esim-japan", mb_estimated=1024)]
       → Estimated cost: $4.50 USDT. Min top-up to reach this is $20.

To enable purchases, set ROAMZY_ENABLE_PURCHASE to "true" in the env block above. By default, purchase tools are not exposed even if the token has purchase scope — defense-in-depth against config typos.

Available tools

Read-only (no env flag needed)

ToolEndpointPurpose
roamzy_statusGET /statusCheck API health + pause flags. Agents poll this before purchase attempts.
roamzy_list_countriesGET /catalogAll 193 countries with current per-MB rates.
roamzy_country_detailGET /countries/:slugSingle-country snapshot.
roamzy_estimatePOST /estimateCost projection for {country, MB budget}.
roamzy_meGET /meVerify token + user info.
roamzy_list_esimsGET /esimsUser's eSIMs with status and balance.
roamzy_get_esimGET /esims/:ideSIM details with QR image URL + LPA URL.
roamzy_order_statusGET /orders/:idPoll a pending order.

Purchase (requires ROAMZY_ENABLE_PURCHASE="true" in config)

ToolEndpointPurpose
roamzy_create_orderPOST /ordersReserve eSIM and create USDT payment intent. Returns pay_url for the user to complete.

Security model

Agents act with autonomy. Defense-in-depth keeps blast radius small.

Token lifecycle

SHA-256 at rest, shown once

Plain text appears once at creation. The server stores only the SHA-256 hash. A 12-character prefix-hint (rk_live_abc1…) is kept for display. One-click revoke is immediate.

Spending caps

$50/day, $500/month, opt-in purchases

Every token has daily and monthly USDT caps. Purchase scope is off by default — the token can read catalogs and check status but cannot spend. Big transactions (above $200) require manual confirmation.

Cool-off

$50 total cap in first 7 days

A new token cannot exceed $50 USDT spend in its first week, regardless of configured daily limit. If a token leaks before you notice, blast radius is bounded.

Kill switches

Three independent levels

Per-token revoke (user dashboard, immediate). Per-user agent-block (admin endpoint, blocks all of one user's tokens). Global agent pause (admin endpoint, 503s every Bearer token). Status visible at /api/v1/status.

Payment integrity

HMAC-verified, replay-proof

Payment confirmations from NowPayments are verified with HMAC-SHA-512. The ledger has a unique constraint on (refType, refId) so a replayed webhook cannot double-credit a balance.

Crypto-only

No fiat, no card-on-file

Settlement is USDT via NowPayments. No card storage compliance, no chargebacks, no fiat onboarding KYC. Once an agent gets the pay_url, the user pays directly from their wallet.

Why Roamzy for agents specifically

RoamzyOther eSIM providers
Product structureSingle global eSIM, per-country rates1500+ country/region bundle variants
BillingPer-megabyte USDTPre-paid daily packages, fiat
Public agent APIYes — REST + MCP serverNo (B2B-only or none)
PaymentUSDT-only, no cardStripe / Apple Pay / fiat cards
ActivationQR image URL + LPA URLQR only, manual install
Spending defense5-layer (daily / monthly / cool-off / big-txn / global)None (consumer flow)
Source codeToken formats, schemas publicClosed

FAQ

Which AI agents can use Roamzy?

Any MCP-compatible client — Claude Desktop, Cursor, Continue, Cline, Windsurf. And any HTTP client beyond MCP: LangChain tools, OpenAI function calling, n8n, Zapier, custom Python scripts, all hit /api/v1/* directly.

What payment methods are supported?

USDT only, via NowPayments. Default chain is TRC-20 (TRON); BSC, Solana, and others are selectable. No fiat, no card-on-file. Crypto rails are agent-native — no shipping address, no card-storage compliance, settlement final once the chain confirms.

How does the agent deliver the eSIM to the user?

After payment, GET /api/v1/esims/:id returns three activation surfaces. qr_image_url (PNG URL, primary — agents render inline in chat for the user to scan with their phone camera). qr_payload (raw QR text for clients that render their own QR). lpa_url (one-tap install URL for iOS 17.4+ / Android 14+ when the agent runs on the eSIM-target device).

Do I need an account first?

No — anonymous-first is the recommended flow. The MCP server creates an anonymous account on first use, no sign-up (see the quick start above). You can optionally claim it later with Google or Telegram to manage it in a browser; or, for managed environments, pre-create a Bearer token at /dashboard → Settings → API & Agents.

How is this different from Airalo / Holafly?

Three structural differences. (1) One SKU — single global eSIM with per-country rates, instead of 1500+ bundle variants. (2) Per-megabyte billing — agents map USDT budgets cleanly to data, no pre-paid daily expiry math. (3) Public agent API — full REST + MCP server, instead of B2B-restricted enterprise integration.

Where is the OpenAPI spec?

/api/v1/openapi.json (machine-readable). Interactive Swagger UI at /api/v1/docs. Long-form agent guidance at /llms.txt and /llms-full.txt. JSON manifest at /.well-known/agents.json.

Resources