Version: Current
Historical release snapshot. These docs are frozen. Read current docs.
API reference
This page is generated from the OpenAPI document that the gateway builds from its own route tables. It is checked by the gate, so an operation cannot be added to the server and stay missing here.
Provenance
Section titled “Provenance”- Contract version:
1.10.0 - Contract title: acumen gateway API
- Source:
acumen:docs/openapi/acumen-v1.openapi.json - Public edge:
https://ai.tcp.systems
95 operations.
| Method | Path | Summary | Scope | Exposure | Mutating | Status |
|---|---|---|---|---|---|---|
GET |
/api/ide/file |
Read a workspace file | admin | operator | no | active |
PUT |
/api/ide/file |
Save a workspace file | admin | operator | no | active |
GET |
/api/ide/stats |
Workspace statistics | admin | operator | no | active |
POST |
/api/ide/terminal/{id}/input |
Write terminal input | admin | operator | no | active |
POST |
/api/ide/terminal/{id}/resize |
Resize the PTY | admin | operator | no | active |
GET |
/api/ide/terminal/{id}/stream |
Stream terminal output | admin | operator | no | active |
DELETE |
/api/ide/terminal/{id} |
Close a terminal | admin | operator | no | active |
POST |
/api/ide/terminal |
Open a PTY terminal | admin | operator | no | active |
GET |
/api/ide/tree |
List a workspace directory | admin | operator | no | active |
POST |
/auth/logout |
Console logout | none | operator | yes | active |
GET |
/auth/session |
Console session bootstrap — who am I | none | operator | no | active |
POST |
/auth/session |
Console login — exchange a virtual key for a session | none | operator | yes | active |
POST |
/console/{action} |
Console key action | admin | operator | no | active |
GET |
/console/{page} |
Console page | ops:read | operator | no | active |
GET |
/console/ |
Console landing page | none | operator | no | active |
GET |
/console/login |
Console login form | none | operator | no | active |
GET |
/console |
Console canonical redirect | none | operator | no | active |
GET |
/healthz |
Health probe | none | public | no | active |
GET |
/ide/ |
IDE workspace shell | none | operator | no | active |
GET |
/livez |
Liveness probe | none | public | no | active |
GET |
/metrics |
Prometheus metrics | metrics | operator | no | active |
GET |
/readyz |
Readiness probe | none | public | no | active |
DELETE |
/v1/admin/budgets/{scope}/{scope_id}/{period} |
Delete a hard-cap budget policy | admin | operator | yes | active |
PUT |
/v1/admin/budgets/{scope}/{scope_id}/{period} |
Create or replace a hard-cap budget policy | admin | operator | yes | active |
GET |
/v1/admin/budgets |
List hard-cap budget policies with live reconciliation state | ops:read | operator | no | active |
DELETE |
/v1/admin/byok/{tenant_id}/{provider_id} |
Delete a tenant’s BYOK provider credential | admin | operator | yes | active |
PUT |
/v1/admin/byok/{tenant_id}/{provider_id} |
Store or rotate a tenant’s BYOK provider credential | admin | operator | yes | active |
GET |
/v1/admin/byok |
List BYOK provider credentials | ops:read | operator | no | active |
PUT |
/v1/admin/keys/{key_id}/attrs |
Set a virtual key’s project and BYOK-only flag | admin | operator | yes | active |
GET |
/v1/admin/keys/{key_id}/caps |
Read a virtual key’s budget caps | ops:read | operator | no | active |
PUT |
/v1/admin/keys/{key_id}/caps |
Write a virtual key’s budget caps | admin | operator | yes | active |
POST |
/v1/admin/notifications/{id}/read |
Mark a notification read | admin | operator | yes | active |
GET |
/v1/admin/notifications |
List alert notifications | ops:read | operator | no | active |
GET |
/v1/admin/requests/{request_id}/trace |
Per-request attempt trace | ops:read | operator | no | active |
GET |
/v1/budgets/{scope}/{scope_id}/state |
Budget state for one scope | ops:read | operator | no | active |
GET |
/v1/catalog/status |
Per-model seat status | ops:read | operator | no | active |
POST |
/v1/chat/completions |
OpenAI-compatible chat completions | chat | public | no | active |
POST |
/v1/embeddings |
Embeddings (declared; no embedding adapter in this build) | embeddings | public | no | active |
DELETE |
/v1/keys/{key_id} |
Revoke a virtual key | admin | operator | yes | active |
PATCH |
/v1/keys/{key_id} |
Patch a virtual key | admin | operator | yes | active |
GET |
/v1/keys |
List virtual keys | admin | operator | no | active |
POST |
/v1/keys |
Mint a virtual key | admin | operator | yes | active |
GET |
/v1/labs/compare |
Head-to-head model comparison | ops:read | operator | no | active |
GET |
/v1/labs/cost-simulator |
Cost simulator over real generations | ops:read | operator | no | active |
GET |
/v1/lanes |
The lane tier report | ops:read | operator | no | active |
POST |
/v1/messages/count_tokens |
Count tokens (declared; answers as a door in this build) | chat | public | no | active |
POST |
/v1/messages |
Anthropic Messages door | chat | public | no | active |
GET |
/v1/metrics/models |
Per requested-model metrics | ops:read | operator | no | active |
GET |
/v1/metrics/offers |
Per offer metrics | ops:read | operator | no | active |
GET |
/v1/metrics/overview |
Metrics overview for a window | ops:read | operator | no | active |
GET |
/v1/metrics/plans |
Provider and account plan classification | ops:read | operator | no | active |
GET |
/v1/metrics/providers |
Per seat-provider metrics | ops:read | operator | no | active |
GET |
/v1/metrics/rankings |
Ranking with floors and confidence intervals | ops:read | operator | no | active |
GET |
/v1/metrics/timeseries |
Bucketed time series | ops:read | operator | no | active |
GET |
/v1/metrics/tools |
Tool usage and seat capability | ops:read | operator | no | active |
GET |
/v1/models/{model_id}/health |
Live per-model availability | chat | public | no | active |
GET |
/v1/models/{model_id}/offers |
Public offer metadata for one model (P-17) | chat | public | no | active |
GET |
/v1/models/{model_id} |
Read one model | chat | public | no | active |
GET |
/v1/models |
List the served model catalogue | chat | public | no | active |
DELETE |
/v1/offers/{provider_id}/{vendor_model} |
Retire an offer | admin | operator | yes | active |
GET |
/v1/offers |
List offers | ops:read | operator | no | active |
POST |
/v1/offers |
Add an offer observation | admin | operator | yes | active |
POST |
/v1/ops/accounts/{provider}/{id}/state |
Set an agent seat’s state (proof-gated enable) | admin | operator | yes | active |
GET |
/v1/ops/agents/catalog |
List the console-owned agent seats | ops:read | operator | no | active |
POST |
/v1/ops/agents/import |
Import (register) an agent seat | admin | operator | yes | active |
POST |
/v1/ops/drain |
Begin graceful drain | admin | operator | yes | active |
GET |
/v1/ops/events |
Operator realtime event stream (SSE) | ops:read | operator | no | active |
GET |
/v1/ops/health |
Ops health roll-up | ops:read | operator | no | active |
GET |
/v1/ops/metrics/coverage |
Metrics coverage probe | ops:read | operator | no | active |
GET |
/v1/ops/metrics/spec |
Metrics definition catalogue | ops:read | operator | no | active |
GET |
/v1/ops/version |
Build and schema version | ops:read | operator | no | active |
GET |
/v1/product/benchmarks |
Benchmark and quality rows | ops:read | operator | no | active |
GET |
/v1/product/collections |
Rule-derived collections | ops:read | operator | no | active |
GET |
/v1/product/models |
Product catalogue projection | ops:read | operator | no | active |
GET |
/v1/product/pricing |
Plan and tier derivation | ops:read | operator | no | active |
GET |
/v1/product/providers |
Product providers projection | ops:read | operator | no | active |
GET |
/v1/product/rankings |
Ranking projection and routing audit | ops:read | operator | no | active |
PUT |
/v1/providers/{provider_id}/accounts/{account_id}/secret |
Rotate an account’s credential | admin | operator | yes | active |
POST |
/v1/providers/{provider_id}/accounts/{account_id}/state |
Set an account’s state | admin | operator | yes | active |
GET |
/v1/providers/{provider_id}/accounts |
List a provider’s accounts (secret-free) | ops:read | operator | no | active |
POST |
/v1/providers/{provider_id}/accounts |
Add an account (credential intake) | admin | operator | yes | active |
PATCH |
/v1/providers/{provider_id} |
Patch a provider | admin | operator | yes | active |
GET |
/v1/providers |
List providers | ops:read | operator | no | active |
POST |
/v1/providers |
Add (or upsert) a provider | admin | operator | yes | active |
POST |
/v1/responses |
OpenAI Responses door | chat | public | no | active |
GET |
/v1/route/explain/{model} |
Explain a model’s routing decision | ops:read | operator | no | active |
GET |
/v1/route/measures |
List resolver measures | ops:read | operator | no | active |
PUT |
/v1/route/measures |
Write resolver measures | admin | operator | yes | active |
DELETE |
/v1/route/policies/{scope}/{match} |
Delete a resolver policy override | admin | operator | yes | active |
PUT |
/v1/route/policies/{scope}/{match} |
Create or replace a resolver policy | admin | operator | yes | active |
GET |
/v1/route/policies |
List resolver policies | ops:read | operator | no | active |
GET |
/v1/seats/{seat_id}/health |
Seat health | ops:read | operator | no | active |
GET |
/v1/seats |
List seats | ops:read | operator | no | active |
GET |
/v1/usage/summary |
Usage summary | usage:read | operator | no | active |
GET |
/v1/usage |
Usage detail | usage:read | operator | no | active |
Authentication
Section titled “Authentication”Security schemes declared by the OpenAPI contract:
apiKeyAuth: apiKey, header x-api-key - The same virtual key as bearerAuth, in Anthropic’s header spelling.bearerAuth: http, bearer - A virtual key token (Authorization: Bearer <token>). Keys carry scopes; the operator surface requires anadminorops:readkey.operatorSession: apiKey, cookie acumen_session - The console’s signed HMAC session cookie, minted by POST /auth/session. Loopback-only; CSRF-gated for writes.
Operation details
Section titled “Operation details”Request and response detail for each path is on its own page, listed by path:
/api/ide/file(GET and PUT /api/ide/file): GET and PUT /api/ide/file/api/ide/stats(GET /api/ide/stats): GET /api/ide/stats/api/ide/terminal/{id}/input(POST /api/ide/terminal/{id}/input): POST /api/ide/terminal/{id}/input/api/ide/terminal/{id}/resize(POST /api/ide/terminal/{id}/resize): POST /api/ide/terminal/{id}/resize/api/ide/terminal/{id}/stream(GET /api/ide/terminal/{id}/stream): GET /api/ide/terminal/{id}/stream/api/ide/terminal/{id}(DELETE /api/ide/terminal/{id}): DELETE /api/ide/terminal/{id}/api/ide/terminal(POST /api/ide/terminal): POST /api/ide/terminal/api/ide/tree(GET /api/ide/tree): GET /api/ide/tree/auth/logout(POST /auth/logout): POST /auth/logout/auth/session(GET and POST /auth/session): GET and POST /auth/session/console/{action}(POST /console/{action}): POST /console/{action}/console/{page}(GET /console/{page}): GET /console/{page}/console/(GET /console/): GET /console//console/login(GET /console/login): GET /console/login/healthz(GET /healthz): GET /healthz/ide/(GET /ide/): GET /ide//livez(GET /livez): GET /livez/metrics(GET /metrics): GET /metrics/readyz(GET /readyz): GET /readyz/v1/admin/budgets/{scope}/{scope_id}/{period}(DELETE and PUT /v1/admin/budgets/{scope}/{scope_id}/{period}): DELETE and PUT /v1/admin/budgets/{scope}/{scope_id}/{period}/v1/admin/budgets(GET /v1/admin/budgets): GET /v1/admin/budgets/v1/admin/byok/{tenant_id}/{provider_id}(DELETE and PUT /v1/admin/byok/{tenant_id}/{provider_id}): DELETE and PUT /v1/admin/byok/{tenant_id}/{provider_id}/v1/admin/byok(GET /v1/admin/byok): GET /v1/admin/byok/v1/admin/keys/{key_id}/attrs(PUT /v1/admin/keys/{key_id}/attrs): PUT /v1/admin/keys/{key_id}/attrs/v1/admin/keys/{key_id}/caps(GET and PUT /v1/admin/keys/{key_id}/caps): GET and PUT /v1/admin/keys/{key_id}/caps/v1/admin/notifications/{id}/read(POST /v1/admin/notifications/{id}/read): POST /v1/admin/notifications/{id}/read/v1/admin/notifications(GET /v1/admin/notifications): GET /v1/admin/notifications/v1/admin/requests/{request_id}/trace(GET /v1/admin/requests/{request_id}/trace): GET /v1/admin/requests/{request_id}/trace/v1/budgets/{scope}/{scope_id}/state(GET /v1/budgets/{scope}/{scope_id}/state): GET /v1/budgets/{scope}/{scope_id}/state/v1/catalog/status(GET /v1/catalog/status): GET /v1/catalog/status/v1/chat/completions(POST /v1/chat/completions): POST /v1/chat/completions/v1/embeddings(POST /v1/embeddings): POST /v1/embeddings/v1/keys/{key_id}(DELETE and PATCH /v1/keys/{key_id}): DELETE and PATCH /v1/keys/{key_id}/v1/keys(GET and POST /v1/keys): GET and POST /v1/keys/v1/labs/compare(GET /v1/labs/compare): GET /v1/labs/compare/v1/labs/cost-simulator(GET /v1/labs/cost-simulator): GET /v1/labs/cost-simulator/v1/lanes(GET /v1/lanes): GET /v1/lanes/v1/messages/count_tokens(POST /v1/messages/count_tokens): POST /v1/messages/count_tokens/v1/messages(POST /v1/messages): POST /v1/messages/v1/metrics/models(GET /v1/metrics/models): GET /v1/metrics/models/v1/metrics/offers(GET /v1/metrics/offers): GET /v1/metrics/offers/v1/metrics/overview(GET /v1/metrics/overview): GET /v1/metrics/overview/v1/metrics/plans(GET /v1/metrics/plans): GET /v1/metrics/plans/v1/metrics/providers(GET /v1/metrics/providers): GET /v1/metrics/providers/v1/metrics/rankings(GET /v1/metrics/rankings): GET /v1/metrics/rankings/v1/metrics/timeseries(GET /v1/metrics/timeseries): GET /v1/metrics/timeseries/v1/metrics/tools(GET /v1/metrics/tools): GET /v1/metrics/tools/v1/models/{model_id}/health(GET /v1/models/{model_id}/health): GET /v1/models/{model_id}/health/v1/models/{model_id}/offers(GET /v1/models/{model_id}/offers): GET /v1/models/{model_id}/offers/v1/models/{model_id}(GET /v1/models/{model_id}): GET /v1/models/{model_id}/v1/models(GET /v1/models): GET /v1/models/v1/offers/{provider_id}/{vendor_model}(DELETE /v1/offers/{provider_id}/{vendor_model}): DELETE /v1/offers/{provider_id}/{vendor_model}/v1/offers(GET and POST /v1/offers): GET and POST /v1/offers/v1/ops/accounts/{provider}/{id}/state(POST /v1/ops/accounts/{provider}/{id}/state): POST /v1/ops/accounts/{provider}/{id}/state/v1/ops/agents/catalog(GET /v1/ops/agents/catalog): GET /v1/ops/agents/catalog/v1/ops/agents/import(POST /v1/ops/agents/import): POST /v1/ops/agents/import/v1/ops/drain(POST /v1/ops/drain): POST /v1/ops/drain/v1/ops/events(GET /v1/ops/events): GET /v1/ops/events/v1/ops/health(GET /v1/ops/health): GET /v1/ops/health/v1/ops/metrics/coverage(GET /v1/ops/metrics/coverage): GET /v1/ops/metrics/coverage/v1/ops/metrics/spec(GET /v1/ops/metrics/spec): GET /v1/ops/metrics/spec/v1/ops/version(GET /v1/ops/version): GET /v1/ops/version/v1/product/benchmarks(GET /v1/product/benchmarks): GET /v1/product/benchmarks/v1/product/collections(GET /v1/product/collections): GET /v1/product/collections/v1/product/models(GET /v1/product/models): GET /v1/product/models/v1/product/pricing(GET /v1/product/pricing): GET /v1/product/pricing/v1/product/providers(GET /v1/product/providers): GET /v1/product/providers/v1/product/rankings(GET /v1/product/rankings): GET /v1/product/rankings/v1/providers/{provider_id}/accounts/{account_id}/secret(PUT /v1/providers/{provider_id}/accounts/{account_id}/secret): PUT /v1/providers/{provider_id}/accounts/{account_id}/secret/v1/providers/{provider_id}/accounts/{account_id}/state(POST /v1/providers/{provider_id}/accounts/{account_id}/state): POST /v1/providers/{provider_id}/accounts/{account_id}/state/v1/providers/{provider_id}/accounts(GET and POST /v1/providers/{provider_id}/accounts): GET and POST /v1/providers/{provider_id}/accounts/v1/providers/{provider_id}(PATCH /v1/providers/{provider_id}): PATCH /v1/providers/{provider_id}/v1/providers(GET and POST /v1/providers): GET and POST /v1/providers/v1/responses(POST /v1/responses): POST /v1/responses/v1/route/explain/{model}(GET /v1/route/explain/{model}): GET /v1/route/explain/{model}/v1/route/measures(GET and PUT /v1/route/measures): GET and PUT /v1/route/measures/v1/route/policies/{scope}/{match}(DELETE and PUT /v1/route/policies/{scope}/{match}): DELETE and PUT /v1/route/policies/{scope}/{match}/v1/route/policies(GET /v1/route/policies): GET /v1/route/policies/v1/seats/{seat_id}/health(GET /v1/seats/{seat_id}/health): GET /v1/seats/{seat_id}/health/v1/seats(GET /v1/seats): GET /v1/seats/v1/usage/summary(GET /v1/usage/summary): GET /v1/usage/summary/v1/usage(GET /v1/usage): GET /v1/usage