Test mode
Test mode is a fully isolated environment that mirrors the production API at api-sandbox.chronapilot.com. Test keys (sk_test_…, pk_test_…) only reach this surface.
What's different from live
- Data is isolated — events, users, connections in test never appear in live.
- All test events carry "livemode": false in their payload.
- Email and push delivery are stubbed by default. Invitations resolve immediately to "delivered" without actually sending.
- Provider OAuth uses sandbox apps for Google and Microsoft. Sign in with any Google or Microsoft test account.
- Voice realtime is rate-limited more aggressively and falls back to a faster (less-fluent) model.
Seeded fixtures
Every new test environment gets a handful of pre-seeded fixtures so you don't need to manually create the world:
- usr_demo_alice — connected Google calendar with 30 events on common categories.
- usr_demo_bob — connected Microsoft calendar with overlapping availability for free/busy queries.
- usr_demo_carol — unconnected user (good for testing the connection flow).
These are stable, special-cased identifiers — they do not follow the random-suffix format of production IDs and are guaranteed to exist on every fresh sandbox. Use them as starting points: list their events, build flows around them, hit webhooks against your local tunnel.
Forcing webhook deliveries
From the dashboard or via the API, you can force-fire any event type:
curl https://api-sandbox.chronapilot.com/v1/webhook_endpoints/wbk_…/test \ -X POST \ -H "Authorization: Bearer sk_test_…" \ -d '{ "type": "departure.updated" }'
The synthetic event always carries "livemode": false and a livemode_test: true flag, so your handler can branch deterministically.
Webhook tunnel
Install the CLI and tail webhooks straight to localhost:
chronapilot listen --forward-to http://localhost:3000/webhooks
The CLI manages temporary endpoint registration and tears it down on exit.
Promoting to live
When you're ready, swap your key prefix and base URL. Webhook endpoints, OAuth client IDs and pricing rules are all promoted by clicking "Promote to live" in the dashboard — they don't transfer automatically because most teams want their live config curated.