Control your company’s AI use, and prove it.
When an auditor asks what your AI was allowed to do, you need proof. RouterX is an AI gateway for platform and security teams. It runs on your servers, between your apps and AI providers, where it enforces your rules, limits spend and keeps records that can be checked.
Control and spend
Set the limits once, for every app.
Control who uses which models and where data goes. Each API key can have its own budget and model list.
New requests stop when estimated spend reaches your cap. A pause stops all traffic at once.
Configure · API keys
Keys
| Key | Last used | Limits | Status |
|---|---|---|---|
| support-botrx_sk_Qm4xTz•••• | 2 min ago | gemini-2.5-flash$12,840.20 of $20,000.00 this month | Active |
| data-pipelinerx_sk_7hKdWa•••• | 4 min ago | gpt-4o-mini$9,346.15 of $12,000.00 this month | Active |
| code-reviewrx_sk_Vt2pGe•••• | 11 min ago | claude-sonnet-5, gpt-4o$7,205.10 of $10,000.00 this month | Active |
| docs-searchrx_sk_c9ZeLu•••• | 26 min ago | gemini-2.5-flash$4,118.35 of $8,000.00 this month | Active |
| sales-botrx_sk_Ha6wPo•••• | 1 h ago | claude-sonnet-5$3,402.80 of $6,000.00 this month | Active |
| ci-testsrx_sk_Xy3nBv•••• | 3 h ago | gpt-4o-mini$1,500.00 of $1,500.00 this month | Active |
| old-prototyperx_sk_Lb8rJs•••• | Oct 12, 14:22 | gpt-4o$0.00 of $500.00 this month | Revoked |
Govern · Guardrails & policy
Organization controls
- Two-step verification
- Required
- Images in requests
- Refused (default)
- Data residency
- Enforced: EU
- Monthly cost cap
- $60,000.00
- Models per API key
- Only specific models
- All traffic
- Serving
Paused. Every chat request is refused with HTTP 503 until traffic is resumed.
Refused this month
Observe · Spend & savings
Spend this month
By model
- claude-sonnet-5$16,720.4044%
- gpt-4o-mini$9,374.1524%
- gemini-2.5-flash$7,946.1521%
- gpt-4o$4,371.9011%
By API key
Routing and cost
Send work to lower-cost models, by your rules.
Your rules decide which work goes where. Repeated questions can come from cache at $0, and each request records why its model was chosen.
Supported providers: OpenAI, Anthropic, Google Gemini, Vertex AI, AWS Bedrock, Azure OpenAI, Groq, DeepSeek, Mistral, Cerebras, Ollama and services that use the OpenAI request format.
Govern · Guardrails & policy
Routing rules
| Applies to | When | Sends to | Priority | Matched |
|---|---|---|---|---|
| CodingAPI key code-review | complexity ≥ 7 | anthropic:claude-sonnet-5 | 1 | 412,880requests |
| Business taskAPI key support-bot | complexity ≤ 3 | gemini:gemini-2.5-flash | 2 | 386,204requests |
| DocumentsAPI key data-pipeline | complexity ≤ 5 | openai:gpt-4o-mini | 3 | 218,946requests |
| ChatAPI key sales-bot | Always | anthropic:claude-sonnet-5 | 4 | 94,310requests |
| DocumentsAPI key docs-search | Always | gemini:gemini-2.5-flash | 5 | 81,527requests |
| CodingAPI key ci-tests | Always | openai:gpt-4o-mini | 6 | 27,640requests |
Overview
Recent requests
| Time | Model | Cost | Outcome |
|---|---|---|---|
| just now | gemini-2.5-flash | $0.0004 | Served |
| just now | gemini-2.5-flash | $0.00 | From cache |
| 1 min ago | claude-sonnet-5 | $0.0183 | Served |
| 1 min ago | gpt-4o-mini | $0.0011 | Served |
| 1 min ago | gemini-2.5-flash | $0.00 | From cache |
| 2 min ago | claude-sonnet-5 | $0.0126 | Served |
| 2 min ago | gpt-4o | $0.0092 | Served |
| 3 min ago | gpt-4o-mini | $0.00 | From cache |
Observe · Requests
Routing receipt
- Outcome
- Served
- Model
- gemini-2.5-flash
- Tier
- Everyday
- Tokens
- 1,040 in · 36 out
- Cost
- $0.0004
Why this model
- Routing rule matched (api key scope): gemini:gemini-2.5-flash
- Classified as enterprise task
- Complexity 2
Proof for auditors
Records someone outside your team can check.
With data location rules on, a blocked request gets a signed receipt. Decisions, data location refusals and policy changes export as one pack that auditors can check without installing RouterX.
Receipts are checked with your public key. Pack signing needs a key to be set, and checking a pack’s signature needs that key, Python and the verifier script that ships with RouterX.
Your terminal
verify_evidence_pack.py
$ python verify_evidence_pack.py pack.json --signing-key "$KEY" --residency-public-key residency.pub
[chain] OK -- Chain verified: 16 records, final hash f8ec4b43eb38…
[signature] OK -- Signature verified.
[receipts] OK -- 1 residency denial receipt(s) verified against the out-of-band public key you supplied
$ python verify_evidence_pack.py pack-edited.json --signing-key "$KEY" --residency-public-key residency.pub
[chain] FAILED -- Record 4 (routing_decision/e9f4389c…): content hash mismatch -- record was altered after export.
[signature] OK -- Signature verified.
[receipts] OK -- 1 residency denial receipt(s) verified against the out-of-band public key you supplied
$ python verify_evidence_pack.py pack-rechained.json --signing-key "$KEY" --residency-public-key residency.pub
[chain] OK -- Chain verified: 16 records, final hash acf19fc33cc9…
[signature] FAILED -- Signature does not match -- wrong key, or the final_hash was altered after signing.
[receipts] OK -- 1 residency denial receipt(s) verified against the out-of-band public key you supplied
- Original pack
- Passed, exit 0
- One record edited
- Chain failed, exit 1
- Edited, chain rebuilt
- Signature failed, exit 1
Govern · Compliance
Residency refusals
| When | Who | Required |
|---|---|---|
| Today 10:41 | data-pipeline | EU |
| Today 09:17 | sales-bot | EU |
Signed receipt
The signature checks out against this gateway’s public key.
{
"receipt_id": "5a1e90c7…",
"jws": "eyJhbGciOiJFZERTQSIs…",
"verified": true,
"decoded_payload": {
"required_regions": ["EU"],
"offered_providers": [{
"provider": "anthropic",
"region": "US"
}],
"application": "data-pipeline"
}
}
The caller gets HTTP 451 with the error no_provider_meets_residency. The receipt is signed with Ed25519.
Govern · Compliance
Evidence pack
Routing decisions, the audit trail and data location refusals for the days chosen, as one hash chain.
- Days
- Oct 1 to Oct 31
- Routing decisions
- 1,284,906
- Data location refusals
- 312
- Policy changes
- 9
- Audit events
- 1,418
- Hash chain
- Verified
- Signature
- Verified
Security and setup
Runs on your servers. Connects in two lines.
No telemetry, and it works without internet as long as your AI provider is reachable.
Apps using OpenAI’s client only need a new address and key.
Configure · API keys
Connect an application
from openai import OpenAI
client = OpenAI(
base_url="https://your-server/api/v1",
api_key="rx_sk_...",
)
reply = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "Hello"},
],
)
print(reply.choices[0].message.content)
Govern · Members
Sign-in
- Single sign-on
- OpenID Connect
- Two-step verification
- Required
- Roles
- Owner, Admin, Developer, Viewer
- API keys
- Own budget and model list
Single sign-on with OpenID Connect, tested with Google and Keycloak. Two-step sign-in can be required.
On every request
Before it reaches a provider
Your app sends
Ask Anna (anna@example.com) to refund card 4242 4242 4242 4242. She called from 203.0.113.7 at 12 Harbour Road.
The provider receives
Ask Anna ([EMAIL_0]) to refund card [CARD_0]. She called from [IP_0] at 12 Harbour Road.
Emails, phone numbers, card numbers, US Social Security numbers, common API key formats and IPv4 addresses are masked in text. Names and street addresses are not, and unusual formats can be missed.
Want to see it with your own rules?
Contact us on LinkedInLicensed per organization. RouterX has not yet been independently audited.