GET /api/v1/config is the single source of truth for these values.
Public, unauthenticated, no secrets leaked.
Shape
| Field | Meaning |
|---|---|
environment | TEST (Base Sepolia) or LIVE (Base mainnet — not active yet). |
chainId | EVM chain id of the active settlement chain. |
chainName | Human label. |
rpcUrl | Public RPC. Fine for reads; bring your own for write throughput. |
explorerUrl | Block explorer base — append /tx/<hash> or /address/<addr>. |
usdcAddress | ERC-20 contract for USDC on this chain. 6 decimals — values are µUSDC. |
settlementAddress | LuxxonSettlement contract. Consumers approve() USDC to this address once, then call deposit(amount) to fund the per-session pool. Sessions debit this contract automatically; withdraw(amount) pulls the balance back. |
Who reads it
- The console (
console.luxxon.dev) reads/configonce per workspace dashboard load — drives the Wallet panel’s on-chain reads (USDC balance, pool balance viaLuxxonSettlement.deposits()) and thedeposit/withdrawwrites. @luxxon/sdkreads it at first use so callers don’t have to pass contract addresses.- MCP servers read it on startup so agents calling
request_live_viewlearn the active chain without server-side configuration drift. - Your own integration — read it once at boot, cache for the process lifetime; the values are stable on the order of weeks during a chain or contract migration window.
When values change
Two cases:- Contract upgrade. A new
LuxxonSettlementdeploys; the env var onlx-apiflips;/configreturns the new address. Consumers re-approve()and re-deposit()against the new contract (old pool balances stay in the old contract and can be withdrawn there). The console surfaces a banner; SDKs should refresh their cache. - Mainnet cutover.
chainIdflips from84532→8453,environmentflips fromTEST→LIVE. NewLIVEAPI keys become mintable. ExistingTESTkeys keep working against the Sepolia deploy until you decommission the testnet stack.