- Subscribe —
agent-cards-admin subscribeactivates your organization’s paid plan. Production is gated on an active subscription. - Switch to production —
agent-cards-admin env production(envon its own shows your current mode). - Register a production client —
agent-cards-admin oauth-clients createnow issues a productionclient_idandclient_secret. Pin them in your app; a403here means you still need step 1.
403 subscription_required until step 1 is done (the sandbox mock pool stays free).
Keep your sandbox client for development and register a separate production client for live traffic. If your subscription lapses, production clients drop back to sandbox until you resubscribe.
Sandbox and live are split universes
Every resource belongs to the mode of the credential that created it, and each credential only ever sees its own universe — the same model as Stripe.- Cardholders are per-mode. A cardholder created through a sandbox client exists only in sandbox: your production credentials will not list it, and using its id in live returns
404. The same email can exist once per mode, so you can rehearse a user’s whole journey in sandbox and create them again for real in live. - Cards, transactions, and webhook endpoints are mode-scoped the same way. Lists and by-id reads only return the calling credential’s universe.
- Webhook endpoints receive one mode’s events. An endpoint created with sandbox credentials gets
livemode: falseevents only; create a second endpoint with your production client for live traffic. - The dashboard’s Live/Sandbox toggle switches the console between the two universes; the playground creates sandbox data only.
api.agentcard.sh. The credential decides the universe — a sandbox client or a production client — never the URL.