No secrets, ever
Your key is the only key. Provider credentials are injected at the edge of egress and never enter your process.
Switchboard · the hub for everything outside your app
One key, one base URL, one envelope for 89+ providers. Policy, credentials, metering, and your own bill rates live in the hub—so apps stay thin and operators stay in control.
What one call looks like inside the hub. Hub overhead target: <15 ms p99.
Connectors
14 families—AI, payments, comms, identity, travel, civic data, and more. Declarative specs generate REST, SDK methods, and MCP tools from one source of truth. Add a provider once; every app and agent inherits it.
For builders
Every provider answers in the same envelope: data, meta.cost, meta.price, request_id. Swap Stripe for Twilio for GPT by changing one string.
curl https://us1.switchboard.example/v1/call/switchboard.chat \ -H "Authorization: Bearer sb_live_…" \ -H "SB-Customer: atlas:cus_8812" \ -H "Idempotency-Key: demo-1" \ -H "Content-Type: application/json" \ -d '{"model":"thinker","messages":[{"role":"user","content":"Summarize this ticket"}]}'
OpenAI-shaped. Switchboard picks the model ladder; you set the price.
Local smoke uses sb_test_app_sandbox_devsecret01 against make run-gateway — no live spend. Auth + test ring → · Check usage →
Your key is the only key. Provider credentials are injected at the edge of egress and never enter your process.
Hub-side idempotency on side effects. A retry after a timeout returns the original result instead of charging twice.
Point your existing SDK at /v1/chat/completions. Ask for a tier or a named model—same wire.
Every connector op is an MCP tool with the same scopes, audit, and approval gates as your APIs.
Thinking tiers
Three Switchboard models sit above every provider catalog. Apps ask for anybody, thinker, or expert; the hub routes a fixed failover ladder and bills at the rate you set.
Cheap, basic work. Routed to efficient models with a configured failover ladder.
Standard smart work. Primary + fallback across your preferred providers.
Harder jobs and deeper reasoning. Advanced models when the connection needs them.
For operators
Rotate a secret, change a ladder, cap a tenant, set a margin—without a redeploy and without asking an app team. Then watch the ledger prove it.
{
"request_id": "req_7f3a…",
"caller_id": "app_atlas",
"customer": "atlas:cus_8812",
"op": "switchboard.chat",
"tier": "thinker",
"resolved": "anthropic/claude-sonnet",
"units": { "input_tokens": 912, "output_tokens": 292 },
"cost": { "amount": 0.0031, "currency": "USD" },
"price": { "amount": 0.0048, "currency": "USD" },
"latency_ms": { "hub": 1.3, "provider": 412 },
"outcome": "sent"
}Cost vs. price per model, per tier, effective-dated. Margin you manage, not pass-through only.
Mint app, agent, and customer keys scoped by family. Revoke one and every cell denies it in seconds.
Soft and hard caps per tenant. Fair lanes so one noisy caller can't starve the rest.
Policy promotions and credential writes need a second person. Every decision lands in a hash-chained audit log.
Side-effect tools pause for a human. Approve from the console; the agent resumes.
Why a hub
Every product rebuilds the same clients, scatters secrets across CI, and learns its spend from a vendor invoice. Switchboard collapses that into a single wire.
Stripe, Twilio, OpenAI clients rewritten in every repo.
Rotation means touching every environment and CI system.
Invoices arrive as one total—no product line, no room for your own rates.
One app pays again for data another already fetched.
Built for trust
Credentials only leave toward hosts declared in the connector spec. Private ranges rejected.
Blast radius stays in one zone. Signed last-known-good config keeps serving if control is down.
Namespaced identity. Cache and knowledge partitioned per customer.
Append-only, hash-chained trail for every call and every admin action.
Early access
We're onboarding teams in small batches while cells and connectors harden. Tell us which outside API hurts most—we'll start there.