Create bot
Full customer onboarding (rows, secrets, tenant token, next steps): Onboard tab.
Creates the bot row. Then add knowledge (Knowledge tab) and Re-train. Bulk onboarding: node tools/sync-knowledge.mjs --seed seed/<bot_id>.json (template in seed/TEMPLATE.json).
New bots run on the customer's own OpenAI + Pinecone keys and stay keys missing until Ray sets OPENAI_API_KEY_<ID>, PINECONE_API_KEY_<ID>, PINECONE_HOST_<ID> (wrangler secret put). Tick "platform keys" only for our own bots.
Settings —
null to remove it. Unknown keys are rejected.
Onboard a customer
Creates the stub rows, lists the secrets still missing, issues the tenant token once the bot is credential-ready, prints the next steps. Secrets, Vapi and Cal.com stay CLI steps (docs/runbooks/onboarding.md). Every step is re-read from the API on Load.
1. Rows
2. Secrets
secret put? Redeploy that Worker (docs/gotchas/voice.md).
3. Tenant token
4. Next steps
Customer
Ray
Add knowledge
Usage
Per-tenant counters from usage_daily (chatbot: asks, trained items; voice: calls, seconds, bookings, messages). Tenant = the bot_id above; leave it blank for all tenants (admin token only).