OpenAI-compatible · one base URL

Point your OpenAI SDK here. The spend cap is already on.

Change two lines and your AI traffic runs through a gateway that meters every token and is allowed to refuse. Route to Claude on our key, to your own keys across 11 providers at zero markup, or to any endpoint you host — all on the Parsons project key you already have.

$15/mo or $150/yr · 14-day free trial, cancel any time
One subscription covers every Parsons product, in unlimited projects.
the entire migration
from openai import OpenAI client = OpenAI( - base_url="https://api.openai.com/v1", - api_key=os.environ["OPENAI_API_KEY"], + base_url="https://ai-gateway.parsons.ai/v1", + api_key=os.environ["PARSONS_KEY"], # sk_live_… ) # same call, same shape, same error envelope client.chat.completions.create( model="anthropic/claude-sonnet-5", …)
managed spend · this periodcap $5.00
checked before the upstream callhard stop
HTTP 402
{"error":{
  "message":"monthly managed spend cap reached ($5.00)
   — raise it via the admin MCP (set_spend_cap)",
  "type":"insufficient_quota",
  "code":"spend_cap_exceeded"}}
Why you're reading this at 2am

Nothing was down. Something was running.

An AI feature doesn't fail the way the rest of your stack fails. It doesn't throw, it doesn't page you, and it doesn't stop. It retries, it re-reads a long context, it loops — and every attempt is billable. Your health check stays green the entire time, because from the outside nothing is broken.

Uptimeyour monitor
Spendnobody's monitor
00:0004:0008:00
Illustrative — the shape, not a measurement. Two hundred green checks and one bill. The instrument that would have caught this doesn't live in your monitoring; it lives wherever the money is.
It failed expensively, not loudly
A retry loop is indistinguishable from healthy traffic. There is no error rate to alert on, because there are no errors.
The invoice can't be broken down
One key, one provider account, one total. Which customer, which feature, which background job — the bill doesn't know and neither do you.
The cap was never turned on
A ceiling you have to go and configure is a ceiling that gets configured the week after the incident that taught you to. Nobody schedules that afternoon in advance.
The turn

A gateway that is allowed to say no.

Dashboards observe. This one intervenes. Every managed request walks five checks before a single byte reaches a provider, and any one of them can end the request with a status code your client already knows how to read.

01
Rate limit
300 req/min
per project
02
Managed switch
on / off
per project
03
Member budget
when a teammate
is the caller
04
Wallet ladder
suspension → entitlement
→ caps → balance
05
Project spend cap
$5.00 default
strongly consistent
then
the provider

When a check refuses, the provider is never called. There is no token to pay for and nothing to ask for a refund on.

402
spend_cap_exceeded
The project's monthly ceiling in billed dollars. Default $5.00, settable $0–$10,000.
402
credits_exhausted
The prepaid wallet is empty. Top up and the same request works.
402
member_cap_exceeded
A teammate on a shared project hit their own monthly budget. Everybody else keeps working.
402
entitlement_denied
Account standing — a lapsed or suspended subscription, not a spend problem.
403
managed_disabled
Managed routing is switched off for this project. Your own keys still route.
429
rate_limit_error
300 requests per minute, per project. Published, not discovered.

Distinct codes on purpose: a client can tell "out of quota" from "provider is down" and stop retrying into a wall.

One URL, three routes

The model string decides everything.

There is no second endpoint, no routing config file and no proxy to stand up. The gateway reads {provider}/{model} and resolves the route in that order: a registered endpoint slug of yours wins, then a provider you've stored a key for, then our managed allowlist.

Mix all three in the same project, from the same key, in the same afternoon.

POST /v1/chat/completions · GET /v1/models · GET /v1/chat/credits
"model":"anthropic/claude-sonnet-5"
ManagedAnthropic today — 6 Claude models
Bring nothing. The gateway calls Anthropic on our key and prices the call from the published per-token rate.
key: oursbilled: provider cost × 1.5drawn from: your prepaid wallet
BYOKmarkup 0.00% · 0 credits drawn
Store your own provider key once. Eleven providers, any model they carry — your provider bills you directly, and we take nothing on the tokens.
key: yours, encryptedbilled: by your providerwe still meter: every request
BYOMmarkup 0.00% · 0 credits drawn
Register any OpenAI-compatible endpoint under a slug — your own vLLM box, a studio deployment, an internal service. It becomes a model id on this URL.
key: yours or nonebilled: by nobody but youmodels: anything it serves

An unknown model on the managed path returns 404 model_not_found — we refuse to serve what we can't price.

The managed allowlist

Six models, priced in the open.

The zero-setup path, and we'd rather show you the whole catalogue than imply it's bigger than it is. Managed routing serves Anthropic only. Everything else on earth reaches this URL through your own key or your own endpoint.

Model idProvider cost, inputProvider cost, outputYou pay
anthropic/claude-fable-5$10.00 / 1M tok$50.00 / 1M tok× 1.5
anthropic/claude-opus-5$5.00 / 1M tok$25.00 / 1M tok× 1.5
anthropic/claude-opus-4-8$5.00 / 1M tok$25.00 / 1M tok× 1.5
anthropic/claude-sonnet-5$3.00 / 1M tok$15.00 / 1M tok× 1.5
anthropic/claude-sonnet-4-6$3.00 / 1M tok$15.00 / 1M tok× 1.5
anthropic/claude-haiku-4-5$1.00 / 1M tok$5.00 / 1M tok× 1.5

Managed calls are billed at provider cost × 1.5 and drawn from a prepaid balance — not invoiced after the fact. That multiple is the price of using our key, our contract and our gate with nothing of your own to set up. The moment it stops being worth it, store your own key and the multiple goes to zero. Old model ids stay listed rather than silently redirecting: dropping one would be a hard 404, never a quiet downgrade.

Bring your own key

Eleven providers. Zero percent.

Store a provider key once and that provider routes on your account. We add no markup to the tokens and draw nothing from your wallet — but we still meter every request, still enforce your rate limit, and still show you the same per-key breakdown and full request log as managed traffic.

If you already have provider contracts, this is the whole product: routing, key custody, metering and attribution, with the inference bill untouched.

anthropic
markup 0.00%
openrouter
markup 0.00%
openai
markup 0.00%
google-ai-studio
markup 0.00%
groq
markup 0.00%
mistral
markup 0.00%
xai
markup 0.00%
deepseek
markup 0.00%
together
markup 0.00%
fireworks
markup 0.00%
cerebras
markup 0.00%

OpenRouter is on that list. One stored key and every model OpenRouter carries becomes addressable through this URL — with nothing taken by us on the way past.

set_provider_key · list_provider_keys · delete_provider_key
BYOK · what the gateway adds to the bill
tokens, billed by your providertheir invoice
gateway markup on inference0.00%
credits drawn from your wallet0
fee to put money on account$0.00
per-seat charge$0.00
extra project / workspace charge$0.00
What we charge for BYOK traffic$0.00
You still get the full request log, per-key attribution, encrypted key custody and the 300 req/min limiter — all of it inside the subscription, none of it billed against the traffic.
AES-256-GCM at rest · decrypted only inside the proxy call · never echoed back
Bring your own model

If it speaks OpenAI, it gets a slug.

Register any OpenAI-compatible base URL under a name of your choosing. From that moment it is a model id on the same endpoint, with the same key, the same logs and the same request-id — indistinguishable from every other route to the code calling it.

Self-hosted vLLM, an inference box in your own VPC, a studio deployment, a colleague's fine-tune. Anything you can reach, you can address here.

add_byom_endpoint · list_byom_endpoints · delete_byom_endpoint

Provider names are rejected at registration, so a slug can never shadow a real provider prefix.

add_byom_endpoint
{ "slug": "my-vllm", "baseUrl": "https://infer.example.com/v1", "apiKey": "sk-…" // optional, encrypted }
GET /v1/models
anthropic/claude-sonnet-5parsons-managed
anthropic/claude-haiku-4-5parsons-managed
openai/*byok:openai
my-vllm/*byom

The managed six are listed by id, because we price them. A key or an endpoint you brought is listed as a wildcard — openai/* — because every model behind it is yours to name, and we're not going to pretend to curate a catalogue we don't maintain.

Streaming

Your stream, byte for byte.

A gateway that buffers your response to count it has taken your first-token latency and spent it on bookkeeping. This one doesn't. The upstream body is split in two: your client gets an untouched pass-through, and the second branch is read for usage after your response has already finished.

You never set stream_options — on the managed and BYOK paths the gateway asks the provider to include usage on your behalf, and peels it off where you can't feel it.

x-request-id on every proxied response · 120s upstream timeout → 502 upstream_error
track Awhat the provider sent
track Bwhat your client got
track C · off the hot pathmetering, after your last chunk

Tracks A and B land in the same frame because they are the same bytes. Track C is the usage row, the spend counter and the billing event — all after the response is closed.

Attribution

Which caller spent the money.

One provider key gives you one total. Here you mint a named key per caller — prod-backend, ci, nightly-digest — and every request is tagged with the prefix that authenticated it. The console rolls the month up by key, so "what is the nightly job costing us" is a question with an answer rather than a guess.

console · usage by key GET /api/console/usage-by-key
labelprefixrequestsin tokout tokbilled
prod-backendsk_live_9f3a…18,4024,110,882903,517$27.41
nightly-digestsk_live_2c71…7441,982,004122,860$9.06
cisk_live_be05…1,23688,41021,077$0.42
illustrative figures · one row per request underneath · filter by model · mode · status · origin · cursor-paginated

Every request writes one row, and the row carries all of it:

modelmodeprompt_tokenscompletion_tokenscache_creation_input_tokenscache_read_input_tokenscost_microusdstatuslatency_mskey_prefixuser_idat

BYOK and BYOM requests are logged in full too — same columns, same filters — they simply emit no billing event. user_id is the row's slot for an end user and is filled when a call arrives from a signed-in chat session; a request made with a project key over /v1/chat/completions has no signed-in human behind it, so it logs NULL.

Prompt caching

Priced the way Anthropic bills it.

If you re-send a long system prompt on every turn, the difference between a gateway that flat-rates your input tokens and one that reads the real cache counters is most of your bill.

We take cache_creation_input_tokens and cache_read_input_tokens straight off the provider's own usage object and re-price them: writes at 1.25× the input rate, reads at 0.10×. Not estimated, not averaged, not rounded to whole input tokens.

one turn · anthropic/claude-sonnet-5 · 200,000 in · 800 out
plain input · 40,000 tok × $3.00/1M$0.1200
cache read · 160,000 tok @ 0.10× rate$0.0480
output · 800 tok × $15.00/1M$0.0120
Provider cost$0.1800
managed, at × 1.5$0.2700
Without cache pricing the same turn's input alone would be $0.6000.
A cache write costs 1.25× — you pay a little more once to pay a tenth thereafter.

Drag the slider. The receipt recomputes from the published per-token rates, the same arithmetic the gateway runs.

Key custody

Keys you can actually kill.

Your Parsons project key is the API key — there is no second credential to invent, exchange or rotate separately. Mint as many named keys as you have callers, with a label of your choosing, and the full value crosses the wire exactly once.

Revocation is by prefix and takes effect on the next request. No grace window, no propagation delay, no "it may take up to 15 minutes".

whoami · get_config · set_spend_cap · set_managed_enabled · set_credits_enforced
shown oncesk_live_9f3a04c7e1b6…d02f
active expiring · 14-day window expired hash-stored label 1–64 chars
POST /v1/chat/completions200
POST /v1/chat/completions200
POST /v1/chat/completions200
no overlap window
Drive it from your AI

Twenty tools. No dashboard required.

The whole gateway is addressable from Claude, ChatGPT or Cursor — caps, provider keys, custom endpoints, credits, usage, and a live test completion that runs through the identical routing, gating and metering as production traffic.

Every mutation writes an audit row, including the ones that fail. The console mirrors each tool one-for-one, so it is the same surface either way.

one connection · minted for you at sign-inGET YOURS
Works anywhere that speaks MCP. Every tool re-verifies that you own the project it is pointed at, and the money-issuing ones require platform-admin on top of that.
Cap the marketing project at $20 and run a test completion on Haiku.
set_spend_cap test_chat recent_activity
Cap set to $20.00/month. The test call on anthropic/claude-haiku-4-5 went through the live managed path and came back 200, with its tokens, latency and cost on the usage row like any other request. Audit rows written for set_spend_cap and test_chat.
docsget_creditsgrant_creditsset_credit_balanceset_auto_reloadset_credits_enforcedset_managed_enabledset_provider_keylist_provider_keysdelete_provider_keyadd_byom_endpointlist_byom_endpointsdelete_byom_endpointlist_modelsget_usageget_configwhoami

The docs tool serves the same bytes as the public quickstart, so an agent reads the real integration guide instead of guessing at the API. set_auto_reload is on that list and answers by refusing — the rail is parked, and nothing on this platform tops your balance up on its own. grant_credits and set_credit_balance are operator levers that require platform-admin, not project ownership.

Proof, without borrowed logos

We ship on it before you do.

Fourteen production workers bind this service — the apps we sell and the services they run on, named below. Not a reference integration, not a demo project. When the gate is wrong, our own apps stop first.

money
crm
journal
fitness
radar
music
tracker
parsons-ai-gateway  ·  ai-gateway.parsons.ai/v1
assistants
phone
sms
email
social
mcp-hub
cloud

Our own money app's AI runs through this gate. That is the only trust signal on this page, and it is the one we can actually stand behind.

The honest ledger

Six rows here go against us.

A comparison that only flatters the seller is a comparison you can't use. Here is where this gateway is the wrong choice, stated as plainly as where it's the right one.

Where we lose
Managed traffic carries a 1.5× multiple
Gateways that make their money on throughput can run inference at zero markup. We charge for access instead — and BYOK is the escape hatch, at 0.00%.
Six managed models, Anthropic only
Not hundreds. "Every model" is true here only through your own key or your own endpoint, and we'd rather say so than bury it.
No cross-provider auto-failover
If a provider is down, the call returns 502 upstream_error and your code decides what to do. We don't silently re-route you to a model you didn't pick.
No response cache
We price Anthropic's prompt cache correctly. We do not run a semantic or response cache in front of the provider.
Chat completions only
No embeddings, images, audio or video endpoints. This is a governor for chat traffic, not a full modality surface.
Not self-hostable
You can't run this in your own VPC. If that's a hard requirement, an open-source proxy is the honest answer — and a Postgres, a Redis and an on-call rotation is the real price of it.
Where we win
The cap is on before you ask
$5.00 per month per project by default, enforced against a strongly-consistent counter checked before the upstream call — not an alert emailed after it.
0.00% on BYOK, and no funding fee
No cut of your inference, and no percentage taken when you put money on account. Access is what you're paying for; the traffic isn't.
Cache reads billed at a tenth
Anthropic's own cache_read_input_tokens are re-priced at 0.10× the input rate and writes at 1.25×, per request — not flat-rated as ordinary input.
No second vendor, no second key
sk_live_… is the key you already have. One account, one bill, one place to revoke.
Unlimited projects, at no extra cost
Each with its own data, members, keys and spend cap. Nothing here is priced per workspace, per org or per seat.
Twenty MCP tools and public docs
Configure it by conversation, and point an agent at /docs — unauthenticated, the same bytes the docs tool serves.

Rate limit: 300 requests per minute, per project. Upstream timeout: 120 seconds, then a clean 502. Published, because a limit you have to discover is a limit you find out about badly.

Pricing

One plan, two intervals, and what it actually buys.

The subscription is access — to this gateway and to every other Parsons product, in as many projects as you want. Consumption is separate, prepaid, and capped by you. Past an included allowance you keep going — the overage draws from the same prepaid balance at roughly cost × 1.5. Nothing arrives as a surprise invoice, because nothing is invoiced after the fact.

Base
$15 / month
or $150 / year — two months free
  • Every Parsons product — gateway, auth, database, deploy, storage, email, scheduler and the rest
  • Unlimited projects — each with its own keys, members and spend cap
  • No monthly request allowance on the gateway — you pay for tokens, not for calls (300 req/min per project)
  • The included allowances — Deploy 10M CPU-ms, 1M requests, 1 GB app storage · Database 1 GB, 100M rows read, 1M rows written · Storage 5 GB · Email 200 sends/day · Scheduler 20,000 fires
  • Managed spend cap of $5.00 per month per project by default, settable $0–$10,000
  • Named keys, per-key spend attribution, and a filterable row for every request
AI is consumption, and consumption is prepaid.
Managed tokens don't ride the subscription — they draw from a balance you put money on first. That is the whole reason a runaway job can't produce a five-figure invoice here: there was never an invoice, only a balance, and the gate reads it before the request leaves.
managed rate
provider cost × 1.5
Drawn from the prepaid balance, per request, at the published per-token rate — or bring your own key at 0%, always.
top-ups
$1 – $500 per charge
Self-serve against your saved card. Nothing auto-charges — there is no auto-reload, by design.
starter credit
$2, once per account
Seeded automatically on first managed spend, so managed models work the moment you subscribe.
Unlimited projects. Watch the price. subscription: $15.00 / month
acme-prod
cap $5.00 · 3 keys
acme-staging
cap $5.00 · 1 key
side-project
cap $5.00 · 1 key

A separate project per business, or one for work and one for yourself — separate data, separate members, separate spend caps, separate keys. Add as many as you like; the number above does not move. There is no workspace tier here, because there is no workspace to sell you.

The request log alone is usually the bill
Portkey Production is $49 a month and Helicone Pro $79 — for the logging layer alone (their published pricing, August 2026). Here the request log, per-key attribution, encrypted key custody and a gate that can actually refuse are inside the subscription.
Nothing is priced per seat or per project
Rivals monetise exactly those — seats, orgs, workspaces. Add the fifth teammate and the twentieth project here and the subscription line does not move. Unlimited projects, each with its own data, members, keys and cap, are part of the same number.
Consumption never hides in the subscription
AI tokens, voice minutes and phone numbers are prepaid, capped by you and billed separately. The access fee is not a loss-leader hiding a metered bill: a runaway job stops at your cap instead of arriving as an invoice next month.

14-day free trial on your first subscription · cancel any time · pay monthly or yearly — a year costs two months less · no free tier, no per-seat pricing, no enterprise tier

Straight answers

The questions people actually ask.

What happens, exactly, at the cap?

The request stops at the gate. The provider is never called, so there is no token to pay for. Your client receives a standard OpenAI error envelope, which means your existing SDK error handling surfaces it without changes.

HTTP/1.1 402{"error":{ "message":"monthly managed spend cap reached ($5.00) — raise it via the admin MCP (set_spend_cap)", "type":"insufficient_quota", "code":"spend_cap_exceeded"}}
Is BYOK really 0%? Including a fee to fund the account?

Yes. A BYOK or BYOM request is proxied on your key, logged in full, and emits no billing event at all — no markup on the tokens and nothing drawn from your prepaid balance. There is also no percentage taken when you top that balance up; a $20 top-up puts $20 on the balance.

The subscription is what pays for the routing, the key custody, the metering and the attribution.

Which models are on managed, and what's the markup?

Six, all Anthropic: claude-fable-5, claude-opus-5, claude-opus-4-8, claude-sonnet-5, claude-sonnet-4-6, claude-haiku-4-5. Managed calls bill at provider cost × 1.5 — with BYOK always available at 0%. Anything outside that list on the managed path returns 404 model_not_found rather than being served at a price we can't compute.

Do you buffer my stream?

No. The upstream body is teed: your client gets one branch untouched, and usage is read from the other after your response has closed. You don't set stream_options — the gateway adds include_usage upstream so the metering branch has something to peel.

What's the rate limit?

300 requests per minute, per project, on /v1/chat/completions. Exceeding it returns a 429 with the OpenAI rate_limit_error type and the limit stated in the message.

HTTP/1.1 429{"error":{"message":"rate limit exceeded (300 requests/min per project)", "type":"rate_limit_error"}}
Do I need a second API key?

No. Your Parsons project key — sk_live_… — is the API key. Pass it as a Bearer token, or as apiKey in any OpenAI SDK. You can mint additional named keys per caller for attribution and revocation, but they're the same kind of credential, issued by the same account.

What happens if the provider hangs?

Each upstream model call is bounded at 120 seconds. A timeout or an unreachable provider returns a clean 502 upstream_error rather than hanging until the platform's own wall clock kills it. Every response that reached the provider — the successes and the upstream failures alike — carries an x-request-id header for support. A request the gate refuses never got that far; it is identified by its error code instead.

Can I self-host it?

No. This runs on our infrastructure and there is no distribution you can deploy yourself. If self-hosting is a requirement, an open-source proxy is the right answer for you — just count the database, the cache and the on-call rotation as part of its price.

Can I delete my data?

Yes, and it's wired to account deletion rather than being a support ticket. The service exposes an internal purge that the platform's deletion orchestrator calls, erasing this service's rows for your project. Every read and write is project-scoped in the first place, and provider keys are AES-256-GCM encrypted at rest.

Is any of it free to keep using?

No — the trial, then you pay. The subscription is $15 a month or $150 a year; the yearly price is the monthly one with two months taken off. Your first subscription starts with a 14-day free trial you can cancel any time, and checkout does collect a payment method; we'd rather say that here than surprise you at the form. A one-time $2 starter credit is seeded on first managed spend so the models work immediately.

Two lines to point at it. One line to stop it.

$15/mo or $150/yr · 14-day free trial, cancel any time · every product, unlimited projects.