HTTP API reference¶
AIplane has separate interfaces for model clients, the browser application, public agent visitors, agent-to-agent calls and webhook triggers. Credentials for one interface do not automatically authorize another interface.
Model clients¶
Use Authorization: Bearer <token> (the scheme name in any case) or x-api-key: <token>. Personal tokens
start with gwk_; system-principal tokens start with gws_ and use their own
principal grants. Browser cookies do not authenticate /v1 requests. The
gateway validates its credential and supplies the configured upstream key
when forwarding; client credentials are not passed to the model provider.
| Operation | Request | Result and prerequisite |
|---|---|---|
GET /v1/models |
||
GET /v1/models/{*id} |
||
POST /v1/chat/completions |
||
POST /v1/responses |
||
GET /v1/responses/{*id} |
||
DELETE /v1/responses/{*id} |
||
POST /v1/messages |
||
POST /v1/messages/count_tokens |
||
POST /v1/systemone |
||
POST /v1/embeddings |
||
POST /v1/rerank |
||
POST /v1/images/generations |
||
POST /v1/images/edits |
||
POST /v1/audio/transcriptions |
||
POST /v1/audio/speech |
||
GET /v1/sandbox/files/{run}/{filename} |
/v1/responses keeps a response for 30 days when the request has store on
(the default), so previous_response_id can continue it; only the person or
principal whose token created it can read, continue or delete it.
OpenAI-compatible upstreams determine many request options and response fields. AIplane compatibility is endpoint-specific; an upstream's additional endpoint is not automatically exposed by the gateway.
Model facts¶
GET /v1/models and GET /v1/models/{*id} return OpenAI model objects with
additional fields. Every entry has kind, the pool kind that serves it
(chat, transcription, embedding, image, speech, rerank or
system_one). A chat model also carries, only where the gateway holds the
fact:
| Field | Source |
|---|---|
context_window |
The model's context window from model settings, else the window its backend reports. Compaction and the tool-output budget use the same value. |
max_output_tokens |
max_completion_tokens or max_tokens from the model's request defaults. |
capabilities.vision, capabilities.tools |
Capabilities an administrator set or the gateway learned from a backend refusal. |
An alias reports the facts of the model it resolves to. An automatic route reports only its own settings. A field the gateway does not know is absent, never filled with a guess.
{"id":"Qwen/Qwen3.6-35B-A3B-FP8","object":"model","created":1792011760,
"owned_by":"aiplane","kind":"chat","context_window":131072,
"max_output_tokens":8192,"capabilities":{"vision":true,"tools":true}}
OpenCode plugin¶
GET /clients/opencode/aiplane.js serves a plugin for OpenCode v2 with this
gateway's public URL filled in. It needs no sign-in and contains no
credential. Saved as ~/.config/opencode/plugins/aiplane.js, it adds the
aiplane integration, which signs in with a personal gwk_ token
(opencode auth login aiplane), and the aiplane provider, whose models are
the token's chat models from /v1/models. The plugin maps context_window,
max_output_tokens and capabilities onto OpenCode's model limits and
capabilities. Where the gateway reports no window it keeps OpenCode's own
fallbacks. The output limit never exceeds half the window, because OpenCode
reserves it inside the window. A model accepts images only when the gateway
reports vision: true; tools stay enabled unless it reports tools: false.
Models are reloaded when the stored token changes, and re-fetched on a five
minute tick — a model granted to the token, or a context window an operator
set, reaches the client without a restart. A failed tick keeps the last good
listing. OpenCode v1 is not supported.
First completion and streaming¶
Set AIPLANE_TOKEN from your secret store and substitute an actually accessible
model ID. An OpenAI-compatible SDK uses <AIplane-origin>/v1 as its base URL.
curl https://aiplane.example.com/v1/chat/completions \
-H "Authorization: Bearer $AIPLANE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"model":"your-model-id","messages":[{"role":"user","content":"Hello"}]}'
For streaming, add "stream":true to that JSON and use a streaming-capable
client (curl -N for a terminal). OpenAI chat uses text/event-stream with
data: frames and [DONE]. OpenAI Responses (/v1/responses) and Anthropic
Messages use their own named events.
Errors can occur after streaming headers have been sent; clients must inspect
stream events as well as the initial HTTP status.
Server-side tools and client-owned tools¶
Token tool access must be enabled, and the tool must be registered, granted and available in the caller's context. Built-in missing capability states default to Auto; missing connector/skill states default to Off. Auto initially offers tool discovery and adds selected schemas in later rounds. Off excludes the capability; On offers it directly.
Gateway-owned calls execute inside AIplane and their results feed subsequent model rounds. Client-owned calls are returned to the client to execute. Chat-only tools require a browser conversation and are not offered through the model API. Tools with a pending human-approval requirement cannot simply execute through an unattended API request.
The gateway tool loop has a hard upstream-round budget (MAX_TOOL_ROUNDS, 16).
When the budget closes the turn, it requests a final answer from collected
results. A successful OpenAI response can include an additive aiplane
object with tool_rounds and tool_budget_exhausted; a stream includes this
signal in its finish chunk. A textless final/closing result can fail with
tool_budget_exhausted. Client-owned tool handoffs do not carry that signal.
Routing and diagnostic headers¶
Aliases and automatic routes use the standard model field. The configured
model defaults fill omitted values; explicit client settings take precedence.
Pool/group permissions and a token's own model restriction are cumulative.
| Header | Meaning |
|---|---|
X-Gateway-Resolved-Model |
Effective model when it differs from the requested ID. |
X-Gateway-Backend |
Backend identity added by the routing response helper. |
X-Gateway-Tool-Rounds |
Upstream rounds for a buffered tool-loop completion. |
X-Gateway-Tool-Budget-Exhausted |
Budget closed the buffered completion turn. |
X-Gateway-Route-Alias |
Automatic route alias. |
X-Gateway-Route-Version |
Automatic route decision version. |
X-Gateway-Route-Reason |
Decision reason. |
X-Gateway-Route-Target |
Effective automatic-route target. |
X-Gateway-Route-Suggested-Target |
Suggested target where supplied by the decision. |
X-Gateway-Route-Confidence |
Confidence where supplied by the decision. |
Automatic-route session affinity accepts X-Gateway-Session-Id or
X-Gateway-Session. Reuse an identifier for the same client conversation.
Headers depend on the code path and decision; clients must tolerate absence.
Reranking¶
POST /v1/rerank scores documents against a query with a model from a
rerank pool, the same backends knowledge search reranks with. The body is
relayed to the backend unchanged, so send the request in the backend's own
dialect. Cohere, Jina and vLLM accept this shape; Text Embeddings Inference,
for example, names the passages texts instead of documents:
curl https://aiplane.example.com/v1/rerank \
-H "Authorization: Bearer $AIPLANE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"model":"your-rerank-model","query":"refund policy","documents":["first passage","second passage"],"top_n":1}'
The gateway reads only model: it resolves aliases, rewrites model to the
real ID, forwards the body unchanged to the backend's /rerank and relays the
backend's response, so the response shape (for example results[] with
index and relevance_score) is the backend's.
Rerank models are ordinary models for access purposes, like embedding
models: /v1/models lists them, a token's model restriction can include
them, a system principal can be granted them, and the pool's group
restriction applies to the caller. A token restricted to other models gets
403 model_not_allowed; a system principal without a grant on the model gets
404 model_not_found, as does an unknown model. No healthy backend returns
503. Knowledge search reranks through the same pools as a gateway-internal
call: it is neither subject to the searching person's pool group restrictions
nor metered.
Every call is recorded as usage of kind rerank and counts against
request-count limits. Tokens are recorded only when the backend's response
carries a usage object with prompt_tokens or total_tokens; a bare
total_tokens (as vLLM reports) counts as input tokens, charged at the
model's input price when it is priced per token. A backend that reports no
usage (Text Embeddings Inference) or reports something other than tokens
(Cohere's meta.billed_units.search_units) is recorded with no tokens and no
cost, so its calls do not count against token quotas or spend limits.
POST /v1/embeddings follows the same rule: a bare total_tokens counts as
input tokens.
Browser application API¶
/api/v0 is the JSON API used by the SPA. Most operations require the signed
browser id session cookie. Handlers enforce additional owner, group,
administrator or agent-management permissions. A personal model API token is
not a replacement for a browser session.
Examples of its task families:
| Family | Purpose and documentation |
|---|---|
/api/v0/chat/* |
Conversation CRUD, messages, steering, cancellation, sharing, forking, files and documents; chat, files. |
/api/v0/tokens*, /api/v0/me* |
Personal credentials, identity and preferences; account guide. |
/api/v0/memories*, /api/v0/tools*, /api/v0/integrations*, /api/v0/skills* |
Personal capabilities, connections and memories; tools. |
/api/v0/scheduled*, /api/v0/webhooks*, /api/v0/inbox* |
Automation and durable decisions; automation guide. |
/api/v0/agents* |
Agent drafts, grants, evaluation, publication and observation; agent guides. |
/api/v0/dots* |
List/create/active-state require resolved can_manage_dots; owner-scoped access remains enforced. The four connection routes additionally admit organization member writers for explicit own-principal OAuth management; they return independent action capabilities and no user credential. The memory routes also admit organization member readers and writers through current membership and existing shares; shared-note writes additionally require gateway administration. The workspace routes retain personal ownership, including inactive Dots. Listing returns actual storage availability, busy state and nullable metadata; raw downloads use attachment disposition, nosniff and no-store. Uploads and reads are capped at 50 MiB; writes, folder creation and removal require idle storage. Remaining routes retain personal ownership. Personal Dot lifecycle, tool selection, tool/action approval rules, private chats, memory and activity; scheduled actions and webhooks can run as an owned Dot; AIplane Dots. |
/api/v0/organizations* |
Current group-derived membership, organization details and named organization Dot creation/activation. Creation requires membership and agent-management permission; configuration uses existing agent shares and principal grants. Organization member writers can run private saved-draft and pinned published conversations through the existing agent test routes; organization Dots. |
/api/v0/rag* |
Knowledge collections, snapshots, indexing and profiles; knowledge. |
/api/v0/admin/* |
Administrative models, grants, settings and catalogs; administration guides. |
/api/v0/setup/* |
Verified setup/recovery state machine. |
POST /api/v0/skills/draft accepts {name, goal, steps, stop_conditions, model} from a signed-in user and returns {manifest, model, saved:false}. It requires personal-skill storage, validates the model against the caller's currently offered chat models, and meters generation to that user. It has no tool execution or persistence side effect. POST /api/v0/skills saves the reviewed manifest; JSON skill edits must set overwrite:true, while a create that collides with an existing personal skill returns 409.
The running gateway supplies /openapi.json, a typed OpenAPI contract for the
registered /api/v0 routes. It describes operations, path parameters, request
and response schemas, security requirements and the shared error envelope.
Use it as the machine-readable contract for the exact build you are calling.
Most /api/v0 refusals return an error object with a readable message and
machine-readable type and code; validation responses may also include
field-level issues. Check each operation's OpenAPI response schema for details.
Organization ownership and configuration¶
Administrators create and edit organization metadata through
/api/v0/admin/organizations. member_groups contains actual gateway-group
names. The list response's member_group_user_counts maps each bound group
name to its count of locally known users, resolved from each user's latest
stored OIDC claim values; default groups count every locally known user. It is
not a live IdP directory count. An empty list grants no membership. Updates require the opaque
expected_revision returned by the server; a stale revision returns 409
without replacing metadata or group bindings.
Member organization lists contain actual memberships. Dot configuration access intersects that membership with the existing user/group share and agent-management permission. Membership alone does not expose a Dot's configuration. Respond-only shares supply existing Inbox standing rather than the agent configuration response. Administrator recovery remains available through the existing administration and agent-management surfaces.
Agent summaries carry nullable dot metadata with the persisted Dot name,
typed owner and active state. A Dot's organization owner is immutable. The
organization detail reports its total active count and configured limit, while
its Dot list includes only configurations the caller may read. Active idle
Dots count towards the limit. Creation and activation enforce that limit in
the same transaction as the current authority check.
GET /api/v0/agent-resources?agent_id={id} resolves the actual target agent's
configuration inventory. An organization connector is offered and grantable
only after a current member writer explicitly selects a connected own-principal
OAuth credential with current catalogue, credential and binding generations.
The writer's existing catalogue eligibility and grant ceiling also apply;
a selected credential is separate from the principal's Connector grant.
POST /api/v0/agents/{id}/test/messages requires
{message, source:"draft"|"published", session_id?}. Ordinary agents accept
explicit draft; active organization Dots additionally accept published for
current member writers. A new published conversation uses the actual current
live version. Continuing it keeps its stored positive version after publishing
or rollback; changing source requires a new conversation. The response is
202 {session_id, turn_id, source, agent_version}. Draft uses version 0.
No client-supplied version or organization ID selects authority.
Organization conversations are private principal-owned sessions with
user_id=NULL, shared=0, no visitor and no parent turn. Events and debug
require current member Write access and exact private source/version proof.
Debug also returns source and agent_version. Administrator recovery
without membership does not admit execution or history.
Staff resume rechecks current member Write access in its atomic claim transaction. Strict saved authority retains the original source, authored snapshot, resolved model and initial principal grant/model-pool ceilings across restart. Published snapshots must agree with their actual version row; a cache hit cannot replace that proof. Current selected MCP account facts must match. A refused claim preserves the waiting request. New publication, draft edits or added grants cannot enlarge the paused run. Internal run context and secrets are absent from the public suspension response.
Published private approvals, human answers and secure input appear in the existing Inbox only for current member writers. Draft pauses remain inline. Read, Respond and administrator recovery without membership expose no private items. Organization announcements do not send push or external channel messages. Publication alone does not admit public, visitor, embedded, delegated or test-suite execution. Scheduled actions and webhooks require their own retained published pin and exact recorded private-run admission.
Organization share suggestions use the existing eight-result cap and check
current membership before including users. A search examines at most one
thousand matching candidates. When more candidates remain at that boundary,
truncated is true; narrow the query before relying on the result. Group
suggestions contain the organization's actual bound groups.
Dot memory scopes¶
GET /api/v0/dots/{id}/memories returns at most 500 merged notes and a
scopes array with each actual scope's scope, configured name and current
writable flag. Each note includes its scope. Personal Dots expose dot;
organization Dots expose dot and organization. The server derives the
organization from the target Dot, never from an input organization ID.
POST and PUT require {kind,content,scope}; DELETE requires ?scope=dot or
?scope=organization. Missing or invalid scope returns 400. New and updated
content is limited to 2,000 UTF-8 bytes; existing longer notes remain readable.
Kinds are preference, project and fact.
Organization reads require current membership, agent-management permission and effective Read or Write access to that Dot. Own-note changes require Write; shared organization-note changes also require current gateway administration rights. A narrowly shared writer receives 403 on shared mutation. Respond-only and nonmember recovery access expose no notes. The server rechecks authority and applies each operation in the same transaction; returned writable flags do not authorize a later request. Foreign note IDs return 404 without revealing content.
Personal Dot browser handover¶
An active personal Dot can request owner help through its existing browse_page
tool. The exact chat turn pauses while the owner uses the Dot's server-side
browser in the web conversation. The five browser-handover routes in the
operation index claim one controller, return private JPEG frames, accept typed
input, return control to the same turn, or stop that run. All require the same
authenticated owner session and same-origin Origin; responses use
Cache-Control: no-store, private. The claim body carries a client-generated
controller_id; retrying with that same ID is idempotent, while another
controller is refused. Frames and input are never added to model messages or
chat attachments. This flow is personal-Dot-only and uses the runner's
persistent browser profile when persistent storage is available; see browser handover
and workspace deployment limits.
Conversation events¶
Submitting a message and subscribing to its events are separate operations.
The browser posts JSON to the conversation's messages endpoint and reads the
conversation's events endpoint as an SSE stream. Its data frames use the
AIplane JSON event protocol (snapshot, turn_delta, tool and state events),
not OpenAI chat chunks. Reconnect using the existing protocol's snapshot and
event handling; do not append a reconnect snapshot as if it were new text.
Personal Dot automation¶
Schedule and webhook create/update bodies accept dot_id: string | null.
Omitting it selects ordinary user execution. A changed binding must select an
active owned Dot; an unchanged unavailable binding can be retained while other
configuration is edited, but cannot execute. Responses include the stored
dot_id and the actual owned Dot metadata when that Dot exists.
linked_session_id is valid only with conversation reuse. Omission retains
the link, an empty string clears it, and a concrete ID must identify a private
owned conversation with the same Dot binding. Changing the Dot binding clears
the existing link unless a matching replacement is supplied. The chat-session
list accepts dot_id: absence lists all conversations, an empty value selects
ordinary conversations, and a Dot ID selects that owner's Dot conversations.
This scope also applies to text search before its result limit.
Run history includes the exact assistant_turn_id. A synchronous webhook or
manual rerun that waits for approval returns 202 with status waiting and
its conversation ID. Decisions use the existing Inbox and resume the recorded
turn with its original history limit and tool ceiling. Disabling a trigger
stops new firings while allowing a pending decision to settle; deleting a
trigger with a nonterminal run returns 409. Running background turns can be
watched and stopped through the existing conversation endpoints; interactive
messages, steering and history rewrites are refused while that turn runs.
Organization scheduled actions¶
GET /api/v0/scheduled?principal_id={dot_id} selects an organization Dot's
schedule inventory. Without that query, the route lists the authenticated
user's schedules. The scoped response contains principal_id, can_write,
actions, the actual target in dots, and its published versions using the
existing agent version shape. Organization responses have models: [] and
default_timezone: null; the client must supply a timezone. An empty schedule
list still returns the actual Dot and its versions.
Creation uses the existing POST /api/v0/scheduled route. For an organization
Dot, send principal_id, a positive agent_version, name, prompt, cron,
timezone, tools_enabled, reuse_conversation: false and reuse_rounds.
Omit model, dot_id and linked_session_id. The model comes from the pinned
published spec, or the existing gateway Chat default when the spec omits it,
under the Dot principal's current grants. Each fire opens a fresh private principal-owned
conversation. Organization conversation reuse is unavailable.
The returned action includes principal_id, agent_version and
configuration_generation; its model and dot_id are null. Ownership is
immutable. The schedule belongs to the principal and survives deletion of its
creating user. Inventory, creation, edits, toggles, deletion and run history
require current organization membership and effective Write access, checked in
the operation's transaction. Nonmember administrator recovery rights do not
expose these private surfaces. Personal Dot management permission is not a
prerequisite.
PUT /api/v0/scheduled/{id} requires the complete configuration and
expected_configuration_generation from the returned action. Organization
updates retain the same principal_id. POST /api/v0/scheduled/{id}/toggle
requires {enabled,expected_configuration_generation} and returns
{enabled,configuration_generation}. These generation requirements also apply
to user-owned schedules. Missing fields are rejected; stale generations return
409. Execution configuration changes rotate the generation. Identical saves,
name-only changes and pause/resume retain it.
GET /api/v0/scheduled/{id}/runs derives scope from the stored action; no
principal query is required. It returns the actual action and up to 50 runs,
including session_id, assistant_turn_id, agent_version and
configuration_generation. Older user runs may have null version and
generation snapshots. The organization UI opens a recorded conversation at
/agents/{principal_id}?tab=try&test_session={session_id}. Its source and pinned
version are obtained from the private history endpoints.
Pausing prevents new fires and preserves an admitted pending decision.
Changing execution configuration invalidates a pending run's former dispatch
authority. To stop a running or suspended private turn, use
POST /api/v0/agents/{id}/test/{session}/cancel with {turn_id}. The exact
assistant turn must belong to that private conversation; current member Write
access is required. Cancellation remains available after deactivation,
principal disablement, grant removal or configuration changes. Success returns
{ok:true}; an unavailable turn returns 404. Ordinary agents can use this route
for their private draft conversations.
Deleting a schedule with a running, waiting or starting run returns 409. Stop or settle it before retrying. Deleting a Dot with retained principal-owned schedules also returns 409: delete those schedules first, even if their runs have finished. Schedule deletion removes its recorded run history.
Organization webhooks¶
GET /api/v0/webhooks?principal_id={dot_id} selects an organization Dot's
webhook inventory. Without this query, it returns the authenticated user's
webhooks. The scoped response contains principal_id, can_write, webhooks,
the actual target in dots and its retained published versions.
POST /api/v0/webhooks accepts principal_id, positive agent_version, name,
prompt and tools_enabled. Organization sources require asynchronous mode
and fresh conversations: omit model, dot_id and linked_session_id, and
keep synchronous and reuse_conversation false. The response contains
{webhook,secret}; only this creation and rotation disclose the minted secret.
The stored webhook includes principal_id, agent_version and its nonempty
configuration_generation. Its model and personal Dot binding are null.
Ownership is immutable; creator deletion does not delete the principal's source.
Current member Write guards inventory, configuration, secret rotation, deletion,
history and replay. PUT /api/v0/webhooks/{id} requires the configuration plus
expected_configuration_generation. Toggle requires
{enabled,expected_configuration_generation}; rotation requires
{expected_configuration_generation}. Replay requires
{prompt,expected_configuration_generation,run?}. These generation requirements
also apply to user-owned webhooks. Missing or incorrectly typed required fields
return 400; stale generations return 409. Effective execution changes rotate the
generation; names, unchanged saves, pausing and secret rotation preserve it.
GET /api/v0/webhooks/{id}/runs returns {runs} scoped by the stored owner.
Each new run includes its exact assistant turn, source generation and authored
version; legacy user snapshots remain null. Organization history opens the same
private agent Test chat as scheduled runs. Principal grants, selected own
credentials, approvals and usage limits govern execution.
Public GET or POST /hooks/{secret} returns 202 {session_id} for organization
sources, without output, private errors or waiting decisions. The existing
256 KiB input-prefix limit truncates larger bodies. Unknown, rotated and paused
secrets return the same 404. Final admission rechecks the original secret,
enabled state and generation after reading the body.
An explicit member-writer replay may run while the source is paused. It uses actual stored input and the submitted prompt in a new private conversation, under the current source's retained publication. Membership and Write are checked again before returning its private result. Rotation and pause preserve admitted decisions; execution edits invalidate further dispatch from older generations. Exact Stop uses the private cancellation endpoint described above. Pending or starting runs prevent source deletion; retained sources prevent Dot deletion.
Public entry points and credentials¶
/hooks/{secret}accepts GET/POST webhook triggers; the URL secret is its credential. Acceptance is not proof that the resulting run succeeded./hooks/rag/{token}triggers the corresponding collection sync./api/v0/embed/*uses embed keys and scoped visitor sessions. An embed key's origin allowlist and an agent's published access determine availability./a2a/agents/*exposes the enabled published agent's A2A surface. Caller authentication and the caller system principal'sa2a_callergrant for that agent apply to calls. Personal API tokens cannot make those calls./auth/*, RAG OAuth and connector OAuth routes complete browser provider flows. They are not generic bearer-authenticated model endpoints./healthzis public liveness./readyzis public setup readiness:503withsetup_requiredbefore completion,200afterwards./metricsis the Prometheus scrape endpoint. Until an administrator switches it on and sets a scrape token, an allowed IP list or both, it answers like a path that does not exist; see monitoring.
See agent publication for the widget snippet, identity modes, origins, A2A configuration and their limitations.
Errors, limits and body sizes¶
| Status | Typical condition | What to inspect |
|---|---|---|
400 |
Malformed request or invalid operation arguments | Body and the handler's reported validation error. |
401 |
Missing, expired, revoked or invalid credential/session | Credential type for this interface. |
403 |
Explicit model restriction or permission denial | Credential and principal grants/policies. |
404 |
Missing resource or undiscoverable model | Actual IDs and accessible pools/resources. |
409 |
Operation conflicts with current resource state, such as deleting an active token or repeating a completed revocation | Resource state and the error code/message. |
413 |
Request body cap exceeded | Route's upload/body cap. |
422 |
Request is readable but fails a resource-specific validation contract, such as an agent specification | Returned error code and validation issues. |
429 |
Rate, token quota or spend limit exceeded | Applicable global/group/user/token rule and period. |
502 |
Upstream failure | Error code, backend configuration and logs. |
503 |
Required service or feature is not configured/available, or no upstream capacity is available | Error code, feature prerequisites, backend/service configuration and logs. |
OpenAI model paths generally use an error object with message/type/code;
Anthropic paths use the Anthropic error dialect. Do not assume every
download/OAuth endpoint has the same envelope. Sandbox-file errors, for
example, are plain text.
Most route bodies are capped at 1 MiB. The upload group, including model requests, attachments and selected archives, is capped at 64 MiB. Public handler-capped entry points have their own tighter limits. Proxies and ingresses may impose additional caps. Usage records upstream work, so an agentic request can produce multiple metered exchanges.
HTTP endpoints¶
The index lists the exact methods and paths accepted by this build. Debug fixture routes exist only in development builds.
| Operation |
|---|
GET / |
GET /__dev/seed-session |
GET /__dev/session |
POST /a2a/agents/{id} |
GET /a2a/agents/{id}/agent-card.json |
HEAD /api/hello |
GET /api/v0/admin/automatic-routes |
PUT /api/v0/admin/automatic-routes |
DELETE /api/v0/admin/automatic-routes/{*alias} |
PUT /api/v0/admin/backends |
POST /api/v0/admin/backends/test |
DELETE /api/v0/admin/backends/{name} |
POST /api/v0/admin/backends/{name}/enabled |
POST /api/v0/admin/backends/{name}/rename |
GET /api/v0/admin/connectors |
PUT /api/v0/admin/connectors |
POST /api/v0/admin/connectors/restore-defaults |
DELETE /api/v0/admin/connectors/{key} |
GET /api/v0/admin/connectors/{key}/audit |
POST /api/v0/admin/connectors/{key}/toggle |
GET /api/v0/admin/groups |
PUT /api/v0/admin/groups |
DELETE /api/v0/admin/groups/{name} |
POST /api/v0/admin/impersonate/stop |
GET /api/v0/admin/limits |
POST /api/v0/admin/limits |
DELETE /api/v0/admin/limits/{id} |
PUT /api/v0/admin/model-defaults |
GET /api/v0/admin/models |
PUT /api/v0/admin/models |
DELETE /api/v0/admin/models/{name} |
GET /api/v0/admin/organizations |
POST /api/v0/admin/organizations |
PUT /api/v0/admin/organizations/{id} |
PUT /api/v0/admin/pools |
DELETE /api/v0/admin/pools/{name} |
POST /api/v0/admin/pools/{name}/rename |
PUT /api/v0/admin/search-settings |
GET /api/v0/admin/settings |
POST /api/v0/admin/settings |
POST /api/v0/admin/settings/clear |
GET /api/v0/admin/skills |
POST /api/v0/admin/skills |
PUT /api/v0/admin/skills/grants |
DELETE /api/v0/admin/skills/{name} |
GET /api/v0/admin/skills/{name}/archive |
GET /api/v0/admin/tokens |
PUT /api/v0/admin/tokens/{id}/models |
PUT /api/v0/admin/tokens/{id}/priority |
GET /api/v0/admin/upstreams |
GET /api/v0/admin/upstreams/events |
PUT /api/v0/admin/upstreams/fallback |
POST /api/v0/admin/upstreams/reload |
GET /api/v0/admin/users |
POST /api/v0/admin/users/{id}/impersonate |
POST /api/v0/agent-architect |
GET /api/v0/agent-architect/{session_id}/dot-plan |
POST /api/v0/agent-architect/{session_id}/dot-plan |
GET /api/v0/agent-resources |
GET /api/v0/agents |
POST /api/v0/agents |
GET /api/v0/organizations |
GET /api/v0/organizations/{id} |
POST /api/v0/organizations/{id}/dots |
POST /api/v0/organizations/{id}/dots/{dot}/active |
GET /api/v0/dots |
POST /api/v0/dots |
PUT /api/v0/dots/{id}/active |
GET /api/v0/dots/{id}/access |
PUT /api/v0/dots/{id}/access |
GET /api/v0/dots/{id}/connections |
PUT /api/v0/dots/{id}/connections/{key} |
POST /api/v0/dots/{id}/connections/{key}/connect |
DELETE /api/v0/dots/{id}/connections/{key} |
GET /api/v0/dots/{id}/communication |
PUT /api/v0/dots/{id}/communication |
GET /api/v0/dots/{id}/memories |
POST /api/v0/dots/{id}/memories |
PUT /api/v0/dots/{id}/memories/{memory_id} |
DELETE /api/v0/dots/{id}/memories/{memory_id} |
GET /api/v0/dots/{id}/activity |
GET /api/v0/dots/{id}/workspace |
GET /api/v0/dots/{id}/workspace/file |
PUT /api/v0/dots/{id}/workspace/file |
POST /api/v0/dots/{id}/workspace/folder |
DELETE /api/v0/dots/{id}/workspace/entry |
POST /api/v0/dots/{id}/sessions |
GET /api/v0/agents/inbox |
GET /api/v0/agents/inbox/events |
POST /api/v0/agents/inbox/{id}/answer |
DELETE /api/v0/agents/{id} |
GET /api/v0/agents/{id} |
GET /api/v0/agents/{id}/activity |
GET /api/v0/agents/{id}/activity/export |
GET /api/v0/agents/{id}/activity/verify |
GET /api/v0/agents/{id}/analytics |
POST /api/v0/agents/{id}/assist/improve |
POST /api/v0/agents/{id}/assist/suggest |
GET /api/v0/agents/{id}/channels |
POST /api/v0/agents/{id}/channels |
DELETE /api/v0/agents/{id}/channels/{channel_id} |
GET /api/v0/agents/{id}/communication |
PUT /api/v0/agents/{id}/communication |
POST /api/v0/agents/{id}/conversations/{session}/turns/{turn}/resume |
PUT /api/v0/agents/{id}/draft |
POST /api/v0/agents/{id}/draft/restore |
GET /api/v0/agents/{id}/embed-keys |
POST /api/v0/agents/{id}/embed-keys |
POST /api/v0/agents/{id}/embed-keys/{key_id}/revoke |
POST /api/v0/agents/{id}/live |
POST /api/v0/agents/{id}/publish |
GET /api/v0/agents/{id}/share-subjects |
GET /api/v0/agents/{id}/shares |
POST /api/v0/agents/{id}/shares |
POST /api/v0/agents/{id}/shares/revoke |
GET /api/v0/agents/{id}/test-runs |
GET /api/v0/agents/{id}/test-runs/{run} |
POST /api/v0/agents/{id}/test/messages |
GET /api/v0/agents/{id}/test/{session}/events |
POST /api/v0/agents/{id}/test/{session}/cancel |
GET /api/v0/agents/{id}/test/{session}/turns/{turn}/debug |
GET /api/v0/agents/{id}/tests |
POST /api/v0/agents/{id}/tests |
POST /api/v0/agents/{id}/tests/run |
DELETE /api/v0/agents/{id}/tests/{case} |
PUT /api/v0/agents/{id}/tests/{case} |
GET /api/v0/agents/{id}/versions |
GET /api/v0/build |
GET /api/v0/chat/attachment/{turn_id}/{filename} |
GET /api/v0/chat/landing |
GET /api/v0/chat/sessions |
POST /api/v0/chat/sessions |
DELETE /api/v0/chat/sessions/{id} |
GET /api/v0/chat/sessions/{id} |
POST /api/v0/chat/sessions/{id}/cancel |
POST /api/v0/chat/sessions/{session}/turns/{turn}/browser-handover/{request}/claim |
POST /api/v0/chat/sessions/{session}/turns/{turn}/browser-handover/{request}/frame |
POST /api/v0/chat/sessions/{session}/turns/{turn}/browser-handover/{request}/input |
POST /api/v0/chat/sessions/{session}/turns/{turn}/browser-handover/{request}/finish |
POST /api/v0/chat/sessions/{session}/turns/{turn}/browser-handover/{request}/abort |
GET /api/v0/chat/sessions/{id}/capabilities |
POST /api/v0/chat/sessions/{id}/capabilities |
GET /api/v0/chat/sessions/{id}/documents |
GET /api/v0/chat/sessions/{id}/documents/{doc_id} |
PUT /api/v0/chat/sessions/{id}/documents/{doc_id} |
POST /api/v0/chat/sessions/{id}/effort |
GET /api/v0/chat/sessions/{id}/events |
GET /api/v0/chat/sessions/{id}/export.md |
GET /api/v0/chat/sessions/{id}/export.pdf |
POST /api/v0/chat/sessions/{id}/fork |
POST /api/v0/chat/sessions/{id}/messages |
POST /api/v0/chat/sessions/{id}/pin |
POST /api/v0/chat/sessions/{id}/share |
POST /api/v0/chat/sessions/{id}/steer |
POST /api/v0/chat/sessions/{id}/steer/{steer_id}/discard |
DELETE /api/v0/chat/sessions/{id}/turns/{turn_id} |
DELETE /api/v0/chat/sessions/{id}/turns/{turn_id}/attachments/{filename} |
POST /api/v0/chat/sessions/{id}/turns/{turn_id}/edit |
POST /api/v0/chat/sessions/{id}/turns/{turn_id}/resume |
POST /api/v0/chat/sessions/{id}/turns/{turn_id}/retry |
GET /api/v0/comfyui/catalog |
GET /api/v0/comfyui/health |
POST /api/v0/comfyui/reload |
POST /api/v0/embed/agent |
GET /api/v0/embed/events |
POST /api/v0/embed/identity |
POST /api/v0/embed/messages |
GET /api/v0/embed/recorder.js |
POST /api/v0/embed/resume |
GET /api/v0/embed/session |
POST /api/v0/embed/sessions |
POST /api/v0/embed/speak |
POST /api/v0/embed/transcribe |
POST /api/v0/feedback |
GET /api/v0/feedback/config |
POST /api/v0/feedback/extract |
GET /api/v0/integrations |
POST /api/v0/integrations/{key}/disconnect |
POST /api/v0/integrations/{key}/retry |
POST /api/v0/integrations/{key}/token |
POST /api/v0/integrations/{key}/tools/all |
POST /api/v0/integrations/{key}/tools/mode |
GET /api/v0/me |
POST /api/v0/me/ask/feedback/{turn_id} |
POST /api/v0/me/browser/feedback/{turn_id} |
DELETE /api/v0/me/location |
POST /api/v0/me/location |
POST /api/v0/me/location/feedback/{turn_id} |
POST /api/v0/me/speech_voice |
POST /api/v0/me/timezone |
GET /api/v0/memories |
POST /api/v0/memories |
DELETE /api/v0/memories/{id} |
PUT /api/v0/memories/{id} |
GET /api/v0/models |
GET /api/v0/push/config |
POST /api/v0/push/subscribe |
POST /api/v0/push/unsubscribe |
GET /api/v0/rag/collections |
POST /api/v0/rag/collections |
DELETE /api/v0/rag/collections/{id} |
GET /api/v0/rag/collections/{id} |
PATCH /api/v0/rag/collections/{id} |
GET /api/v0/rag/collections/{id}/refs |
POST /api/v0/rag/collections/{id}/refs |
DELETE /api/v0/rag/collections/{id}/refs/{ref_id} |
PATCH /api/v0/rag/collections/{id}/refs/{ref_id} |
GET /api/v0/rag/collections/{id}/refs/{ref_id}/log |
POST /api/v0/rag/collections/{id}/refs/{ref_id}/primary |
POST /api/v0/rag/collections/{id}/refs/{ref_id}/rebuild |
POST /api/v0/rag/collections/{id}/reindex |
POST /api/v0/rag/collections/{id}/sync-token |
POST /api/v0/rag/collections/{id}/sync-token/clear |
GET /api/v0/rag/profiles |
POST /api/v0/rag/profiles |
DELETE /api/v0/rag/profiles/{name} |
PUT /api/v0/rag/profiles/{name} |
GET /api/v0/rag/providers |
POST /api/v0/rag/test-source |
GET /api/v0/scheduled |
POST /api/v0/scheduled |
POST /api/v0/scheduled/preview |
DELETE /api/v0/scheduled/{id} |
PUT /api/v0/scheduled/{id} |
GET /api/v0/scheduled/{id}/runs |
POST /api/v0/scheduled/{id}/toggle |
POST /api/v0/setup/finish |
POST /api/v0/setup/restart |
GET /api/v0/setup/state |
POST /api/v0/setup/test |
GET /api/v0/skills |
POST /api/v0/skills |
POST /api/v0/skills/draft |
DELETE /api/v0/skills/{name} |
GET /api/v0/skills/{name}/archive |
GET /api/v0/skills/{name}/body |
POST /api/v0/speech |
GET /api/v0/system-principals |
POST /api/v0/system-principals |
GET /api/v0/system-principals/{id} |
POST /api/v0/system-principals/{id}/disable |
POST /api/v0/system-principals/{id}/grants |
POST /api/v0/system-principals/{id}/grants/revoke |
POST /api/v0/system-principals/{id}/tokens |
POST /api/v0/system-principals/{id}/tokens/{token_id}/revoke |
GET /api/v0/tokens |
POST /api/v0/tokens |
GET /api/v0/tokens/details |
DELETE /api/v0/tokens/{id} |
PUT /api/v0/tokens/{id}/mcp-policy |
PUT /api/v0/tokens/{id}/models |
PUT /api/v0/tokens/{id}/priority |
POST /api/v0/tokens/{id}/quota |
DELETE /api/v0/tokens/{id}/quota/{rule_id} |
POST /api/v0/tokens/{id}/revoke |
POST /api/v0/tokens/{id}/rotate |
PUT /api/v0/tokens/{id}/tools |
GET /api/v0/tools |
POST /api/v0/tools/toggle |
GET /api/v0/transcription_models |
POST /api/v0/transcriptions |
GET /api/v0/usage |
GET /api/v0/webhooks |
POST /api/v0/webhooks |
DELETE /api/v0/webhooks/{id} |
PUT /api/v0/webhooks/{id} |
POST /api/v0/webhooks/{id}/rerun |
POST /api/v0/webhooks/{id}/rotate |
GET /api/v0/webhooks/{id}/runs |
POST /api/v0/webhooks/{id}/toggle |
GET /auth/callback |
GET /auth/login |
POST /auth/logout |
GET /chat/attachment/{turn_id}/{filename} |
GET /clients/opencode/aiplane.js |
GET /healthz |
POST /hooks/rag/{token} |
GET /hooks/{secret} |
POST /hooks/{secret} |
GET /integrations/callback |
POST /integrations/{key}/connect |
POST /integrations/{key}/retry |
GET /metrics |
GET /openapi.json |
GET /rag/oauth/callback |
GET /rag/{id}/connect |
GET /readyz |
POST /v1/audio/speech |
POST /v1/audio/transcriptions |
POST /v1/chat/completions |
POST /v1/embeddings |
POST /v1/images/edits |
POST /v1/images/generations |
POST /v1/messages |
POST /v1/messages/count_tokens |
GET /v1/models |
GET /v1/models/{*id} |
POST /v1/rerank |
POST /v1/responses |
GET /v1/responses/{*id} |
DELETE /v1/responses/{*id} |
GET /v1/sandbox/files/{run}/{filename} |
POST /v1/systemone |
GET /{*name} |
Admin token priority accepts {"priority":"high"}, "medium", "low" or null (inherit). It requires an administrator session and returns the saved priority. Group and backend save schemas include their priority settings. See Request priority.
Documentation build: 2610.1.108 · commit b774e1f9e2c2