When to use the sandbox
| Scenario | Use sandbox? |
|---|---|
| LLM agent prototyping, first call | Yes — zero setup |
| Smoke test in CI | Yes — cheap, fast, no secrets to inject |
| Integration check after an SDK upgrade | Yes — confirms the chain still settles |
| Production traffic | No — capped to $100/IP/hour |
| Hedging a real position | No — the bond is owned by the sandbox wallet, not you |
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
PassproductName (or productId) and the API auto-resolves the asset
literal from the registry:
Side-by-side: curl ↔ TypeScript
| Step | curl | TypeScript SDK 0.6 |
|---|---|---|
| Read config | curl /sandbox/info | await lumina.sandbox.info() |
| Default trial | curl -X POST /sandbox/try -d '{}' | await lumina.sandbox.try() |
| Switch product | -d '{"productName":"FLASHETH24-001"}' | lumina.sandbox.try({ productName: 'FLASHETH24-001' }) |
| Custom cover | -d '{"coverageAmount":"50000000"}' | lumina.sandbox.try({ coverageAmount: '50000000' }) |
lumina.sandbox.info() and lumina.sandbox.try() are public
methods in SDK 0.6.0 (no apiKey required on the client).
Body fields
| Field | Type | Default | Notes |
|---|---|---|---|
productName | string | FLASHBTC1H-001 | One of the 6 active products. See Products and assets. |
productId | bytes32 | resolved from productName | Mutually exclusive with productName. |
coverageAmount | string (USDC base units) | coverageCapUsdc from /sandbox/info | Capped at 100000000 ($100). Larger values are clamped server-side, not rejected. |
Limits
| Limit | Value |
|---|---|
| Coverage cap per call | $100 (100000000 base units) |
| Rate limit | 10 calls / hour / IP |
| Wallet | Sandbox wallet pays premium and holds the resulting bond |
| Trigger payout | Goes to the sandbox wallet, not you — this is a behavior probe, not a hedge |
| Network | Base Sepolia (chainId 84532) — testnet only |
Transitioning to full onboarding
Once your sandbox call succeeds end-to-end, graduate to the real path:- Mint an API key — one wallet signature, you get an
lk_…key. - 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.
- Call
lumina.policies.purchase(...)with yourproductName,buyer, andcoverageAmount. See First policy. - Subscribe to webhooks for
policy_triggeredandbond_minted— see Webhooks.
lumina.sandbox.try() is one rename away from lumina.policies.purchase().