Choose OmniSwitch when…
- You want to operate a compact self-hosted control plane.
- You prefer local policy checks and a file-driven gateway configuration.
- You will map provider credentials and keys explicitly rather than import platform config.
Compare a secure self-hosted control plane, AI gateway routing, and agent protocol scope with Portkey. Evaluate the operating model before the feature list.
Updated · Public beta
OSS gateway; cloud shown separately. Register a8a594b; each cell records its own version and verified date. A capability review, not a benchmark.
No scores or totals: uneven documentation coverage is not a measure of product quality.
| Capability | OmniSwitch[1]Register a8a594b | Portkey[3]OSS gateway; cloud shown separately | Managed platformSeparate registered edition |
|---|---|---|---|
| Deployment & license | |||
| Self-hosted deployment | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| SQLite / Postgres storage | SupportedSQLite by default; PostgreSQL via OMNISWITCH_DATABASE_URL. Logs and keys remain SQLite-local even in the Postgres case per the project's own docs.
| Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Kubernetes manifests / Helm chart | SupportedKustomize manifests (Deployment/Service/ConfigMap/Secret example/PVCs/Redis) plus a Helm chart; no operator/CRDs/inference-aware routing.
| Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Config hot reload | SupportedConfig hot reload covers routes, guardrails, cache posture, circuit breaker, and shadow provider without restart.
| Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Built-in dashboard/UI | SupportedLocal dashboard for logs, metrics, prompts, providers, and guardrails.
| PartialDashboard/analytics are a hosted-platform feature; the OSS gateway container itself does not ship a bundled UI.
Dashboard/analytics are a hosted-platform feature; the OSS gateway container itself does not ship a bundled UI. | Managed onlyHosted analytics/logs/traces dashboard.
|
| License | Supported | SupportedMIT.
| Not availableClosed managed service (distinct from the MIT-licensed OSS gateway).
|
| APIs & providers | |||
| OpenAI-compatible chat completions | Supported/v1/chat/completions, streaming and non-streaming.
| SupportedUniversal REST/SDK API surface.
| Managed onlyUniversal REST/SDK API across models.
|
| OpenAI-compatible embeddings | Supported | SupportedDocumented multimodal/embeddings endpoint coverage.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| OpenAI Responses API | Partial/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI).
/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI). | Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Anthropic Messages API | Partial/v1/messages core subset. | Not verifiedAnthropic is a supported provider; Messages-API request shape parity not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Native (non-passthrough) provider adapters | Partial4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets.
4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets. | SupportedLarge managed provider/model catalog claimed (1600+ models).
| Managed onlyLarge managed provider/model catalog (1600+ models claimed).
|
| Custom/generic OpenAI-compatible endpoint | SupportedGeneric custom provider adapter with presets for Azure OpenAI, Ollama, vLLM, LiteLLM, DeepSeek, Together, Fireworks, and aliases.
| SupportedCustom hosts documented.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Routing, reliability & cost | |||
| Routing & fallbacks | Supportedroute-level fallbacks, max_retries, retry_backoff, retry_codes, per-attempt timeout.
| SupportedFallback, retries, and timeouts documented.
| Managed onlyFallback, retries, timeouts documented at the platform level.
|
| Weighted / load-balanced routing | SupportedWeighted variants per route.
| SupportedLoad balancing documented.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Conditional routing (rule/expression based) | SupportedCEL condition expressions on route variants.
| SupportedConditional routing documented as a core gateway feature.
| Managed onlyConditional routing and canary deploys documented.
|
| Circuit breaker | SupportedDefault 5 failures / 60s cooldown, configurable via gateway.circuit_breaker_failures / _cooldown.
| SupportedCircuit breaker documented as a core gateway feature.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Exact-match cache | SupportedSHA-256 request-fingerprint cache key, tenant-scoped (api_key/workspace/organization/global), SQLite-backed.
| SupportedSimple cache documented.
| Managed only |
| Similarity cache (see scope) | SupportedNOT embedding-based. Vectorize() builds a normalized token-frequency map over lowercased, stop-word-filtered tokens; Similarity() is cosine over those token-frequency vectors. State this precisely wherever OmniSwitch's cache is compared to embedding-based semantic caches.
| SupportedSemantic cache documented ("Cache (Simple & Semantic)").
| Managed onlySemantic cache documented at the platform level.
|
| Budgets and quotas | SupportedCost and token budgets per API key.
| Not verifiedCost/token budgets are prominent in Portkey's managed control plane; whether the OSS gateway alone enforces budgets without the control plane is not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Managed onlyCost/token budgets and time-window rate limits documented.
|
| Rate limiting | PartialLocal sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter.
Local sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter. | Not verifiedTime-window rate limits are documented for the Portkey platform; OSS-gateway-only enforcement not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Managed only |
| Token-based rate limits | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Identity & guardrails | |||
| API key management | SupportedHashed API keys, bootstrap owner key, workspace-scoped keys.
| PartialVirtual keys are a hosted-control-plane concept; the OSS gateway can be run with a config header (x-portkey-config) rather than a file-based key store.
Virtual keys are a hosted-control-plane concept; the OSS gateway can be run with a config header (x-portkey-config) rather than a file-based key store. | Managed onlyVirtual keys and workspace/project key management.
|
| OIDC / JWT identity | SupportedOIDC JWT/JWKS workload identity (identity.oidc.jwks_url/issuer/audience).
| Not verifiedNot confirmed for the OSS gateway specifically (vs. the hosted platform).
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged project/workspace controls documented; OIDC/JWT specifics not confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Mutual TLS | Not availableExplicitly not implemented; listed as a roadmap item, not a shipped feature.
| Not availableThis project's internal comparison table lists a combined SSO/SAML/SCIM/mTLS row as "Yes" for Portkey, but that appears to describe the hosted platform, not the OSS gateway; not independently verified for the OSS gateway container used here.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| RBAC / policy engine (CEL or equivalent) | SupportedCEL allow/deny authorization rules plus fixed role gates.
| Not verifiedNot confirmed for the OSS gateway specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Built-in guardrails | SupportedBuilt-in PII/prompt-injection/SQL-injection/toxicity/secret detectors plus custom regex rules, single-pass Rust-WASM scan with pure-Go fallback.
| SupportedIntegrated guardrails documented.
| Managed onlyDeterministic, AI/partner, and custom guardrails with deny/log/dataset/retry/fallback actions documented.
|
| Guardrail webhooks / external connectors | SupportedHTTP webhook connectors with configurable stage/action/timeout/fail_open.
| SupportedCustom webhook guardrail checks documented.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Output redaction | Supportedredact action available on output-stage guardrail rules.
| Not verifiedNot confirmed independently of the guardrails claim above.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Guardrails applied to streaming output | Supportedguardrails.stream_buffer defaults to true: the full SSE stream is buffered and scanned before release, which means TTFT with guardrails on is dominated by upstream generation time, not gateway overhead. Benchmark both stream_buffer=true and false and label them.
| Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Governed agent infrastructure | |||
| MCP gateway | SupportedHTTP MCP targets with streamed SSE / streamable-HTTP pass-through.
| SupportedMCP Gateway for remote MCP server connectivity documented.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| MCP over stdio | SupportedPersistent stdio MCP transport targets.
| Not verifiedNot confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| MCP federation (multiple targets) | SupportedMultiple named MCP targets, policy-gated tools/call, server-side headers.
| PartialCentralized control of multiple MCP servers documented; federation depth not independently confirmed.
Centralized control of multiple MCP servers documented; federation depth not independently confirmed. | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| OpenAPI-to-MCP conversion | Not availableNot implemented; explicit gap in the project's own comparison doc.
| Not availableThis project's internal comparison table lists Portkey as "Partial" for OpenAPI conversion; not independently re-verified, kept as no/unconfirmed here to avoid overclaiming.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| MCP OAuth / token exchange | SupportedRFC 8693 token exchange plus RFC 7523 JWT Bearer Grant for MCP OAuth delegation.
| Not availableThis project's internal comparison table lists Portkey as "No" for MCP OAuth/token exchange.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| A2A agent card discovery | SupportedPublic A2A v1 Agent Card discovery (/.well-known/agent-card.json) plus authenticated GetExtendedAgentCard.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy. | Not availableNo A2A agent-card discovery found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| A2A task methods | PartialSendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy. SendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported. | Not availableThis project's internal comparison table lists Portkey as "No" for A2A task lifecycle.
| Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Operations & evidence | |||
| Prompt management | PartialTemplates with version history and rendering; no approval workflow, rollback/promotion, or experiments.
Templates with version history and rendering; no approval workflow, rollback/promotion, or experiments. | SupportedPrompt templates/releases/experiments documented at the platform level.
| Managed onlyTemplates, partials, releases/publish workflow, experiments documented.
|
| Evals / experiments | PartialPolicy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring.
Policy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring. | SupportedFull evals/experiments documented at the platform level.
| Managed only |
| OTLP telemetry export | SupportedOTel trace export (tested against Langfuse/Jaeger/Tempo).
| Not verifiedOTel ingestion is documented for the Portkey platform; OSS-gateway-only export not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Managed only |
| Prometheus metrics | Supported/metrics endpoint, gated by OMNISWITCH_PROMETHEUS_ENABLED.
| Not availableThis project's internal comparison table lists a Prometheus-style claim as false for a similar OSS gateway (agentgateway); for Portkey OSS this is unconfirmed and kept conservative.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedManaged service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
| Published cross-gateway benchmarks | PartialIn-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up.
In-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up. | Not verifiedNo first-party Portkey benchmark blog found; Portkey appears as a comparison subject in LiteLLM's and Kong's third-party benchmarks.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ | Not verifiedNo first-party Portkey benchmark blog found; appears as a subject in third-party benchmarks.
No capability-specific source was recorded. The register is the provenance, not proof of absence. Open pinned register ↗ |
No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗SQLite by default; PostgreSQL via OMNISWITCH_DATABASE_URL. Logs and keys remain SQLite-local even in the Postgres case per the project's own docs.
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Kustomize manifests (Deployment/Service/ConfigMap/Secret example/PVCs/Redis) plus a Helm chart; no operator/CRDs/inference-aware routing.
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Config hot reload covers routes, guardrails, cache posture, circuit breaker, and shadow provider without restart.
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Local dashboard for logs, metrics, prompts, providers, and guardrails.
Dashboard/analytics are a hosted-platform feature; the OSS gateway container itself does not ship a bundled UI.
Dashboard/analytics are a hosted-platform feature; the OSS gateway container itself does not ship a bundled UI.
Hosted analytics/logs/traces dashboard.
MIT.
Closed managed service (distinct from the MIT-licensed OSS gateway).
/v1/chat/completions, streaming and non-streaming.
Universal REST/SDK API surface.
Universal REST/SDK API across models.
Documented multimodal/embeddings endpoint coverage.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI).
/v1/responses text subset only (no image/audio/tool-streaming parity with OpenAI).
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗/v1/messages core subset.
Anthropic is a supported provider; Messages-API request shape parity not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets.
4 native adapters (OpenAI, Anthropic, Google, Groq); no native Bedrock/Vertex/Cohere. Everything else goes through the generic OpenAI-compatible custom adapter with 15+ documented presets.
Large managed provider/model catalog claimed (1600+ models).
Large managed provider/model catalog (1600+ models claimed).
Generic custom provider adapter with presets for Azure OpenAI, Ollama, vLLM, LiteLLM, DeepSeek, Together, Fireworks, and aliases.
Custom hosts documented.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗route-level fallbacks, max_retries, retry_backoff, retry_codes, per-attempt timeout.
Fallback, retries, and timeouts documented.
Fallback, retries, timeouts documented at the platform level.
Weighted variants per route.
Load balancing documented.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗CEL condition expressions on route variants.
Conditional routing documented as a core gateway feature.
Conditional routing and canary deploys documented.
Default 5 failures / 60s cooldown, configurable via gateway.circuit_breaker_failures / _cooldown.
Circuit breaker documented as a core gateway feature.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗SHA-256 request-fingerprint cache key, tenant-scoped (api_key/workspace/organization/global), SQLite-backed.
Simple cache documented.
NOT embedding-based. Vectorize() builds a normalized token-frequency map over lowercased, stop-word-filtered tokens; Similarity() is cosine over those token-frequency vectors. State this precisely wherever OmniSwitch's cache is compared to embedding-based semantic caches.
Semantic cache documented ("Cache (Simple & Semantic)").
Semantic cache documented at the platform level.
Cost and token budgets per API key.
Cost/token budgets are prominent in Portkey's managed control plane; whether the OSS gateway alone enforces budgets without the control plane is not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Cost/token budgets and time-window rate limits documented.
Local sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter.
Local sliding-window request limits plus optional Redis-coordinated fixed window across replicas; no token-based (TPM) limiter.
Time-window rate limits are documented for the Portkey platform; OSS-gateway-only enforcement not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No claim is recorded for this capability in the pinned register.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Hashed API keys, bootstrap owner key, workspace-scoped keys.
Virtual keys are a hosted-control-plane concept; the OSS gateway can be run with a config header (x-portkey-config) rather than a file-based key store.
Virtual keys are a hosted-control-plane concept; the OSS gateway can be run with a config header (x-portkey-config) rather than a file-based key store.
Virtual keys and workspace/project key management.
OIDC JWT/JWKS workload identity (identity.oidc.jwks_url/issuer/audience).
Not confirmed for the OSS gateway specifically (vs. the hosted platform).
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed project/workspace controls documented; OIDC/JWT specifics not confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Explicitly not implemented; listed as a roadmap item, not a shipped feature.
This project's internal comparison table lists a combined SSO/SAML/SCIM/mTLS row as "Yes" for Portkey, but that appears to describe the hosted platform, not the OSS gateway; not independently verified for the OSS gateway container used here.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗CEL allow/deny authorization rules plus fixed role gates.
Not confirmed for the OSS gateway specifically.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Built-in PII/prompt-injection/SQL-injection/toxicity/secret detectors plus custom regex rules, single-pass Rust-WASM scan with pure-Go fallback.
Integrated guardrails documented.
Deterministic, AI/partner, and custom guardrails with deny/log/dataset/retry/fallback actions documented.
HTTP webhook connectors with configurable stage/action/timeout/fail_open.
Custom webhook guardrail checks documented.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗redact action available on output-stage guardrail rules.
Not confirmed independently of the guardrails claim above.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗guardrails.stream_buffer defaults to true: the full SSE stream is buffered and scanned before release, which means TTFT with guardrails on is dominated by upstream generation time, not gateway overhead. Benchmark both stream_buffer=true and false and label them.
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗HTTP MCP targets with streamed SSE / streamable-HTTP pass-through.
MCP Gateway for remote MCP server connectivity documented.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Persistent stdio MCP transport targets.
Not confirmed in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Multiple named MCP targets, policy-gated tools/call, server-side headers.
Centralized control of multiple MCP servers documented; federation depth not independently confirmed.
Centralized control of multiple MCP servers documented; federation depth not independently confirmed.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Not implemented; explicit gap in the project's own comparison doc.
This project's internal comparison table lists Portkey as "Partial" for OpenAPI conversion; not independently re-verified, kept as no/unconfirmed here to avoid overclaiming.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗RFC 8693 token exchange plus RFC 7523 JWT Bearer Grant for MCP OAuth delegation.
This project's internal comparison table lists Portkey as "No" for MCP OAuth/token exchange.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Public A2A v1 Agent Card discovery (/.well-known/agent-card.json) plus authenticated GetExtendedAgentCard.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy.
No A2A agent-card discovery found in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗SendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported.
Current protocol scope: SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy.
SendMessage / SendMessageStream, GetTask, CancelTask implemented (JSON-RPC methods and REST aliases). Agent card advertises pushNotifications: false, so push-notification task updates are not supported.
This project's internal comparison table lists Portkey as "No" for A2A task lifecycle.
Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Templates with version history and rendering; no approval workflow, rollback/promotion, or experiments.
Templates with version history and rendering; no approval workflow, rollback/promotion, or experiments.
Prompt templates/releases/experiments documented at the platform level.
Templates, partials, releases/publish workflow, experiments documented.
Policy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring.
Policy replay endpoint for batch allow/deny simulation only; no model-quality eval datasets/scoring.
Full evals/experiments documented at the platform level.
OTel trace export (tested against Langfuse/Jaeger/Tempo).
OTel ingestion is documented for the Portkey platform; OSS-gateway-only export not independently confirmed.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗/metrics endpoint, gated by OMNISWITCH_PROMETHEUS_ENABLED.
This project's internal comparison table lists a Prometheus-style claim as false for a similar OSS gateway (agentgateway); for Portkey OSS this is unconfirmed and kept conservative.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗Managed service: capability-map only, no same-host benchmark run. Not verified in available sources.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗In-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up.
In-repo Rust-WASM-vs-Go guardrail micro-benchmark only (BENCHMARKS.md, measured on a non-pinned Windows laptop). No cross-gateway comparative run published yet -- this benchmark effort (bench/) is that follow-up.
No first-party Portkey benchmark blog found; Portkey appears as a comparison subject in LiteLLM's and Kong's third-party benchmarks.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗No first-party Portkey benchmark blog found; appears as a subject in third-party benchmarks.
No capability-specific source was recorded. The register is the provenance, not proof of absence.
Open pinned register ↗OmniSwitch scope. The pinned register marks OpenAI Responses API, Anthropic Messages API, Native (non-passthrough) provider adapters, Rate limiting, Mutual TLS, OpenAPI-to-MCP conversion, A2A task methods, Prompt management, Evals / experiments, Published cross-gateway benchmarks as partial or unavailable. Read each source and version; compare them with the build you actually deploy.
Read unknowns carefully. “Not verified” means an evidence gap, not absence. Editions remain separate. Register a8a594b; 3 compared deployments.
A2A (Beta). SendMessage, SendMessageStream (SSE task events), GetTask, best-effort CancelTask; tasks in memory; no push notifications; no downstream agent proxy.
The register verifies OpenAI-compatible chat on both sides. This guide is limited to an OpenAI SDK base-URL change for chat; it does not establish compatibility for other APIs or headers.
Create an OmniSwitch gateway API key. The SDK sends it as Authorization: Bearer <OmniSwitch key>. Provider credentials stay in the gateway; do not reuse your competitor platform key.
import os
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key=os.environ["OMNISWITCH_KEY"],
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(response.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "http://localhost:8080/v1",
apiKey: process.env.OMNISWITCH_KEY,
});
const response = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "Hello" }],
});
console.log(response.choices[0].message.content);x-omniswitch-providerMap your Portkey equivalent here.x-omniswitch-configMap your Portkey equivalent here.x-omniswitch-trace-idMap your Portkey equivalent here.x-omniswitch-session-idMap your Portkey equivalent here.x-omniswitch-shadow-providerMap your Portkey equivalent here.Chat selects its model with the JSON model field. The x-omniswitch-model header is an A2A selector, not a chat model override.
Read Portkey’s header documentation and the OmniSwitch header reference. Custom header conventions, automatic configuration import, gateway-key import, and direct Anthropic SDK header support are not implied.
Pilot representative blocking and streaming calls, tools, errors, retries, metadata, and observability. Keep the original gateway available until your app-level tests pass.
Palo Alto Networks completed its acquisition of Portkey on 29 May 2026. Review the current product editions and terms, not older SaaS-only comparisons.
Source · accessed 2026-10-09Product register a8a594b. Cells reflect registered source claims, not roadmap plans or release-artifact availability; each retains its own verified date and version.
OSS gateway; cloud shown separately. Capability-specific documentation and dated editorial sources remain separate from independent testing.
Supported means documented within the named capability and deployment scope, not full product parity. Beta and licensed editions are shown when the register supplies a qualifier. Not verified describes an evidence gap, not absence. Claims come from the pinned register; cells have no scores or totals. This is a dated documentation review, not a performance test or a security certification. See the benchmark methodology.