Gateway compatibility ledger
Pinned source: ai-gateway-openapi/openapi.yaml, SHA-256 de7a1bd98bdb2edb7428a33054d9f6000b9568d1cd5b603d1a8302c053d094d9. Generated by scripts/openapi/generate-ledger.ts from npm run openapi:audit.
There are 138/242 directly matched Portkey operations (57.02%), not 99% of the entire upstream product. All 242 operations are classified below; classification is not coverage. AIRS has a separate conformance report.
The 2026-09-06 design update adds a separate, explicitly configured runtime inference client. Remaining provider operations are still gaps. OAuth plus x-tsg-id and SCM admin/data routing are not interchangeable with Portkey API keys and hostnames. Permission denial is not proof that an API is unsupported.
| Disposition | Operations |
|---|---|
| direct-contract | 138 |
| tenant-unverified | 48 |
| runtime-retired-upstream | 23 |
| scm-adapted | 11 |
| scm-adapted-partial | 22 |
Upstream retirement note
The pinned source retains 23 Assistants/Threads operations. OpenAI confirms the Assistants API was retired on August 26, 2026. They cannot be live-certified against the configured OpenAI backend. This does not prove all other provider or gateway compatibility modes are absent. All 23 remain unimplemented gaps in the 242-operation denominator; Responses support is not counted as equivalent coverage.
Live verification exceptions
Successful owned-fixture checks cover ordinary MCP server CRUD, usage/rate policy CRUD, MCP guardrail mappings, log-export draft CRUD, and admin-plane unbound secret-reference CRUD. The secret-reference SDK lifecycle passes 7/7; external secret resolution is not tested. Read methods also have a separate timestamped live-results suite linked in the conformance report. The following methods remain experimental; an offline transport test is not a live pass.
| Method | Evidence / limitation |
|---|---|
inference.connectRealtime | Explicit caller-owned WebSocket adapter, bounded JSON events and deterministic cancellation. The prescribed-model live probe upgrades with HTTP 101, then receives invalid_model before session readiness. A successful provider session/generation remains unverified; an upgrade is not a successful realtime workflow. |
inference.updateFeedback | Confirmed runtime handler; owned-record PUT returns HTTP 500 because feedback lookup requires uninitialized ClickHouse in control-plane storage mode. Typed contracts are experimental, not a successful live update. |
inference.getLog | Confirmed runtime handler; owned-log reads return HTTP 500 because the deployed handler has no control-plane storage branch. Typed contracts and v2 timestamp validation are experimental, not successful live retrieval. |
inference.createCompletion | Deployed route confirmed; prescribed-model legacy completion returns HTTP 404. Typed JSON/SSE contracts are experimental, not live certification. |
inference.createPromptCompletion | Deployed route dispatches to chat/legacy completion handlers. No owned live template is provisioned; flattened input and JSON/SSE contracts remain experimental. |
inference.createPromptRender | Deployed route confirmed. No owned live template is provisioned; flattened request and rendered-response contracts remain experimental. |
inference.createImage | Offline JSON contract only. The prescribed-model generation probe returned HTTP 400; no alternate model used. |
inference.createImageEdit | Offline multipart contract only. The prescribed-model edit probe returned HTTP 400; successful live editing is unverified. |
inference.createImageVariation | Offline multipart contract only. The prescribed-model variation probe returned HTTP 404; successful live variation is unverified. |
inference.createSpeech | Offline binary-response contract only. The prescribed-model speech probe returned HTTP 404; no audio model was substituted. |
inference.createTranscription | Offline multipart/format-specific response contracts only. The prescribed-model transcription probe returned HTTP 400 with model incompatibility. |
inference.createTranslation | Offline multipart/format-specific response contracts only. The prescribed-model translation probe returned HTTP 400 with model incompatibility. |
inference.createModeration | Offline JSON contract only. The prescribed-model moderation probe returned HTTP 400; no specialized model was substituted. |
inference.createRerank | Offline JSON contract only. The prescribed-provider rerank probe returned HTTP 500; no different provider was configured. |
inference.createOcr | Offline JSON contract only. The prescribed-provider OCR probe returned HTTP 500; no different provider was configured. |
mcpServers.test | SCM returned HTTP 403 on an owned server; authorization remains unverified. |
mcpServers.deleteConnections | SCM returned HTTP 403 on an owned server; authorization remains unverified. |
mcpServers.updateCapabilities | Owned public-upstream tool lifecycle passes 16/16. The subsequent metadata suite records 18 pass/2 fail: prompt disable/re-enable passes with runtime counts 6/5/6; resource discovery fails required-name validation, and three runtime templates never synchronize into SCM. Both deployed 2.20.0 replicas contain the corresponding resource-name stripping and template pass-through handlers. An independent 23/23 audit confirms all public/synthetic/metadata fixtures retired (2026-09-07). No tools, prompts or resource contents were executed/read. Resource variants and authenticated upstreams remain unverified; published experimental stability is retained. |
usageLimits.resetEntity | Post-release owned traffic/reset lifecycle passes 8/8 with an independent 2/2 retirement audit (2026-09-07). This supersedes the earlier missing-entity prerequisite. SDK 0.21.0 still labels the method experimental; its published stability guarantee is unchanged. |
logExports.start | SCM returned HTTP 500 (AB04) for an isolated export; successful execution is unverified. |
logExports.cancel | No running owned export was available; contract-tested only. |
logExports.download | The owned export could not start; successful download is unverified. |
inference.deleteModel | No owned fine-tuned model was provisioned for deletion; offline contract only. |
inference.createFineTuningJob | No training job was started. The designated inference model does not support fine-tuning; offline contract only. |
inference.retrieveFineTuningJob | No owned training job was available; offline contract only. |
inference.cancelFineTuningJob | No owned training job was available; existing jobs were not changed. Offline contract only. |
inference.listFineTuningEvents | No owned training job was available; offline contract only. |
inference.listFineTuningJobCheckpoints | No owned training job checkpoints were available; offline contract only. |
inference.cancelVectorStoreFileBatch | The owned file-batch cancellation endpoint returned HTTP 500; successful cancellation remains unverified. Create, completed retrieval and file listing passed. |
Every upstream operation
direct-contract means a method/path implementation exists, not that every request field or response variant has been exercised on the tenant. The field audit models 1358/1358 request and 2329/2329 response property occurrences for these exact matches. Catalog fields remain forward-compatible; SCM behavior takes precedence over upstream-only enum catalogs and envelopes.
| Operation | Disposition | SDK / explanation |
|---|---|---|
POST /chat/completions | direct-contract | inference.createChatCompletion |
GET /realtime | direct-contract | inference.connectRealtime |
POST /completions | direct-contract | inference.createCompletion |
POST /collections | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /collections | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /collections/{collectionId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /collections/{collectionId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /collections/{collectionId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /labels | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /labels | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /labels/{labelId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /labels/{labelId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /labels/{labelId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /prompts | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /prompts | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /prompts/{promptId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /prompts/{promptId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /prompts/{promptId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /prompts/{promptId}/versions | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /prompts/{promptId}/versions/{versionId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /prompts/{promptId}/versions/{versionId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /prompts/{promptId}/makeDefault | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /prompts/partials | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /prompts/partials | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /prompts/partials/{promptPartialId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /prompts/partials/{promptPartialId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /prompts/partials/{promptPartialId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /prompts/partials/{promptPartialId}/versions | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /prompts/partials/{promptPartialId}/makeDefault | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /prompts/{promptId}/completions | direct-contract | inference.createPromptCompletion |
POST /prompts/{promptId}/render | direct-contract | inference.createPromptRender |
POST /guardrails | direct-contract | guardrails.create |
GET /guardrails | direct-contract | guardrails.list |
GET /guardrails/{guardrailId} | direct-contract | guardrails.get |
PUT /guardrails/{guardrailId} | direct-contract | guardrails.update |
DELETE /guardrails/{guardrailId} | direct-contract | guardrails.delete |
PUT /guardrails/{guardrailId}/mcp-servers | direct-contract | guardrails.syncMcpServers |
GET /guardrails/{guardrailId}/mcp-servers | direct-contract | guardrails.getMcpServers |
PUT /guardrails/{guardrailId}/mcp-servers/{mcpServerId} | direct-contract | guardrails.upsertMcpServer |
POST /images/generations | direct-contract | runtime-resources.createImage |
POST /images/edits | direct-contract | runtime-resources.createImageEdit |
POST /images/variations | direct-contract | runtime-resources.createImageVariation |
POST /embeddings | direct-contract | inference.createEmbedding |
POST /rerank | direct-contract | runtime-resources.createRerank |
POST /ocr | direct-contract | runtime-resources.createOcr |
POST /audio/speech | direct-contract | runtime-resources.createSpeech |
POST /audio/transcriptions | direct-contract | runtime-resources.createTranscription |
POST /audio/translations | direct-contract | runtime-resources.createTranslation |
GET /files | direct-contract | runtime-resources.listFiles |
POST /files | direct-contract | runtime-resources.createFile |
DELETE /files/{file_id} | direct-contract | runtime-resources.deleteFile |
GET /files/{file_id} | direct-contract | runtime-resources.retrieveFile |
GET /files/{file_id}/content | direct-contract | runtime-resources.downloadFile |
POST /fine_tuning/jobs | direct-contract | runtime-resources.createFineTuningJob |
GET /fine_tuning/jobs | direct-contract | runtime-resources.listPaginatedFineTuningJobs |
GET /fine_tuning/jobs/{fine_tuning_job_id} | direct-contract | runtime-resources.retrieveFineTuningJob |
GET /fine_tuning/jobs/{fine_tuning_job_id}/events | direct-contract | runtime-resources.listFineTuningEvents |
POST /fine_tuning/jobs/{fine_tuning_job_id}/cancel | direct-contract | runtime-resources.cancelFineTuningJob |
GET /fine_tuning/jobs/{fine_tuning_job_id}/checkpoints | direct-contract | runtime-resources.listFineTuningJobCheckpoints |
GET /models | direct-contract | runtime-resources.listModels |
GET /models/{model} | direct-contract | runtime-resources.retrieveModel |
DELETE /models/{model} | direct-contract | runtime-resources.deleteModel |
POST /moderations | direct-contract | runtime-resources.createModeration |
GET /assistants | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /assistants | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /assistants/{assistant_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /assistants/{assistant_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
DELETE /assistants/{assistant_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /responses | direct-contract | inference.createResponse |
GET /responses/{response_id} | direct-contract | runtime-resources.getResponse |
DELETE /responses/{response_id} | direct-contract | runtime-resources.deleteResponse |
GET /responses/{response_id}/input_items | direct-contract | runtime-resources.listInputItems |
POST /threads | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /threads/{thread_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/{thread_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
DELETE /threads/{thread_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /threads/{thread_id}/messages | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/{thread_id}/messages | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /threads/{thread_id}/messages/{message_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/{thread_id}/messages/{message_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
DELETE /threads/{thread_id}/messages/{message_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/runs | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /threads/{thread_id}/runs | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/{thread_id}/runs | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /threads/{thread_id}/runs/{run_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/{thread_id}/runs/{run_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/{thread_id}/runs/{run_id}/submit_tool_outputs | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
POST /threads/{thread_id}/runs/{run_id}/cancel | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /threads/{thread_id}/runs/{run_id}/steps | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /threads/{thread_id}/runs/{run_id}/steps/{step_id} | runtime-retired-upstream | OpenAI retired Assistants/Threads on 2026-08-26 (developers.openai.com/api/docs/assistants/migration). These 23 pinned operations remain unimplemented and in the 242-operation denominator. The configured OpenAI backend cannot live-certify them; Responses is not counted as a wire-equivalent replacement. This does not establish every other provider or gateway compatibility mode is unavailable. |
GET /vector_stores | direct-contract | runtime-resources.listVectorStores |
POST /vector_stores | direct-contract | runtime-resources.createVectorStore |
GET /vector_stores/{vector_store_id} | direct-contract | runtime-resources.getVectorStore |
POST /vector_stores/{vector_store_id} | direct-contract | runtime-resources.modifyVectorStore |
DELETE /vector_stores/{vector_store_id} | direct-contract | runtime-resources.deleteVectorStore |
GET /vector_stores/{vector_store_id}/files | direct-contract | runtime-resources.listVectorStoreFiles |
POST /vector_stores/{vector_store_id}/files | direct-contract | runtime-resources.createVectorStoreFile |
GET /vector_stores/{vector_store_id}/files/{file_id} | direct-contract | runtime-resources.getVectorStoreFile |
DELETE /vector_stores/{vector_store_id}/files/{file_id} | direct-contract | runtime-resources.deleteVectorStoreFile |
POST /vector_stores/{vector_store_id}/file_batches | direct-contract | runtime-resources.createVectorStoreFileBatch |
GET /vector_stores/{vector_store_id}/file_batches/{batch_id} | direct-contract | runtime-resources.getVectorStoreFileBatch |
POST /vector_stores/{vector_store_id}/file_batches/{batch_id}/cancel | direct-contract | runtime-resources.cancelVectorStoreFileBatch |
GET /vector_stores/{vector_store_id}/file_batches/{batch_id}/files | direct-contract | runtime-resources.listFilesInVectorStoreBatch |
POST /batches | direct-contract | runtime-resources.createBatch |
GET /batches | direct-contract | runtime-resources.listBatches |
GET /batches/{batch_id}/output | direct-contract | runtime-resources.getBatchOutput |
GET /batches/{batch_id} | direct-contract | runtime-resources.retrieveBatch |
POST /batches/{batch_id}/cancel | direct-contract | runtime-resources.cancelBatch |
GET /configs | direct-contract | configs.list |
POST /configs | direct-contract | configs.create |
DELETE /configs/{slug} | direct-contract | configs.delete |
GET /configs/{slug} | direct-contract | configs.get |
PUT /configs/{slug} | direct-contract | configs.update |
GET /configs/{slug}/versions | direct-contract | configs.listVersions |
POST /feedback | direct-contract | runtime-resources.createFeedback |
PUT /feedback/{id} | direct-contract | runtime-resources.updateFeedback |
GET /integrations | direct-contract | integrations.list |
POST /integrations | direct-contract | integrations.create |
GET /integrations/{slug} | direct-contract | integrations.get |
PUT /integrations/{slug} | direct-contract | integrations.update |
DELETE /integrations/{slug} | direct-contract | integrations.delete |
GET /integrations/{slug}/models | direct-contract | integrations.getModels |
PUT /integrations/{slug}/models | direct-contract | integrations.setModels |
DELETE /integrations/{slug}/models | direct-contract | integrations.deleteModels |
GET /integrations/{slug}/workspaces | direct-contract | integrations.getWorkspaces |
PUT /integrations/{slug}/workspaces | direct-contract | integrations.setWorkspaces |
GET /providers | direct-contract | providers.list |
POST /providers | direct-contract | providers.create |
GET /providers/{slug} | direct-contract | providers.get |
PUT /providers/{slug} | direct-contract | providers.update |
DELETE /providers/{slug} | direct-contract | providers.delete |
GET /virtual-keys | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /virtual-keys | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /virtual-keys/{slug} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /virtual-keys/{slug} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /virtual-keys/{slug} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /admin/users/invites | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /admin/users/invites | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /admin/users/invites/{inviteId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /admin/users/invites/{inviteId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /admin/users/invites/{inviteId}/resend | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /admin/users | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /admin/users/{userId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /admin/users/{userId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /admin/users/{userId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /admin/workspaces/{workspaceId}/users | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /admin/workspaces/{workspaceId}/users | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
PUT /admin/workspaces/{workspaceId}/users/{userId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /admin/workspaces/{workspaceId}/users/{userId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
GET /admin/workspaces/{workspaceId}/users/{userId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /admin/workspaces | scm-adapted | SCM uses /workspaces: reads are available on the data and admin planes; writes use the admin plane. Creation requires SCM scope provisioning and remains live-unverified. Not a wire-equivalent Portkey implementation. |
GET /admin/workspaces | scm-adapted | SCM uses /workspaces: reads are available on the data and admin planes; writes use the admin plane. Creation requires SCM scope provisioning and remains live-unverified. Not a wire-equivalent Portkey implementation. |
PUT /admin/workspaces/{workspaceId} | scm-adapted | SCM uses /workspaces: reads are available on the data and admin planes; writes use the admin plane. Creation requires SCM scope provisioning and remains live-unverified. Not a wire-equivalent Portkey implementation. |
GET /admin/workspaces/{workspaceId} | scm-adapted | SCM uses /workspaces: reads are available on the data and admin planes; writes use the admin plane. Creation requires SCM scope provisioning and remains live-unverified. Not a wire-equivalent Portkey implementation. |
DELETE /admin/workspaces/{workspaceId} | scm-adapted | SCM uses /workspaces: reads are available on the data and admin planes; writes use the admin plane. Creation requires SCM scope provisioning and remains live-unverified. Not a wire-equivalent Portkey implementation. |
GET /scim/workspaces | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /scim/workspaces | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
DELETE /scim/workspaces/{scimWorkspaceGroupId} | tenant-unverified | Read-only probes of this family were denied or unavailable on the supplied SCM tenant. This is not proof that every method is unsupported. No speculative write API added. |
POST /mcp-integrations | direct-contract | mcp-integrations.create |
GET /mcp-integrations | direct-contract | mcp-integrations.list |
GET /mcp-integrations/{mcpIntegrationId} | direct-contract | mcp-integrations.get |
PUT /mcp-integrations/{mcpIntegrationId} | direct-contract | mcp-integrations.update |
DELETE /mcp-integrations/{mcpIntegrationId} | direct-contract | mcp-integrations.delete |
GET /mcp-integrations/{mcpIntegrationId}/workspaces | direct-contract | mcp-integrations.getWorkspaces |
PUT /mcp-integrations/{mcpIntegrationId}/workspaces | direct-contract | mcp-integrations.setWorkspaces |
GET /mcp-integrations/{mcpIntegrationId}/capabilities | direct-contract | mcp-integrations.getCapabilities |
PUT /mcp-integrations/{mcpIntegrationId}/capabilities | direct-contract | mcp-integrations.setCapabilities |
GET /mcp-integrations/{mcpIntegrationId}/metadata | direct-contract | mcp-integrations.getMetadata |
POST /mcp-servers | direct-contract | mcp-servers.create |
GET /mcp-servers | direct-contract | mcp-servers.list |
GET /mcp-servers/{mcpServerId} | direct-contract | mcp-servers.get |
PUT /mcp-servers/{mcpServerId} | direct-contract | mcp-servers.update |
DELETE /mcp-servers/{mcpServerId} | direct-contract | mcp-servers.delete |
POST /mcp-servers/{mcpServerId}/test | direct-contract | mcp-servers.test |
GET /mcp-servers/{mcpServerId}/capabilities | direct-contract | mcp-servers.getCapabilities |
PUT /mcp-servers/{mcpServerId}/capabilities | direct-contract | mcp-servers.updateCapabilities |
GET /mcp-servers/{mcpServerId}/user-access | direct-contract | mcp-servers.getUserAccess |
PUT /mcp-servers/{mcpServerId}/user-access | direct-contract | mcp-servers.updateUserAccess |
GET /mcp-servers/{mcpServerId}/connections | direct-contract | mcp-servers.getConnections |
DELETE /mcp-servers/{mcpServerId}/connections | direct-contract | mcp-servers.deleteConnections |
POST /logs | direct-contract | runtime-resources.createLogs |
GET /logs/{logId} | direct-contract | runtime-resources.getLog |
GET /logs/exports/{exportId} | direct-contract | log-exports.get |
PUT /logs/exports/{exportId} | direct-contract | log-exports.update |
GET /logs/exports | direct-contract | log-exports.list |
POST /logs/exports | direct-contract | log-exports.create |
POST /logs/exports/{exportId}/start | direct-contract | log-exports.start |
POST /logs/exports/{exportId}/cancel | direct-contract | log-exports.cancel |
GET /logs/exports/{exportId}/download | direct-contract | log-exports.download |
GET /audit-logs | direct-contract | audit-logs.list |
POST /api-keys/{type}/{sub-type} | scm-adapted | SCM splits service and user API keys into /api-keys/service and /api-keys/user. Virtual keys are not aliases. |
GET /api-keys | scm-adapted | SCM splits service and user API keys into /api-keys/service and /api-keys/user. Virtual keys are not aliases. |
PUT /api-keys/{id} | scm-adapted | SCM splits service and user API keys into /api-keys/service and /api-keys/user. Virtual keys are not aliases. |
GET /api-keys/{id} | scm-adapted | SCM splits service and user API keys into /api-keys/service and /api-keys/user. Virtual keys are not aliases. |
DELETE /api-keys/{id} | scm-adapted | SCM splits service and user API keys into /api-keys/service and /api-keys/user. Virtual keys are not aliases. |
POST /api-keys/{id}/rotate | scm-adapted | SCM splits service and user API keys into /api-keys/service and /api-keys/user. Virtual keys are not aliases. |
POST /policies/usage-limits | direct-contract | usage-limits.create |
GET /policies/usage-limits | direct-contract | usage-limits.list |
GET /policies/usage-limits/{policyUsageLimitsId} | direct-contract | usage-limits.get |
PUT /policies/usage-limits/{policyUsageLimitsId} | direct-contract | usage-limits.update |
DELETE /policies/usage-limits/{policyUsageLimitsId} | direct-contract | usage-limits.delete |
GET /policies/usage-limits/{policyUsageLimitsId}/entities | direct-contract | usage-limits.listEntities |
PUT /policies/usage-limits/{policyUsageLimitsId}/entities/{entityId}/reset | direct-contract | usage-limits.resetEntity |
POST /policies/rate-limits | direct-contract | rate-limits.create |
GET /policies/rate-limits | direct-contract | rate-limits.list |
GET /policies/rate-limits/{rateLimitsPolicyId} | direct-contract | rate-limits.get |
PUT /policies/rate-limits/{rateLimitsPolicyId} | direct-contract | rate-limits.update |
DELETE /policies/rate-limits/{rateLimitsPolicyId} | direct-contract | rate-limits.delete |
GET /analytics/graphs/requests | scm-adapted-partial | The corresponding SCM /logs/charts route has live-verified trace/metadata filters, status/API-key/provider-model CSV-OR lists and inclusive total-token/cost bounds, separately and combined, using positive owned traffic and absent cohorts. Empty latency aggregates are null. Upstream query names/envelopes and remaining filters are not fully equivalent; this stays outside direct operation coverage. |
GET /analytics/graphs/cost | scm-adapted-partial | The corresponding SCM /logs/charts route has live-verified trace/metadata filters, status/API-key/provider-model CSV-OR lists and inclusive total-token/cost bounds, separately and combined, using positive owned traffic and absent cohorts. Empty latency aggregates are null. Upstream query names/envelopes and remaining filters are not fully equivalent; this stays outside direct operation coverage. |
GET /analytics/graphs/latency | scm-adapted-partial | The corresponding SCM /logs/charts route has live-verified trace/metadata filters, status/API-key/provider-model CSV-OR lists and inclusive total-token/cost bounds, separately and combined, using positive owned traffic and absent cohorts. Empty latency aggregates are null. Upstream query names/envelopes and remaining filters are not fully equivalent; this stays outside direct operation coverage. |
GET /analytics/graphs/tokens | scm-adapted-partial | The corresponding SCM /logs/charts route has live-verified trace/metadata filters, status/API-key/provider-model CSV-OR lists and inclusive total-token/cost bounds, separately and combined, using positive owned traffic and absent cohorts. Empty latency aggregates are null. Upstream query names/envelopes and remaining filters are not fully equivalent; this stays outside direct operation coverage. |
GET /analytics/graphs/users | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/users/requests | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/errors | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/errors/rate | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/errors/stacks | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/errors/status-codes | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/requests/rescued | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/cache/hit-rate | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/cache/latency | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/feedbacks | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/feedbacks/scores | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/feedbacks/weighted | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/graphs/feedbacks/ai-models | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/summary/cache | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/groups/users | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/groups/ai-models | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/groups/provider | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /analytics/groups/metadata/{metadataKey} | scm-adapted-partial | SCM exposes /logs/charts and /logs/groups. Related telemetry exists, but upstream aggregations are not all semantically equivalent. Not counted as full operation coverage. |
GET /model-configs/pricing/{provider}/{model} | direct-contract | model-pricing.get |
GET /secret-references | direct-contract | secret-references.list |
POST /secret-references | direct-contract | secret-references.create |
GET /secret-references/{secretReferenceId} | direct-contract | secret-references.get |
PUT /secret-references/{secretReferenceId} | direct-contract | secret-references.update |
DELETE /secret-references/{secretReferenceId} | direct-contract | secret-references.delete |
GET /deployments | direct-contract | deployments.list |
POST /deployments | direct-contract | deployments.create |
GET /deployments/{deploymentId} | direct-contract | deployments.get |
PUT /deployments/{deploymentId} | direct-contract | deployments.update |
DELETE /deployments/{deploymentId} | direct-contract | deployments.delete |
GET /deployments/{deploymentId}/ping | direct-contract | deployments.ping |
Public catalog routing
model-pricing.get follows the pricing operation's explicit public server and security: []: no /v1 prefix, SCM OAuth, TSG or gateway key. Both prescribed model lookups pass live with the complete response preserved. It is a public Portkey catalog operation, not Prisma tenant billing or a new SCM endpoint. See public pricing.