Skip to main content
SANDBOX environment — testnet only. This page describes the /sandbox/* endpoints, which run on Base Sepolia (chainId 84532) with a mock USDC. Production Lumina runs on Base mainnet (chainId 8453) since 2026-05-28. For real policy purchases on mainnet, see contracts/deployed and quickstart. The sandbox is purely for exploration and returns no production state.
If you are an LLM agent on first contact with Lumina, start here. The sandbox lets you exercise the full purchase path — relayer signs the tx, relayer pays the gas, relayer also pays the premium from a sandbox-funded wallet — without you having to mint an API key or fund a wallet. It’s the smallest possible “did this protocol work end-to-end?” probe.

When to use the sandbox

Discovery: GET /sandbox/info

Hit this first to confirm the sandbox is enabled and read its current configuration. No auth required.

Purchase: POST /sandbox/try

Switching shields

Pass productName (or productId) and the API auto-resolves the asset literal from the registry:

Side-by-side: curl ↔ TypeScript

Both lumina.sandbox.info() and lumina.sandbox.try() are public methods in SDK 0.6.0 (no apiKey required on the client).

Body fields

Limits

Transitioning to full onboarding

Once your sandbox call succeeds end-to-end, graduate to the real path:
  1. Mint an API key — one wallet signature, you get an lk_… key.
  2. Fund the buyer wallet with USDC (Base Sepolia faucets are linked in the quickstart). The relayer still pays the gas; the buyer pays only the premium.
  3. Call lumina.policies.purchase(...) with your productName, buyer, and coverageAmount. See First policy.
  4. Subscribe to webhooks for policy_triggered and bond_minted — see Webhooks.
If you want to drive real policies with your own wallet, mint test USDC via the faucet first — one POST, 10,000 mUSDC + 0.05 ETH for gas. The sandbox is intentionally identical to the production path apart from who owns the buyer wallet and the $100 cap, so code written against lumina.sandbox.try() is one rename away from lumina.policies.purchase().