Compute quotas (always). Credential-plane / KeyHive BYOK when KeyHive is enabled; HTTP 410 when SANDBOX_LLM_EGRESS=gateway
Compute quotas (always). Credential-plane / KeyHive BYOK when KeyHive is enabled; HTTP 410 when SANDBOX_LLM_EGRESS=gateway
Every request needs a credential — see Authentication.
Always live: compute quotas. Credential plane: KeyHive BYOK when SANDBOX_LLM_EGRESS=direct (admin key); returns HTTP 410 when egress is gateway. See Provisioning credentials.
| Method | Path | Summary |
|---|
GET | /sandbox/v1/admin/credential-plane/keys | Admin: list provider key ids (KeyHive; 410 when Gateway egress) |
POST | /sandbox/v1/admin/credential-plane/keys | Admin: append LLM provider key (KeyHive; 410 when Gateway egress) |
DELETE | /sandbox/v1/admin/credential-plane/keys/{key_id} | Admin: deactivate a provider key (KeyHive; 410 when Gateway egress) |
POST | /sandbox/v1/admin/credential-plane/keys/{key_id}/rotate | Admin: rotate a provider key (KeyHive; 410 when Gateway egress) |
POST | /sandbox/v1/admin/credential-plane/teams | Admin: create team (KeyHive credential plane; 410 when Gateway egress) |
POST | /sandbox/v1/admin/keyhive/keys | Admin: add LLM provider key (legacy KeyHive path; 410 when Gateway egress) |
POST | /sandbox/v1/admin/keyhive/teams | Admin: create team (legacy KeyHive path; 410 when Gateway egress) |
DELETE | /sandbox/v1/admin/quotas/{tenant}/{project} | Admin: delete a tenant/project concurrency quota |
GET | /sandbox/v1/admin/quotas/{tenant}/{project} | Admin: inspect a tenant/project concurrency quota |
PUT | /sandbox/v1/admin/quotas/{tenant}/{project} | Admin: create or replace a tenant/project concurrency quota |
Accepted on every endpoint on this page.
| Name | In | Type | Required | Description |
|---|
x-correlation-id | header | string | no | End-to-end correlation id for this eval run. When set, the gateway and downstream services honor it verbatim in logs, Cloud Trace span attributes, async job payloads, and Langfuse trace.id. When omitted, the gateway generates a ULID and echoes it on the response. |
GET /sandbox/v1/admin/credential-plane/keys
| Name | In | Type | Required | Description |
|---|
namespace | query | string | yes | |
| Status | Description | Body |
|---|
200 | Successful Response | object |
410 | Credential plane off (Gateway egress) | — |
422 | Validation Error | HTTPValidationError |
POST /sandbox/v1/admin/credential-plane/keys
| Name | In | Type | Required | Description |
|---|
X-Sandbox-Project-Id | header | string | null | no | Project to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted. |
X-Sandbox-Tenant-Id | header | string | null | no | Tenant for this request. Must match the credential's tenant when the credential carries one. |
application/json, required
| Status | Description | Body |
|---|
200 | Successful Response | object |
410 | Credential plane off (Gateway egress) | — |
422 | Validation Error | HTTPValidationError |
DELETE /sandbox/v1/admin/credential-plane/keys/{key_id}
| Name | In | Type | Required | Description |
|---|
key_id | path | string | yes | |
| Status | Description | Body |
|---|
200 | Successful Response | object |
410 | Credential plane off (Gateway egress) | — |
422 | Validation Error | HTTPValidationError |
POST /sandbox/v1/admin/credential-plane/keys/{key_id}/rotate
| Name | In | Type | Required | Description |
|---|
key_id | path | string | yes | |
application/json, required
| Status | Description | Body |
|---|
200 | Successful Response | object |
410 | Credential plane off (Gateway egress) | — |
422 | Validation Error | HTTPValidationError |
POST /sandbox/v1/admin/credential-plane/teams
| Name | In | Type | Required | Description |
|---|
X-Sandbox-Project-Id | header | string | null | no | Project to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted. |
X-Sandbox-Tenant-Id | header | string | null | no | Tenant for this request. Must match the credential's tenant when the credential carries one. |
application/json, required
| Status | Description | Body |
|---|
200 | Successful Response | object |
410 | Credential plane off (Gateway egress) | — |
422 | Validation Error | HTTPValidationError |
POST /sandbox/v1/admin/keyhive/keys
| Name | In | Type | Required | Description |
|---|
X-Sandbox-Project-Id | header | string | null | no | Project to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted. |
X-Sandbox-Tenant-Id | header | string | null | no | Tenant for this request. Must match the credential's tenant when the credential carries one. |
application/json, required
| Status | Description | Body |
|---|
200 | Successful Response | object |
410 | Credential plane off (Gateway egress) | — |
422 | Validation Error | HTTPValidationError |
POST /sandbox/v1/admin/keyhive/teams
| Name | In | Type | Required | Description |
|---|
X-Sandbox-Project-Id | header | string | null | no | Project to bill and rate-limit this request against. Validated against the credential: a project-scoped token may only name its own project, and gets 403 otherwise. Defaults to the token's project when omitted. |
X-Sandbox-Tenant-Id | header | string | null | no | Tenant for this request. Must match the credential's tenant when the credential carries one. |
application/json, required
| Status | Description | Body |
|---|
200 | Successful Response | object |
410 | Credential plane off (Gateway egress) | — |
422 | Validation Error | HTTPValidationError |
DELETE /sandbox/v1/admin/quotas/{tenant}/{project}
| Name | In | Type | Required | Description |
|---|
tenant | path | string | yes | |
project | path | string | yes | |
| Status | Description | Body |
|---|
200 | Successful Response | any |
422 | Validation Error | HTTPValidationError |
GET /sandbox/v1/admin/quotas/{tenant}/{project}
| Name | In | Type | Required | Description |
|---|
tenant | path | string | yes | |
project | path | string | yes | |
| Status | Description | Body |
|---|
200 | Successful Response | any |
422 | Validation Error | HTTPValidationError |
PUT /sandbox/v1/admin/quotas/{tenant}/{project}
| Name | In | Type | Required | Description |
|---|
tenant | path | string | yes | |
project | path | string | yes | |
application/json, required — QuotaPolicyRequest
| Field | Type | Required | Description |
|---|
max_concurrent | integer | yes | |
| Status | Description | Body |
|---|
200 | Successful Response | any |
422 | Validation Error | HTTPValidationError |
The object shapes referenced above.
| Field | Type | Required | Description |
|---|
detail | ValidationError[] | no | |
Admin request to set one project or tenant-default concurrency limit.
| Field | Type | Required | Description |
|---|
max_concurrent | integer | yes | |
| Field | Type | Required | Description |
|---|
loc | string | integer[] | yes | |
msg | string | yes | |
type | string | yes | |
input | any | no | |
ctx | object | no | |
Machine-readable spec: OpenAPI YAML.