Skip to content

API reference ​

This interactive reference is generated from the control plane's OpenAPI 3.1 specification — the same document served at runtime from GET /api/v1/openapi.json and attached to each release. CI re-emits the spec and fails on drift, so this page cannot fall behind the routers it documents.

Read the API overview first for authentication, error envelopes, and pagination conventions. For the maintained TypeScript package, see the Contracts SDK.

Generating a client

Generate against the instance you intend to integrate with, not against this page. Download /api/v1/openapi.json from that deployment, check its server URL and authentication requirements, then run a contract test against it before you ship — a deployment can run an older release than this site documents.

Request samples omit the base path

Every path below is relative to the /api/v1 prefix. Because OpenCrane declares a relative server URL — it is self-hosted and has no canonical host — the generated samples fall back to a bare host and drop that prefix. Prepend your own base URL: GET /mcp-servers is really GET https://<your-host>/api/v1/mcp-servers.

Multi-tenant AI agent platform management API.

Authentication

  • Human operators — OIDC browser flow via GET /auth/login → /auth/callback. Session cookie is set server-side.
  • In-cluster workloads use short-lived, audience-bound projected service-account tokens at their dedicated internal trust boundaries.
  • Endpoints tagged Auth and Meta (/auth/*, /openapi.json) require no credentials.

Servers​

/api/v1Versioned API prefix

List all MCP servers with grants and credentials​

GET
/mcp-servers

Responses​

MCP server list.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"name": "string",
  
  
"endpoint": "string",
  
  
"transport": "string",
  
  
"grants": [
  
  
  
{
  
  
  
}
  
  
],
  
  
"credentials": [
  
  
  
{
  
  
  
  
"id": "string",
  
  
  
  
"displayName": "string"
  
  
  
}
  
  
]
  
}
]

Playground​

Samples​


Create a new MCP server​

POST
/mcp-servers

Request Body​

application/json
JSON
{
  
"name": "string",
  
"endpoint": "string",
  
"transport": "string",
  
"grants": [
  
  
{
  
  
}
  
],
  
"credentials": [
  
  
{
  
  
}
  
]
}

Responses​

MCP server created.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"endpoint": "string",
  
"transport": "string",
  
"grants": [
  
  
{
  
  
}
  
],
  
"credentials": [
  
  
{
  
  
  
"id": "string",
  
  
  
"displayName": "string"
  
  
}
  
]
}

Playground​

Body

Samples​


Get a single MCP server by identifier​

GET
/mcp-servers/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

MCP server detail.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"endpoint": "string",
  
"transport": "string",
  
"grants": [
  
  
{
  
  
}
  
],
  
"credentials": [
  
  
{
  
  
  
"id": "string",
  
  
  
"displayName": "string"
  
  
}
  
]
}

Playground​

Variables
Key
Value

Samples​


Update an MCP server and fully replace grants and credentials​

PUT
/mcp-servers/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
}

Responses​

MCP server updated.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"endpoint": "string",
  
"transport": "string",
  
"grants": [
  
  
{
  
  
}
  
],
  
"credentials": [
  
  
{
  
  
  
"id": "string",
  
  
  
"displayName": "string"
  
  
}
  
]
}

Playground​

Variables
Key
Value
Body

Samples​


Delete an MCP server and its linked grant rows​

DELETE
/mcp-servers/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

MCP server deleted.

application/json
JSON
{
  
"id": "string",
  
"status": "string"
}

Playground​

Variables
Key
Value

Samples​


List the brokered credentials of an MCP server​

GET
/mcp-servers/{id}/credentials

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Credential list.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"displayName": "string"
  
}
]

Playground​

Variables
Key
Value

Samples​


Add a brokered credential to an MCP server (does not touch grants)​

POST
/mcp-servers/{id}/credentials

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
  
"displayName": "string"
}

Responses​

Credential added.

application/json
JSON
{
  
"id": "string",
  
"displayName": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Remove a single brokered credential from an MCP server​

DELETE
/mcp-servers/{id}/credentials/{credentialId}

Parameters​

Path Parameters

id*
Type
string
Required
credentialId*
Type
string
Required

Responses​

Credential deleted.

application/json
JSON
{
  
"id": "string",
  
"status": "string"
}

Playground​

Variables
Key
Value

Samples​


List the published MCP servers the calling user is entitled to​

GET
/mcp/catalog

Responses​

Entitlement-scoped catalogue.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"name": "string",
  
  
"description": "string",
  
  
"publisher": "string",
  
  
"glyph": "string",
  
  
"type": "string",
  
  
"approvalStatus": "string",
  
  
"credentialSchema": [
  
  
  
{
  
  
  
  
"key": "string",
  
  
  
  
"label": "string",
  
  
  
  
"required": true,
  
  
  
  
"sensitive": true,
  
  
  
  
"placeholder": "string",
  
  
  
  
"hint": "string"
  
  
  
}
  
  
],
  
  
"entitlementSummary": "string"
  
}
]

Playground​

Samples​


List the servers the calling user has installed​

GET
/mcp/installed

Responses​

Install list.

application/json
JSON
[
  
{
  
  
"serverId": "string",
  
  
"connectionStatus": "string",
  
  
"lastUsed": "string",
  
  
"connectedAccount": "string"
  
}
]

Playground​

Samples​


Install a catalogue server for the calling user​

POST
/mcp/installed

Request Body​

application/json
JSON
{
  
"serverId": "string"
}

Responses​

Server installed.

application/json
JSON
{
  
"serverId": "string",
  
"connectionStatus": "string",
  
"lastUsed": "string",
  
"connectedAccount": "string"
}

Playground​

Body

Samples​


Uninstall a server for the calling user (clears the stored credential)​

DELETE
/mcp/installed/{serverId}

Parameters​

Path Parameters

serverId*
Type
string
Required

Responses​

Server uninstalled.

Playground​

Variables
Key
Value

Samples​


Author a per-user credential (write-only) and mark the install connected​

PUT
/mcp/installed/{serverId}/credential

The submitted values are write-only: stored server-side as an opaque custody handle and NEVER returned by any response.

Parameters​

Path Parameters

serverId*
Type
string
Required

Request Body​

application/json
JSON
{
  
"values": {
  
  
"additionalProperties": "string"
  
}
}

Responses​

Credential connected.

application/json
JSON
{
  
"serverId": "string",
  
"connectionStatus": "string",
  
"lastUsed": "string",
  
"connectedAccount": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Clear a per-user credential, returning the install to needs-credential​

DELETE
/mcp/installed/{serverId}/credential

Parameters​

Path Parameters

serverId*
Type
string
Required

Responses​

Credential cleared.

application/json
JSON
{
  
"serverId": "string",
  
"connectionStatus": "string",
  
"lastUsed": "string",
  
"connectedAccount": "string"
}

Playground​

Variables
Key
Value

Samples​


Mark a remote-OAuth install connected after a successful handshake​

POST
/mcp/installed/{serverId}/oauth

Parameters​

Path Parameters

serverId*
Type
string
Required

Responses​

OAuth connected.

application/json
JSON
{
  
"serverId": "string",
  
"connectionStatus": "string",
  
"lastUsed": "string",
  
"connectedAccount": "string"
}

Playground​

Variables
Key
Value

Samples​


Disconnect a remote-OAuth install, returning it to needs-credential​

DELETE
/mcp/installed/{serverId}/oauth

Parameters​

Path Parameters

serverId*
Type
string
Required

Responses​

OAuth disconnected.

application/json
JSON
{
  
"serverId": "string",
  
"connectionStatus": "string",
  
"lastUsed": "string",
  
"connectedAccount": "string"
}

Playground​

Variables
Key
Value

Samples​


List every catalogue server regardless of status (org-admin governance view)​

GET
/mcp/servers

Responses​

All catalogue servers.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"name": "string",
  
  
"description": "string",
  
  
"publisher": "string",
  
  
"glyph": "string",
  
  
"type": "string",
  
  
"approvalStatus": "string",
  
  
"credentialSchema": [
  
  
  
{
  
  
  
  
"key": "string",
  
  
  
  
"label": "string",
  
  
  
  
"required": true,
  
  
  
  
"sensitive": true,
  
  
  
  
"placeholder": "string",
  
  
  
  
"hint": "string"
  
  
  
}
  
  
],
  
  
"entitlementSummary": "string"
  
}
]

Playground​

Samples​


Approve a server (pending-review → approved). Org-admin only​

POST
/mcp/servers/{id}/approve

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Server approved.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"description": "string",
  
"publisher": "string",
  
"glyph": "string",
  
"type": "string",
  
"approvalStatus": "string",
  
"credentialSchema": [
  
  
{
  
  
  
"key": "string",
  
  
  
"label": "string",
  
  
  
"required": true,
  
  
  
"sensitive": true,
  
  
  
"placeholder": "string",
  
  
  
"hint": "string"
  
  
}
  
],
  
"entitlementSummary": "string"
}

Playground​

Variables
Key
Value

Samples​


Publish a server (approved → published). Org-admin only​

POST
/mcp/servers/{id}/publish

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Server published.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"description": "string",
  
"publisher": "string",
  
"glyph": "string",
  
"type": "string",
  
"approvalStatus": "string",
  
"credentialSchema": [
  
  
{
  
  
  
"key": "string",
  
  
  
"label": "string",
  
  
  
"required": true,
  
  
  
"sensitive": true,
  
  
  
"placeholder": "string",
  
  
  
"hint": "string"
  
  
}
  
],
  
"entitlementSummary": "string"
}

Playground​

Variables
Key
Value

Samples​


Reject a server (→ disabled). Org-admin only​

POST
/mcp/servers/{id}/reject

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Server rejected.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"description": "string",
  
"publisher": "string",
  
"glyph": "string",
  
"type": "string",
  
"approvalStatus": "string",
  
"credentialSchema": [
  
  
{
  
  
  
"key": "string",
  
  
  
"label": "string",
  
  
  
"required": true,
  
  
  
"sensitive": true,
  
  
  
"placeholder": "string",
  
  
  
"hint": "string"
  
  
}
  
],
  
"entitlementSummary": "string"
}

Playground​

Variables
Key
Value

Samples​


Toggle a server's availability (true → published, false → disabled). Org-admin only​

POST
/mcp/servers/{id}/enabled

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
  
"enabled": true
}

Responses​

Server availability updated.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"description": "string",
  
"publisher": "string",
  
"glyph": "string",
  
"type": "string",
  
"approvalStatus": "string",
  
"credentialSchema": [
  
  
{
  
  
  
"key": "string",
  
  
  
"label": "string",
  
  
  
"required": true,
  
  
  
"sensitive": true,
  
  
  
"placeholder": "string",
  
  
  
"hint": "string"
  
  
}
  
],
  
"entitlementSummary": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Read a server's access policy. Org-admin only​

GET
/mcp/servers/{id}/access

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Access policy.

application/json
JSON
{
  
"serverId": "string",
  
"everyoneInOrg": true,
  
"groups": [
  
  
"string"
  
],
  
"users": [
  
  
{
  
  
  
"id": "string",
  
  
  
"name": "string",
  
  
  
"initials": "string",
  
  
  
"color": "string"
  
  
}
  
]
}

Playground​

Variables
Key
Value

Samples​


Replace a server's access policy wholesale. Org-admin only​

PUT
/mcp/servers/{id}/access

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
  
"everyoneInOrg": true,
  
"groups": [
  
  
"string"
  
],
  
"users": [
  
  
"string"
  
]
}

Responses​

Access policy updated.

application/json
JSON
{
  
"serverId": "string",
  
"everyoneInOrg": true,
  
"groups": [
  
  
"string"
  
],
  
"users": [
  
  
{
  
  
  
"id": "string",
  
  
  
"name": "string",
  
  
  
"initials": "string",
  
  
  
"color": "string"
  
  
}
  
]
}

Playground​

Variables
Key
Value
Body

Samples​


List the selectable users and groups for the access editor. Org-admin only​

GET
/mcp/directory

Responses​

Directory.

application/json
JSON
{
  
"users": [
  
  
{
  
  
  
"id": "string",
  
  
  
"name": "string",
  
  
  
"initials": "string",
  
  
  
"color": "string"
  
  
}
  
],
  
"groups": [
  
  
"string"
  
]
}

Playground​

Samples​


List the file/chat resource shares the caller is a member of​

GET
/resource-shares

Responses​

Resource shares the caller is in.

application/json
JSON
[
  
{
  
  
"groupId": "string",
  
  
"resourceType": "string",
  
  
"resourceId": "string",
  
  
"members": [
  
  
  
"string"
  
  
]
  
}
]

Playground​

Samples​


Share a file/chat with a user (creates/extends the resource's share group)​

POST
/resource-shares

Request Body​

application/json
JSON
{
  
"resourceType": "string",
  
"resourceId": "string",
  
"recipientSubject": "string"
}

Responses​

Recipient added (or already present).

application/json
JSON
{
  
"groupId": "string",
  
"resourceType": "string",
  
"resourceId": "string",
  
"members": [
  
  
"string"
  
]
}

Playground​

Body

Samples​


Revoke a recipient from a resource share​

DELETE
/resource-shares/{groupId}/recipients/{subject}

Parameters​

Path Parameters

groupId*
Type
string
Required
subject*
Type
string
Required

Responses​

Recipient revoked.

application/json
JSON
{
  
"groupId": "string",
  
"resourceType": "string",
  
"resourceId": "string",
  
"members": [
  
  
"string"
  
]
}

Playground​

Variables
Key
Value

Samples​


List the shares the authenticated caller has created​

GET
/shares

Responses​

Shares created by the caller.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"payloadType": "string",
  
  
"payloadId": "string",
  
  
"recipientType": "string",
  
  
"recipientId": "string",
  
  
"scope": "string",
  
  
"note": "string",
  
  
"sharedBy": "string",
  
  
"createdAt": "string"
  
}
]

Playground​

Samples​


Share an entitlement you hold with another user or group (least-privilege bounded)​

POST
/shares

Request Body​

application/json
JSON
{
  
"payloadType": "string",
  
"payloadId": "string",
  
"recipientType": "string",
  
"recipientId": "string",
  
"scope": "personal",
  
"note": "string"
}

Responses​

An identical share already existed (idempotent).

application/json
JSON
{
  
"id": "string",
  
"payloadType": "string",
  
"payloadId": "string",
  
"recipientType": "string",
  
"recipientId": "string",
  
"scope": "string",
  
"note": "string",
  
"sharedBy": "string",
  
"createdAt": "string"
}

Playground​

Body

Samples​


Revoke a share you created​

DELETE
/shares/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Share revoked.

application/json
JSON
{
  
"id": "string",
  
"status": "string"
}

Playground​

Variables
Key
Value

Samples​


List all groups with member counts and awareness grants​

GET
/groups

Responses​

Group list.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"name": "string",
  
  
"description": "string",
  
  
"memberCount": 0,
  
  
"awarenessGrants": [
  
  
  
{
  
  
  
}
  
  
]
  
}
]

Playground​

Samples​


Create a new group and optional awareness grants​

POST
/groups

Request Body​

application/json
JSON
{
  
"name": "string",
  
"description": "string"
}

Responses​

Group created.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"description": "string",
  
"memberCount": 0,
  
"awarenessGrants": [
  
  
{
  
  
}
  
]
}

Playground​

Body

Samples​


Get a single group by identifier​

GET
/groups/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Group detail.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"description": "string",
  
"memberCount": 0,
  
"awarenessGrants": [
  
  
{
  
  
}
  
]
}

Playground​

Variables
Key
Value

Samples​


Update a group and replace awareness grants​

PUT
/groups/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
}

Responses​

Group updated.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"description": "string",
  
"memberCount": 0,
  
"awarenessGrants": [
  
  
{
  
  
}
  
]
}

Playground​

Variables
Key
Value
Body

Samples​


Delete a group and its awareness grants​

DELETE
/groups/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Group deleted.

application/json
JSON
{
  
"id": "string",
  
"status": "string"
}

Playground​

Variables
Key
Value

Samples​


List all third-party sources​

GET
/third-party-sources

Responses​

Third-party source list.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"name": "string",
  
  
"type": "string",
  
  
"url": "string",
  
  
"syncStatus": "string",
  
  
"lastSyncedAt": "string"
  
}
]

Playground​

Samples​


Register a new third-party source​

POST
/third-party-sources

Request Body​

application/json
JSON
{
}

Responses​

Source registered.

application/json
JSON
{
}

Playground​

Body

Samples​


Get a single third-party source​

GET
/third-party-sources/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Source detail.

application/json
JSON
{
  
"id": "string",
  
"name": "string",
  
"type": "string",
  
"url": "string",
  
"syncStatus": "string",
  
"lastSyncedAt": "string"
}

Playground​

Variables
Key
Value

Samples​


Update a third-party source​

PUT
/third-party-sources/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
}

Responses​

Source updated.

application/json
JSON
{
}

Playground​

Variables
Key
Value
Body

Samples​


Delete a third-party source and its linked items​

DELETE
/third-party-sources/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Source deleted.

application/json
JSON
{
}

Playground​

Variables
Key
Value

Samples​


List BYOK provider key status for every supported provider (never the key value)​

GET
/providers/byok

Responses​

BYOK provider key status list.

application/json
JSON
[
  
{
  
  
"provider": "string",
  
  
"configured": true,
  
  
"litellmRegistered": true,
  
  
"updatedAt": "string"
  
}
]

Playground​

Samples​


Set or refresh a provider's raw key (writes a k8s Secret + LiteLLM credential)​

PUT
/providers/byok/{provider}

Parameters​

Path Parameters

provider*
Type
string
Required
Valid values
"openai""anthropic""gemini""mistral""deepseek""glm"

Request Body​

application/json
JSON
{
  
"apiKey": "string"
}

Responses​

Key set; returns the provider's status.

application/json
JSON
{
  
"provider": "string",
  
"configured": true,
  
"litellmRegistered": true,
  
"updatedAt": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Remove a provider's key (deletes the Secret, LiteLLM credential, and record)​

DELETE
/providers/byok/{provider}

Parameters​

Path Parameters

provider*
Type
string
Required
Valid values
"openai""anthropic""gemini""mistral""deepseek""glm"

Responses​

Key removed (idempotent — 204 even when no key was set).

Playground​

Variables
Key
Value

Samples​


List provider credentials (references only — never the key value)​

GET
/providers/credentials

Parameters​

Query Parameters

clusterTenant

Filter to one owning ClusterTenant.

Type
string

Responses​

Provider credential list.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"scope": "string",
  
  
"clusterTenant": "string",
  
  
"provider": "string",
  
  
"secretRef": "string",
  
  
"litellmCredentialName": "string",
  
  
"createdAt": "string",
  
  
"updatedAt": "string"
  
}
]

Playground​

Variables
Key
Value

Samples​


Create a provider credential reference (rejects any raw-key field)​

POST
/providers/credentials

Request Body​

application/json
JSON
{
  
"scope": "string",
  
"clusterTenant": "string",
  
"provider": "string",
  
"secretRef": "string",
  
"litellmCredentialName": "string"
}

Responses​

Provider credential created.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"provider": "string",
  
"secretRef": "string",
  
"litellmCredentialName": "string",
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Body

Samples​


Get a single provider credential by id​

GET
/providers/credentials/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Provider credential detail.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"provider": "string",
  
"secretRef": "string",
  
"litellmCredentialName": "string",
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Variables
Key
Value

Samples​


Update a provider credential reference (rejects any raw-key field)​

PUT
/providers/credentials/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
  
"scope": "string",
  
"clusterTenant": "string",
  
"provider": "string",
  
"secretRef": "string",
  
"litellmCredentialName": "string"
}

Responses​

Provider credential updated.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"provider": "string",
  
"secretRef": "string",
  
"litellmCredentialName": "string",
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Delete a provider credential​

DELETE
/providers/credentials/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Provider credential deleted.

application/json
JSON
{
  
"id": "string",
  
"status": "string"
}

Playground​

Variables
Key
Value

Samples​


List model definitions​

GET
/models

Parameters​

Query Parameters

clusterTenant

Filter to one owning ClusterTenant.

Type
string

Responses​

Model definition list.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"scope": "string",
  
  
"clusterTenant": "string",
  
  
"publicModelName": "string",
  
  
"litellmModelId": "string",
  
  
"upstreamModel": "string",
  
  
"apiBase": "string",
  
  
"isDefault": true,
  
  
"providerCredentialId": "string",
  
  
"createdAt": "string",
  
  
"updatedAt": "string"
  
}
]

Playground​

Variables
Key
Value

Samples​


Create a model definition and register it best-effort with LiteLLM​

POST
/models

Request Body​

application/json
JSON
{
  
"scope": "string",
  
"clusterTenant": "string",
  
"publicModelName": "string",
  
"upstreamModel": "string",
  
"apiBase": "string",
  
"isDefault": true,
  
"providerCredentialId": "string"
}

Responses​

Model definition created.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"publicModelName": "string",
  
"litellmModelId": "string",
  
"upstreamModel": "string",
  
"apiBase": "string",
  
"isDefault": true,
  
"providerCredentialId": "string",
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Body

Samples​


Get a single model definition by id​

GET
/models/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Model definition detail.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"publicModelName": "string",
  
"litellmModelId": "string",
  
"upstreamModel": "string",
  
"apiBase": "string",
  
"isDefault": true,
  
"providerCredentialId": "string",
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Variables
Key
Value

Samples​


Update a model definition​

PUT
/models/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Request Body​

application/json
JSON
{
  
"scope": "string",
  
"clusterTenant": "string",
  
"publicModelName": "string",
  
"upstreamModel": "string",
  
"apiBase": "string",
  
"isDefault": true,
  
"providerCredentialId": "string"
}

Responses​

Model definition updated.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"publicModelName": "string",
  
"litellmModelId": "string",
  
"upstreamModel": "string",
  
"apiBase": "string",
  
"isDefault": true,
  
"providerCredentialId": "string",
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Delete a model definition​

DELETE
/models/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Model definition deleted.

application/json
JSON
{
  
"id": "string",
  
"status": "string"
}

Playground​

Variables
Key
Value

Samples​


List model-routing defaults​

GET
/model-routing/defaults

Parameters​

Query Parameters

clusterTenant

Filter to one owning ClusterTenant.

Type
string

Responses​

Model-routing default list.

application/json
JSON
[
  
{
  
  
"id": "string",
  
  
"scope": "string",
  
  
"clusterTenant": "string",
  
  
"defaultModel": "string",
  
  
"autoConfig": {
  
  
  
"objective": "string",
  
  
  
"costQualitySlider": 0,
  
  
  
"qualityFloor": 0,
  
  
  
"maxBudgetUsd": 0,
  
  
  
"allowedModels": [
  
  
  
  
"string"
  
  
  
],
  
  
  
"latencyCeilingMs": 0,
  
  
  
"fallbacks": [
  
  
  
  
"string"
  
  
  
],
  
  
  
"sessionPin": true,
  
  
  
"explorationRate": 0
  
  
},
  
  
"createdAt": "string",
  
  
"updatedAt": "string"
  
}
]

Playground​

Variables
Key
Value

Samples​


Upsert the model-routing default for a (scope, clusterTenant) pair​

PUT
/model-routing/defaults

Request Body​

application/json
JSON
{
  
"scope": "string",
  
"clusterTenant": "string",
  
"defaultModel": "string",
  
"autoConfig": {
  
  
"objective": "string",
  
  
"costQualitySlider": 0,
  
  
"qualityFloor": 0,
  
  
"maxBudgetUsd": 0,
  
  
"allowedModels": [
  
  
  
"string"
  
  
],
  
  
"latencyCeilingMs": 0,
  
  
"fallbacks": [
  
  
  
"string"
  
  
],
  
  
"sessionPin": true,
  
  
"explorationRate": 0
  
}
}

Responses​

Model-routing default upserted.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"defaultModel": "string",
  
"autoConfig": {
  
  
"objective": "string",
  
  
"costQualitySlider": 0,
  
  
"qualityFloor": 0,
  
  
"maxBudgetUsd": 0,
  
  
"allowedModels": [
  
  
  
"string"
  
  
],
  
  
"latencyCeilingMs": 0,
  
  
"fallbacks": [
  
  
  
"string"
  
  
],
  
  
"sessionPin": true,
  
  
"explorationRate": 0
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Body

Samples​


Get a single model-routing default by id​

GET
/model-routing/defaults/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Model-routing default detail.

application/json
JSON
{
  
"id": "string",
  
"scope": "string",
  
"clusterTenant": "string",
  
"defaultModel": "string",
  
"autoConfig": {
  
  
"objective": "string",
  
  
"costQualitySlider": 0,
  
  
"qualityFloor": 0,
  
  
"maxBudgetUsd": 0,
  
  
"allowedModels": [
  
  
  
"string"
  
  
],
  
  
"latencyCeilingMs": 0,
  
  
"fallbacks": [
  
  
  
"string"
  
  
],
  
  
"sessionPin": true,
  
  
"explorationRate": 0
  
},
  
"createdAt": "string",
  
"updatedAt": "string"
}

Playground​

Variables
Key
Value

Samples​


Delete a model-routing default​

DELETE
/model-routing/defaults/{id}

Parameters​

Path Parameters

id*
Type
string
Required

Responses​

Model-routing default deleted.

application/json
JSON
{
  
"id": "string",
  
"status": "string"
}

Playground​

Variables
Key
Value

Samples​


Get global monthly spend ceiling​

GET
/ai-budget/global

Responses​

Global budget.

application/json
JSON
{
  
"monthlyLimitUsd": 0,
  
"currentSpendUsd": 0,
  
"budgetAlertState": "string"
}

Playground​

Samples​


Update the global monthly spend ceiling​

PUT
/ai-budget/global

Request Body​

application/json
JSON
{
  
"monthlyLimitUsd": 0
}

Responses​

Global budget updated.

application/json
JSON
{
  
"monthlyLimitUsd": 0,
  
"currentSpendUsd": 0,
  
"budgetAlertState": "string"
}

Playground​

Body

Samples​


List all per-account monthly spend ceilings​

GET
/ai-budget/accounts

Responses​

Account budgets.

application/json
JSON
[
  
{
  
  
"monthlyLimitUsd": 0,
  
  
"currentSpendUsd": 0,
  
  
"budgetAlertState": "string"
  
}
]

Playground​

Samples​


Create or update the budget ceiling for a specific account​

PUT
/ai-budget/accounts/{userId}

Parameters​

Path Parameters

userId*
Type
string
Required

Request Body​

application/json
JSON
{
  
"monthlyLimitUsd": 0
}

Responses​

Account budget updated.

application/json
JSON
{
  
"monthlyLimitUsd": 0,
  
"currentSpendUsd": 0,
  
"budgetAlertState": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Remove the per-account budget ceiling​

DELETE
/ai-budget/accounts/{userId}

Parameters​

Path Parameters

userId*
Type
string
Required

Responses​

Budget removed.

application/json
JSON
{
}

Playground​

Variables
Key
Value

Samples​


Audit​

Operations​


Query audit log entries with cursor pagination​

GET
/audit

Parameters​

Query Parameters

limit

Maximum entries to return.

Type
integer
Default
100
Minimum
1
Maximum
1000
cursor

Opaque cursor from a previous response for keyset pagination.

Type
string

Responses​

Paginated audit entries.

application/json
JSON
{
  
"data": [
  
  
{
  
  
  
"timestamp": "string",
  
  
  
"tenant": "string",
  
  
  
"action": "string",
  
  
  
"resource": "string",
  
  
  
"message": "string"
  
  
}
  
],
  
"pagination": {
  
  
"limit": 0,
  
  
"nextCursor": "string",
  
  
"hasMore": true
  
}
}

Playground​

Variables
Key
Value

Samples​


List the signed-in owner's pending tool approvals​

GET
/me/approvals

The server derives the owner and silo from the browser session and host. It returns at most fifty actionable approvals and never returns arguments, proof data, policy digests, or resume credentials.

Responses​

Pending owner-bound tool approvals.

application/json
JSON
{
  
"approvals": [
  
  
{
  
  
  
"approvalRequestId": "string",
  
  
  
"runId": "string",
  
  
  
"attempt": 0,
  
  
  
"toolRevisionId": "string",
  
  
  
"expiresAt": "string",
  
  
  
"createdAt": "string"
  
  
}
  
]
}

Playground​

Samples​


Approve or deny one pending tool action owned by the signed-in user​

POST
/me/approvals/{approvalRequestId}/decision

The server derives the owner and silo from the browser session. The body can contain only the terminal decision; it cannot choose another run, subject, tool result, or resume credential.

Parameters​

Path Parameters

approvalRequestId*

Opaque identifier for the pending approval.

Type
string
Required

Request Body​

application/json
JSON
{
  
"decision": "string"
}

Responses​

Decision recorded or identical terminal decision replayed.

application/json
JSON
{
  
"approvalRequestId": "string",
  
"state": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Queue one signed-in owner's instruction for a running agent​

POST
/me/runs/{runId}/steering

The server derives the owner, silo, and current attempt. The instruction is queued durably and is consumed only at the runtime's fenced safe boundary.

Parameters​

Path Parameters

runId*

Opaque run identifier.

Type
string
Required

Request Body​

application/json
JSON
{
  
"text": "string"
}

Responses​

Steering request queued for the current run attempt.

application/json
JSON
{
  
"steeringRequestId": "string",
  
"attempt": 0,
  
"state": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


List a signed-in owner's fifty most recent personal runs​

GET
/me/runs

The server derives the owner and silo from session and host, then returns at most fifty canonical lifecycle summaries ordered newest first.

Responses​

Recent canonical lifecycle views for the owned runs.

application/json
JSON
{
  
"runs": [
  
  
{
  
  
  
"runId": "string",
  
  
  
"attempt": 0,
  
  
  
"state": "string",
  
  
  
"threadId": "string",
  
  
  
"agentRevisionId": "string",
  
  
  
"acceptedAt": "string",
  
  
  
"finishedAt": "string"
  
  
}
  
]
}

Playground​

Samples​


Start a signed-in user's personal run from an existing conversation​

POST
/me/runs

The body may name only a thread and idempotency key. The server derives the session subject, host silo, personal AgentService, signed personal membership assertion, organization, scope, dataset, and immutable run input snapshot.

Request Body​

application/json
JSON
{
  
"threadId": "string",
  
"requestIdempotencyKey": "string"
}

Responses​

A duplicate idempotency key returned the already-admitted run.

application/json
JSON
{
  
"runId": "string"
}

Playground​

Body

Samples​


Return one signed-in owner's personal run status​

GET
/me/runs/{runId}

The server derives the owner and silo from session and host. It never accepts owner coordinates from the request.

Parameters​

Path Parameters

runId*

Opaque run identifier.

Type
string
Required

Responses​

Current canonical lifecycle view for the owned run.

application/json
JSON
{
  
"runId": "string",
  
"attempt": 0,
  
"state": "string",
  
"threadId": "string",
  
"agentRevisionId": "string",
  
"acceptedAt": "string",
  
"finishedAt": "string"
}

Playground​

Variables
Key
Value

Samples​


Persona​


Return the signed-in owner's resumable persona onboarding state​

GET
/me/persona

Responses​

Durable onboarding progress without compiled persona instructions.

application/json
JSON
{
  
"state": "string",
  
"interviewId": "string",
  
"answeredQuestionCount": 0,
  
"questionCount": 0,
  
"personaRevisionId": "string"
}

Playground​

Samples​


Conversations​


Replay the signed-in participant's canonical conversation events​

GET
/me/conversations/{threadId}/events

The server derives the participant and silo from the browser session. It streams display-safe canonical events only when that participant belongs to the selected thread.

Parameters​

Header Parameters

Last-Event-ID

Opaque canonical event cursor. It must match cursor when both are supplied.

Type
string

Path Parameters

threadId*

Opaque conversation-thread identifier.

Type
string
Required

Query Parameters

cursor

Opaque canonical event cursor. The Last-Event-ID header is an equivalent resume mechanism.

Type
string

Responses​

A bounded text/event-stream replay. An empty stream does not disclose whether the thread exists or belongs to another participant.

text/event-stream
JSON
"string"

Playground​

Headers
Variables
Key
Value

Samples​


Agent services​


List managed agent services in the signed-in caller's silo​

GET
/agent-services

The server derives the silo from the browser session and request host. It returns at most two hundred managed-service summaries, ordered by most recently updated first.

Responses​

Managed agent services in the selected silo.

application/json
JSON
{
  
"services": [
  
  
{
  
  
  
"id": "string",
  
  
  
"siloId": "string",
  
  
  
"kind": "string",
  
  
  
"name": "string",
  
  
  
"state": "string",
  
  
  
"activeRevisionId": "string",
  
  
  
"workloadProfile": "string",
  
  
  
"createdAt": "string",
  
  
  
"updatedAt": "string"
  
  
}
  
]
}

Playground​

Samples​


Apply one accepted personal model selection to future runs​

POST
/me/configuration/changes/{changeId}/materialize

The server derives the owner, silo, trusted time, active personal revision, and registered model definition. It creates and activates a new immutable AgentRevision; it never rewrites an active run snapshot. Accepted persona refreshes remain in their proposal-bound interview flow.

Parameters​

Path Parameters

changeId*
Type
string
Required

Request Body​

application/json
JSON
{
}

Responses​

Model selection applied, or the accepted proposal belongs to the persona-refresh workflow.

application/json
JSON
{
  
"changeId": "string",
  
"state": "applied",
  
"agentRevisionId": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


Accept or reject one signed-in owner's configuration proposal​

POST
/me/configuration/changes/{changeId}/decision

The server derives the owner, silo, and decision time. A decision records consent only; it never applies a patch to an existing run snapshot.

Parameters​

Path Parameters

changeId*
Type
string
Required

Request Body​

application/json
JSON
{
  
"decision": "accepted"
}

Responses​

Owner decision recorded.

application/json
JSON
{
  
"changeId": "string",
  
"state": "string"
}

Playground​

Variables
Key
Value
Body

Samples​


List the signed-in owner's personal configuration proposals​

GET
/me/configuration/changes

The server derives the owner and silo from session and host. It returns at most fifty durable future-session proposals, never a mutable run snapshot.

Responses​

Owner-bound configuration proposal history.

application/json
JSON
{
  
"changes": [
  
  
{
  
  
  
"changeId": "string",
  
  
  
"requestedPatch": {
  
  
  
  
"kind": "persona_refresh"
  
  
  
},
  
  
  
"state": "string",
  
  
  
"sourceThreadId": "string",
  
  
  
"sourceRunId": "string",
  
  
  
"proposedAt": "string",
  
  
  
"decidedAt": "string",
  
  
  
"rejectionReason": "string"
  
  
}
  
]
}

Playground​

Samples​


Skills​

Operations​


List governed skills in the signed-in caller's silo​

GET
/skills

The server derives the silo from the browser session and request host. It returns at most two hundred catalogue summaries, never skill bundles, artifact addresses, manifests, review evidence, signatures, or workload coordinates.

Responses​

Browser-safe governed skill catalogue.

application/json
JSON
{
  
"skills": [
  
  
{
  
  
  
"id": "string",
  
  
  
"name": "string",
  
  
  
"description": "string",
  
  
  
"state": "string",
  
  
  
"currentRevisionId": "string",
  
  
  
"currentRevisionState": "string",
  
  
  
"createdAt": "string",
  
  
  
"updatedAt": "string"
  
  
}
  
]
}

Playground​

Samples​


Personal assets​


List the signed-in owner's assets​

GET
/me/assets

The server derives the owner and silo from the browser session and request host. It returns at most fifty non-deleted asset metadata records, never bytes, content addresses, provenance, leases, receipts, or outbox data.

Responses​

Owner-bound personal asset metadata.

application/json
JSON
{
  
"assets": [
  
  
{
  
  
  
"id": "string",
  
  
  
"kind": "string",
  
  
  
"state": "string",
  
  
  
"currentRevisionId": "string",
  
  
  
"mediaType": "string",
  
  
  
"byteLength": "string",
  
  
  
"indexState": "string",
  
  
  
"createdAt": "string",
  
  
  
"updatedAt": "string"
  
  
}
  
]
}

Playground​

Samples​


Return current auth mode and authenticated user identity (if any)​

GET
/auth/me

No authentication required. Returns 200 with the current session or an anonymous identity when no session is established.

Responses​

Auth status.

application/json
JSON
{
  
"mode": "string",
  
"authenticated": true,
  
"user": {
  
  
"sub": "string",
  
  
"issuer": "string",
  
  
"groups": [
  
  
  
"string"
  
  
],
  
  
"isPlatformOperator": true,
  
  
"isOrgAdmin": true,
  
  
"clusterTenant": "string",
  
  
"ownedOrgs": [
  
  
  
{
  
  
  
  
"clusterTenant": "string",
  
  
  
  
"role": "string"
  
  
  
}
  
  
],
  
  
"email": "string",
  
  
"emailVerified": true,
  
  
"name": "string",
  
  
"picture": "string",
  
  
"authenticatedAt": "string"
  
}
}

Playground​

Samples​


Redirect the browser to the configured OIDC identity provider to start login​

GET
/auth/login

Browser redirect — not intended for programmatic use. Returns 503 when OIDC is not configured.

Parameters​

Query Parameters

returnTo

Path to redirect back to after a successful login.

Type
string

Responses​

Redirect to identity provider.

Playground​

Variables
Key
Value

Samples​


OIDC authorization callback — validates the response and establishes a session​

GET
/auth/callback

Called by the identity provider after a successful login. Redirects back to the SPA.

Parameters​

Query Parameters

code
Type
string
state
Type
string

Responses​

Redirect back into the application.

Playground​

Variables
Key
Value

Samples​


Destroy the current session and return the IdP RP-initiated logout URL​

POST
/auth/logout

Invalidates the server-side session. When OIDC is enabled and the identity provider advertises an end_session_endpoint, returns the URL the browser should navigate to so the upstream IdP session is also terminated (OIDC RP-Initiated Logout). The local session is always destroyed; endSessionUrl is null when no upstream logout is possible (OIDC disabled, IdP exposes no end-session endpoint, or the session captured no id_token). Non-browser callers may ignore the URL.

Responses​

Session destroyed; optional IdP logout URL returned.

application/json
JSON
{
  
"endSessionUrl": "string"
}

Playground​

Samples​


Meta​


Retrieve the OpenAPI 3.1 specification for this API​

GET
/openapi.json

Responses​

OpenAPI 3.1 document.

application/json
JSON
{
}

Playground​

Samples​


Powered by VitePress OpenAPI

Released under the AGPL-3.0-or-later License.