the governed gateway
Every model through one key.Every call on the record.
Send one request format to Switchyard and we patch it through to whichever model fits the job. Sensitive data is masked before it leaves. Every key carries a budget. Every call leaves a record your risk team can actually read.
ONE KEY → EVERY ROUTE
live now on the board
Switch the model field, not your credentials.
what it takes to start
1
Endpoint to integrate
0
Contracts to sign
60s
From signup to first response
100%
Of calls logged and exportable
what you actually get
Four things, all of them checkable.
Nothing below is a roadmap item. Each one is a behaviour you can verify on your first request.
PII stays off the wire
Requests pass through a masking layer before they reach any model provider. Emails, phone numbers, and card numbers are replaced on the way out and restored on the way back — the provider never sees the raw values. Turn it off per request when you do not need it.
How masking worksout → "contact: [MASKED_EMAIL_1]"
in ← "contact: ada@acme.co"A budget on every key
Set a daily or monthly spend cap per key. Requests past the cap are rejected until it resets or you raise it. A runaway job shows up before the invoice does.
Set a spend capkey sk-sy-…9fK2 today $4.20 / $25.00
key sk-sy-…mQx7 today $0.00 / $5.00Every call on the record
Model, tokens, latency, cost, and whether masking was applied — recorded for every call and exportable as CSV. When someone asks what your team sent to which provider last quarter, you have an answer.
See what is loggedreq_8f1c2b deepseek-v4-pro
1,204 tok 380ms $0.0031 maskedOne request shape for every provider
Every model answers through the same OpenAI-compatible schema, streaming included. Point an existing SDK at Switchyard and change one field.
Read the docsPOST /v1/chat/completions
{ "model": "deepseek-v4-pro", … }
{ "model": "kimi-k3", … }built for teams that have to answer for it
Your risk team has questions. This is where the answers live.
Adding a model provider used to mean another contract, another key in someone’s .env, another path for data to leave, another line item nobody owns. Adding five means five of each. Switchyard collapses that into one controlled entrance: providers change, your controls do not.
- One integration point to review, not one per provider
- Sensitive fields masked before they cross your boundary
- A per-call record you can hand to audit
on the board
What is wired up today.
We add models as we can actually serve them. Anything not yet live is marked, not hidden.
| Model | Provider | Context | Price | Status |
|---|---|---|---|---|
| deepseek-v4-flash | DeepSeek | 128K | $0.28 input / $1.10 output / 1M tokens | |
| deepseek-v4-flash-0731 | DeepSeek | 128K | $0.28 input / $1.10 output / 1M tokens | |
| kimi-k3 | Moonshot | 256K | $0.55 input / $2.20 output / 1M tokens | |
| deepseek-v4-pro | DeepSeek | 128K | $0.55 input / $2.10 output / 1M tokens | Coming soon |
| glm-5.3-flash | Zhipu | n/a | Pricing on request | Coming soon |
getting started
Three stops from signup to your first response.
Open an account
No card required. New accounts start with enough credit to send real requests the same day.
Cut a key
Generate a key from the dashboard, set its spend cap, and drop it into any OpenAI-compatible SDK.
Send the request
Name the model you want. Usage, cost, and the masking flag land on your dashboard as it happens.
from openai import OpenAI
client = OpenAI(
api_key="sk-sy-...",
base_url="https://api.switchyardai.io/v1",
)
resp = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "Say hi in five words."}],
)
print(resp.choices[0].message.content)Get a key. Send a request. Read the record.
Trial credit to start. No subscription to cancel later.