Model Gateways & Routers arenaModel Gateways & Routers
Unified LLM gateways and routers that put one API in front of many model providers, judged on routing and fallback resilience, cost tracking and budgets, caching, key management, observability, streaming and tool-call fidelity, and how well agents can switch models and provision access programmatically.
50 user stories · 350 judged cells · updated 2026-09-14 · Evidence as of 2026-09-14
Leaderboard — every product ranked by evidenceLeaderboard
| 1 | subscription-flat vs OpenRouter ↗ | 61/100 | untested | 0/100 | 39/100 | 18/100 | ★ 58.7k▲ 18.7k/yrpypi 19.5M/wk | free tier | 17/32 verified · 1 disputed | 33/100 integrity | ||
| 2 | usage-based vs LiteLLM ↗ | 48/100 | 24/100 | 49/100 | 10/100 | untested | npm 2M/wk | 5%gateway fee | 31/32 verified | 93/100 integrity | ||
| 3 | usage-based vs LiteLLM ↗ | 41/100 | untested | 33/100 | 16/100 | 14/100 | npm 17.4M/wk | 0%gateway fee | 15/30 verified · 1 disputed | 0/100 integrity | ||
| 4 | free-tier vs LiteLLM ↗ | 36/100 | 0/100 | 7/100 | 23/100 | 18/100 | ★ 13k▲ 4.2k/yrnpm 140.4k/wkpypi 961.6k/wk | $49/ month (entry plan) | 5/29 verified | 6/100 integrity | ||
| 5 | free-tier vs LiteLLM ↗ | 22/100 | untested | 23/100 | 10/100 | 21/100 | 5%gateway fee | 5/25 verified | 7/100 integrity | |||
| 6 | open-source vs LiteLLM ↗ | 47/100 | 0/100 | 0/100 | 15/100 | 15/100 | 5/30 verified | 8/100 integrity | ||||
| 7 | free-tier vs LiteLLM ↗ | 45/100 | 0/100 | 0/100 | 5/100 | 22/100 | 5%gateway fee | 6/24 verified | 0/100 integrity |
Best by user type — persona-weighted winnersBest by user type
Per persona, the product with the highest persona-weighted coverage over just that persona's stories — not the same ranking as the overall PA Score leaderboard above.
Best for platform-engineer
Portkey
70/100
Runner-up:
Vercel AI Gateway (66/100)
9 platform-engineer stories scored
Story matrix — every product × every judged storyStory matrix
Agenticness — how well agents can access and operate the productAgenticness
Agent access
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productPoint an agent at llms.txt or agent-oriented docs | ai-native | fullT 9/10 | fullT 8/10 | fullT 8/10 | fullT 9/10 | partialT 5/10 | fullT 8/10 | fullT 8/10 |
| Agenticness — how well agents can access and operate the productRun the product headlessly / in CI for automation | ai-native | fullT 7/10 | partialT 6/10 | partialC 5/10 | fullT 8/10 | partialC 6/10 | partialC 6/10 | partialT 6/10 |
| Agenticness — how well agents can access and operate the productPlug MCP servers into this product so it can use their tools | ai-native | none 0/10 | fullC 8/10 | partialC 6/10 | none 0/10 | n/a | fullC 7/10 | partialC 6/10 |
| Agenticness — how well agents can access and operate the productConnect an agent via an official MCP server | ai-native | fullT 8/10 | fullC 7/10 | none 0/10 | none 0/10 | none 0/10 | fullC 7/10 | fullC 8/10 |
| Agenticness — how well agents can access and operate the productUse an official CLI | ai-native | none 0/10 | partialT 6/10 | partialC 3/10 | partialC 3/10 | none 0/10 | none 0/10 | fullT 7/10 |
| Agenticness — how well agents can access and operate the productDrive the product through a documented public API | ai-native | fullT 10/10 | fullT 7/10 | fullT 8/10 | fullT 9/10 | fullT 7/10 | fullT 8/10 | partialT 6/10 |
| Agenticness — how well agents can access and operate the productIssue scoped/least-privilege API credentials for an agent | ai-native | partialX 7/10 | fullX 8/10 | partialC 7/10 | partialC 5/10 | none 0/10 | none 0/10 | partialC 5/10 |
| Agenticness — how well agents can access and operate the productBuild against official SDKs | ai-native | partialT 5/10 | fullX 8/10 | partialT 6/10 | fullT 8/10 | partialC 5/10 | partialT 5/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productSubscribe to events via webhooks | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | n/a |
Agentic features
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productGet AI-generated insights and suggestions from my data inside the product | ai-native | n/a | n/a | none 0/10 | n/a | n/a | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productSet up automations that run autonomously in the background | ai-native | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| Agenticness — how well agents can access and operate the productDelegate tasks to a built-in AI assistant inside the product | ai-native | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| Agenticness — how well agents can access and operate the productOperate the product with natural-language commands | ai-native | partialT 4/10 | n/a | none 0/10 | n/a | n/a | n/a | none 0/10 |
Api quality
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productExplore an interactive API reference with runnable examples | ai-native | fullT 8/10 | none 0/10 | partialT 4/10 | partialT 5/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productDownload a machine-readable API spec (OpenAPI or equivalent) | ai-native | fullT 9/10 | none 0/10 | none 0/10 | fullT 7/10 | fullT 8/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productTest against a sandbox environment without touching production data | ai-native | none 0/10 | none 0/10 | none 0/10 | n/a | none 0/10 | n/a | none 0/10 |
| Agenticness — how well agents can access and operate the productRely on versioned APIs with a documented deprecation policy | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
Automation depth — how much of the product can run unattendedAutomation depth
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Automation depth — how much of the product can run unattendedPerform bulk operations across many items at once | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Automation depth — how much of the product can run unattendedDefine rules that trigger actions automatically on events | ai-native | none 0/10 | partialC 5/10 | partialC 6/10 | partialC 4/10 | partialC 6/10 | partialC 6/10 | partialC 5/10 |
| Automation depth — how much of the product can run unattendedSchedule recurring jobs or workflows | ai-native | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
| Automation depth — how much of the product can run unattendedVersion, review, and roll back my automations | ai-native | n/a | n/a | none 0/10 | n/a | partialC 3/10 | n/a | none 0/10 |
Caching performance — stories about caching performance in this arenaCaching performance
Caching
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Caching performance — stories about caching performance in this arenaCache responses at the gateway to cut cost and latency on repeated requests | developer | fullC 7/10 | fullC 8/10 | fullC 9/10 | partialX 6/10 | fullC 9/10 | fullC 8/10 | fullC 8/10 |
Latency
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Caching performance — stories about caching performance in this arenaRun traffic through gateway infrastructure that adds minimal latency overhead to provider calls | platform-engineer | partialX 5/10 | partialX 4/10 | partialC 4/10 | partialC 4/10 | none 0/10 | partialC 5/10 | partialC 5/10 |
Cost controls — stories about cost controls in this arenaCost controls
Agent guardrails
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Cost controls — stories about cost controls in this arenaGive an autonomous agent its own key with budget and rate guardrails so it cannot run away on spend | ai-native | fullX 8/10 | fullC 8/10 | fullC 8/10 | partialX 6/10 | partialC 5/10 | none 0/10 | partialC 6/10 |
Budgets
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Cost controls — stories about cost controls in this arenaSet hard budgets and spend limits per key, team, or user | platform-engineer | partialX 6/10 | fullC 9/10 | fullC 9/10 | fullC 8/10 | partialC 5/10 | none 0/10 | partialC 5/10 |
Spend tracking
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Cost controls — stories about cost controls in this arenaTrack spend per model, key, team, or user across all providers in one place | platform-engineer | partialX 6/10 | fullC 9/10 | fullC 7/10 | fullC 8/10 | partialC 6/10 | partialC 6/10 | partialC 7/10 |
Key management — stories about key management in this arenaKey management
Byok
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Key management — stories about key management in this arenaBring my own provider API keys and have the gateway use them for my traffic | developer | fullX 9/10 | partialC 6/10 | fullC 8/10 | disputedD 5/10 | fullC 8/10 | fullC 8/10 | partialC 6/10 |
Programmatic admin
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Key management — stories about key management in this arenaProvision gateways, keys, and budgets programmatically through an admin API | ai-native | partialX 6/10 | disputedD 5/10 | none 0/10 | none 0/10 | partialT 4/10 | none 0/10 | partialC 5/10 |
Virtual keys
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Key management — stories about key management in this arenaMint gateway-managed keys for teams and apps without exposing raw provider keys | platform-engineer | fullX 8/10 | partialX 7/10 | fullC 8/10 | fullC 7/10 | none 0/10 | none 0/10 | partialC 6/10 |
Observability — seeing what the system is doing — logs, metrics, traces, alertsObservability
Integrations
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Observability — seeing what the system is doing — logs, metrics, traces, alertsExport gateway logs and traces to my own observability stack | developer | none 0/10 | fullC 8/10 | none 0/10 | partialC 5/10 | none 0/10 | none 0/10 | fullC 8/10 |
Logs
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Observability — seeing what the system is doing — logs, metrics, traces, alertsInspect logged requests and responses with latency, token counts, and cost attached | platform-engineer | none 0/10 | partialC 6/10 | partialC 5/10 | fullC 8/10 | fullC 9/10 | partialC 6/10 | fullC 8/10 |
Openness — open source, data portability, and self-hosting storiesOpenness
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Openness — open source, data portability, and self-hosting storiesDo everything through the API that I can do in the UI | ai-native | partialT 6/10 | partialT 6/10 | partialT 5/10 | partialT 6/10 | partialT 6/10 | partialT 4/10 | partialT 5/10 |
| Openness — open source, data portability, and self-hosting storiesExport all of my data in open formats and leave | ai-native | none 0/10 | none 0/10 | none 0/10 | partialX 5/10 | none 0/10 | none 0/10 | none 0/10 |
| Openness — open source, data portability, and self-hosting storiesRead the product's source under an open license | ai-native | none 0/10 | partialX 4/10 | partialC 5/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Openness — open source, data portability, and self-hosting storiesSelf-host the core product | ai-native | n/a | fullX 9/10 | partialC 6/10 | none 0/10 | n/a | none 0/10 | partialC 5/10 |
Privacy posture — data-handling and privacy storiesPrivacy posture
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Privacy posture — data-handling and privacy storiesChoose where my data is stored (region/residency) | ai-native | partialX 6/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | partialC 6/10 | partialC 3/10 |
| Privacy posture — data-handling and privacy storiesPrevent my data from being used to train AI models | ai-native | partialX 6/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Privacy posture — data-handling and privacy storiesControl data retention and deletion | ai-native | partialX 5/10 | partialC 5/10 | none 0/10 | none 0/10 | partialC 6/10 | none 0/10 | none 0/10 |
| Privacy posture — data-handling and privacy storiesOpt out of telemetry and usage tracking | ai-native | partialX 4/10 | none 0/10 | none 0/10 | none 0/10 | partialC 5/10 | none 0/10 | none 0/10 |
Routing resilience — stories about routing resilience in this arenaRouting resilience
Fallbacks
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Routing resilience — stories about routing resilience in this arenaConfigure automatic fallback to another model or provider when one fails | platform-engineer | fullX 9/10 | fullX 9/10 | fullC 9/10 | fullC 9/10 | fullC 9/10 | fullC 8/10 | partialC 5/10 |
Load balancing
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Routing resilience — stories about routing resilience in this arenaLoad-balance traffic across providers, deployments, or keys by weight, latency, or cost | platform-engineer | fullX 7/10 | partialC 5/10 | fullC 8/10 | partialC 6/10 | partialC 6/10 | partialC 6/10 | partialC 6/10 |
Policy routing
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Routing resilience — stories about routing resilience in this arenaMy agent can switch models mid-task by policy — cost, capability, or availability — through gateway routing rules | ai-native | fullX 8/10 | fullX 7/10 | fullC 8/10 | partialX 7/10 | fullC 8/10 | fullC 8/10 | partialC 5/10 |
Rate limits
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Routing resilience — stories about routing resilience in this arenaSmooth provider rate limits by spreading traffic across keys and queuing or throttling requests | platform-engineer | partialX 5/10 | fullC 7/10 | fullC 8/10 | partialC 4/10 | partialC 6/10 | partialC 5/10 | partialC 6/10 |
Retries
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Routing resilience — stories about routing resilience in this arenaSet automatic retry policies for transient provider errors | platform-engineer | partialX 7/10 | fullC 7/10 | fullC 8/10 | fullC 8/10 | fullC 8/10 | partialC 6/10 | partialC 4/10 |
Streaming tools — stories about streaming tools in this arenaStreaming tools
Streaming
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Streaming tools — stories about streaming tools in this arenaStream token-by-token responses through the gateway from any provider | developer | fullX 8/10 | fullX 7/10 | none 0/10 | partialC 5/10 | none 0/10 | partialC 4/10 | fullC 8/10 |
Tool calling
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Streaming tools — stories about streaming tools in this arenaRequest structured JSON-schema outputs across providers | developer | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | fullC 8/10 | none 0/10 |
| Streaming tools — stories about streaming tools in this arenaMake tool and function calls across different providers with a consistent schema | developer | fullX 8/10 | fullX 8/10 | partialC 5/10 | fullT 8/10 | partialC 5/10 | partialC 6/10 | partialC 6/10 |
Unified api — stories about unified api in this arenaUnified api
Catalog
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Unified api — stories about unified api in this arenaBrowse or query a catalog of available models with pricing and context-window metadata | developer | fullT 9/10 | none 0/10 | partialC 5/10 | fullT 9/10 | none 0/10 | none 0/10 | none 0/10 |
Compatibility
| Story | Persona | |||||||
|---|---|---|---|---|---|---|---|---|
| Unified api — stories about unified api in this arenaPoint existing OpenAI-compatible code at the gateway by changing only the base URL and key | developer | fullT 9/10 | fullX 8/10 | fullC 9/10 | fullT 9/10 | fullC 8/10 | fullT 8/10 | partialC 6/10 |
Adjacent arenas — categories often shopped togetherAdjacent arenas
Shopping this category often means shopping these too.