Daemon-REST-API-Referenz
Dies ist die öffentliche REST/SSE-Schnittstelle für Integrationen, die
qwen serve --no-web ausführen und eine eigene UI bereitstellen. Beginnen Sie mit dem
Integrationsleitfaden, verwenden Sie dann diese Seite für die Endpunkt-
Erkundung und die HTTP-Protokollreferenz für
detaillierte Lebenszyklus-Semantik.
OpenAPI
Der kuratierte 25-Operation-Vertrag ist als OpenAPI 3.1 JSON verfügbar. Importieren Sie diese URL in einen OpenAPI-kompatiblen Renderer, Client-Generator oder Validierungstool. Das eingecheckte JSON ist der portable Schnittstellenvertrag für die unten indizierten Operationen und wird im CI gegen den Leitfaden, die Protokoll-Überschriften und die registrierten Routen validiert.
Dieser Index deckt eine kuratierte Kern-Teilmenge der REST-Oberfläche des Daemons ab, nicht alles. Außerhalb befinden sich die erstklassigen WebShell-Routen, bedingte interne Oberflächen und andere öffentliche, aber nicht zum Kern gehörende Routen: Datei-Mutation, Workspace-Registrierung, Session-Organisation und -Generierung sowie Workspace-MCP, Skills und Provider unter anderem. Diese Oberflächen werden durch ihre eigenen Capability-Tags gekennzeichnet; die HTTP-Protokollreferenz dokumentiert die Session-, Workspace-Status- und Datei-Oberflächen, und MCP-Server-Verwaltung, Auth-Provider und Device-Flow-Anmeldung werden in den Daemon-Auth- und Sicherheitshinweisen behandelt. Sie sind außerhalb dieses Vertrags, nicht deprecated.
Den Index lesen
- Capability ist das Feature-Tag, das in
GET /capabilitiesgeprüft werden soll. Ein Gedankenstrich bedeutet, dass die Operation kein eigenes Feature-Tag hat; Clients, die ältere Daemon-Builds unterstützen müssen, sollten404behandeln. - Scope gibt an, welche Runtime die Operation besitzt.
process-globalliest Daemon-weiten Zustand,selected-runtimeverwendet die Workspace-Auswahl der Anfrage,persisted-workspacelöst persistierte Session-Speicher auf,live-session-ownerroutet über die Live-Session, undlegacy-primaryzielt immer auf den primären Workspace des Daemons.GET /session/:id/exportist primär-angeheftet: es löst nur verwaltete interne Runtimes auf, bevor es auf den primären Workspace zurückfällt. - Alle Operationen in diesem Index sind im v1-REST-Vertrag stabil. Der
deprecated Capability-Name
unstable_session_resumeist nur ein Alias; verwenden Siesession_resumefür die stabile Resume-Route.
Discovery
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
GET /health | health | process-global | DaemonClient.health |
GET /capabilities | capabilities | process-global | DaemonClient.capabilities |
Session-Lebenszyklus
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
POST /session | session_create | selected-runtime | DaemonClient.createOrAttachSession |
POST /session/:id/load | session_load | selected-runtime | DaemonClient.loadSession |
POST /session/:id/resume | session_resume | selected-runtime | DaemonClient.resumeSession |
POST /session/:id/heartbeat | client_heartbeat | live-session-owner | DaemonClient.heartbeat |
PATCH /session/:id/metadata | session_metadata | live-session-owner | DaemonClient.updateSessionMetadata |
POST /session/:id/model | session_set_model | live-session-owner | DaemonClient.setSessionModel |
DELETE /session/:id | session_close | live-session-owner | DaemonClient.closeSession |
Prompts und Events
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
GET /session/:id/status | session_status | live-session-owner | DaemonClient.sessionStatus |
POST /session/:id/prompt | session_prompt | live-session-owner | DaemonClient.promptNonBlocking |
POST /session/:id/cancel | session_cancel | live-session-owner | DaemonClient.cancel |
GET /session/:id/events | session_events | live-session-owner | DaemonClient.subscribeEvents |
GET /session/:id/transcript | session_transcript | persisted-workspace | DaemonClient.getSessionTranscriptPage |
GET /session/:id/context | session_context | live-session-owner | DaemonClient.sessionContext |
GET /session/:id/export | session_export | legacy-primary | DaemonClient.exportSession |
GET /session/:id/pending-prompts | — | live-session-owner | DaemonClient.getPendingPrompts |
POST /session/:id/prompt gibt 202 zurück, wenn der Prompt die Warteschlange betritt, nicht
wenn der Agent fertig ist. Abonnieren Sie zuerst, dann korrelieren Sie turn_complete oder
turn_error über promptId.
Berechtigungen
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
POST /session/:id/permission/:requestId | session_permission_vote | live-session-owner | DaemonClient.respondToSessionPermission |
POST /permission/:requestId | permission_vote | legacy-primary | DaemonClient.respondToPermission |
Neue Multi-Workspace-Integrationen sollten immer die Session-scoped Route verwenden.
Die Legacy-Route kann für eine Anfrage, die einer anderen
Runtime gehört, denselben 404 zurückgeben wie für eine bereits aufgelöste Abstimmung.
Schreibgeschützter Workspace-Kontext
| Operation | Capability | Scope | TypeScript SDK |
|---|---|---|---|
GET /workspace/tools | — | legacy-primary | DaemonClient.workspaceTools |
GET /file | workspace_file_read | legacy-primary | DaemonClient.readWorkspaceFile |
GET /file/bytes | workspace_file_bytes | legacy-primary | DaemonClient.readWorkspaceFileBytes |
GET /stat | workspace_file_read | legacy-primary | DaemonClient.fileStat |
GET /list | workspace_file_read | legacy-primary | DaemonClient.dirList |
GET /glob | workspace_file_read | legacy-primary | DaemonClient.glob |
Diese singulären Routen zielen auf den primären Workspace. Integrationen, die
mehrere registrierte Workspaces bereitstellen, sollten die Workspace-qualifizierten Gegenstücke
verwenden, die im vollständigen Protokoll dokumentiert sind, und workspace_qualified_rest_core vorab prüfen.
Zusätzlich dokumentierte APIs
Die 25 Operationen oben sind der stabile OpenAPI-Integrationsvertrag. Die folgenden Operationen vervollständigen den Index der HTTP-Routen mit eigenen Protokoll- Abschnitten. Es sind dokumentierte v1-Oberflächen, aber sie liegen außerhalb dieses kompakten OpenAPI-Vertrags, weil sie konditional, administrativ oder primär zur Unterstützung von Erstanbieter-Clients sind. Preflighten Sie jede aufgeführte Capability und behandeln Sie fehlende Capabilities als nicht verfügbare Routen. Eine gruppierte Zeile kann mehrere Operationen enthalten, wenn sie Ownership und eine SDK-Familie teilen.
| Bereich | Operationen | Capability und Scope | TypeScript SDK |
|---|---|---|---|
| Operator-Zustand | GET /daemon/status · GET /brand | daemon_status, web_shell_brand; process-global | DaemonClient.daemonStatus, DaemonClient.brand |
| Workspace-Registrierung | POST /workspaces · PATCH /workspaces/:workspace · DELETE /workspaces/:workspace · GET /workspace-registrations · DELETE /workspace-registrations/:id | dynamic_workspace_registration, persistent_workspace_registration, workspace_display_name, workspace_runtime_removal; process-global oder selected-runtime | DaemonClient.addWorkspace, DaemonClient.updateWorkspace, WorkspaceDaemonClient.remove; Registration-Store-Routen verwenden rohes REST |
| Workspace-Runtime-Status | GET /workspace/mcp · GET /workspace/skills · GET /workspace/providers · GET /workspace/env · GET /workspace/preflight | workspace_mcp, workspace_skills, workspace_providers, workspace_env, workspace_preflight; legacy-primary | DaemonClient.workspaceMcp, workspaceSkills, workspaceProviders, workspaceEnv, workspacePreflight |
| Datei-Mutation | POST /file/write · POST /file/edit | workspace_file_write; legacy-primary | DaemonClient.writeWorkspaceFile, DaemonClient.editWorkspaceFile |
| Session-Inspektion und Tasks | GET /session/:id/supported-commands · GET /session/:id/tasks · POST /session/:id/tasks/:taskId/workflow-action · GET /session/:id/lsp · GET /session/:id/resources | session_supported_commands, session_tasks, session_lsp, session_resources; live-session-owner | DaemonClient.sessionSupportedCommands, sessionTasks, sessionWorkflowTaskAction, sessionLspStatus, sessionResources |
| Workspace-qualifizierter Verlauf | GET /workspaces/:workspace/session/:id/transcript · GET /workspaces/:workspace/session/:id/export · GET /workspaces/:workspace/session/:id/archive/export | workspace_persisted_transcript, workspace_session_export, workspace_archived_session_export; persisted-workspace | WorkspaceDaemonClient.getSessionTranscriptPage, exportSession, exportArchivedSession |
| Worktree-Recovery | POST /session/:id/worktree-reset | session_worktree_reset_v1; live-session-owner | DaemonClient.resetWorktreeSession |
| Persistierter-Session-Katalog | GET /workspace/:id/session-info · GET /workspaces/:workspace/session-info · GET /workspace/:id/sessions · GET /workspaces/:workspace/sessions · GET /workspaces/:workspace/sessions/live-state | session_info, session_list, workspace_session_live_state; persisted-workspace | DaemonClient.getStandaloneSession, listWorkspaceSessions, getWorkspaceSessionLiveState |
| Session-Organisation | GET /workspace/:id/session-groups · POST /workspace/:id/session-groups · PATCH /workspace/:id/session-groups/:groupId · DELETE /workspace/:id/session-groups/:groupId · PATCH /session/:id/organization · PATCH /workspaces/:workspace/session/:id/organization | session_organization; legacy-primary oder persisted-workspace | DaemonClient.listSessionGroups, createSessionGroup, updateSessionGroup, deleteSessionGroup, updateSessionOrganization; WorkspaceDaemonClient.updateSessionOrganization |
| Bulk-Änderungen persistierter Sessions | POST /sessions/delete · POST /sessions/archive · POST /sessions/unarchive | session_archive; legacy-primary | DaemonClient.deleteSessionsData, archiveSessionsData, unarchiveSessionsData |
| Optionale Session-Steuerung | POST /session/:id/recap · POST /session/:id/generate · POST /session/:id/approval-mode | session_recap, session_generation, session_approval_mode_control; live-session-owner | DaemonClient.recapSession, raw REST für Generation, DaemonClient.setSessionApprovalMode |
| Workspace-Konfiguration | POST /workspace/tools/:name/enable · POST /workspace/skills/:name/enable · POST /workspace/skills/enable · POST /workspace/init · POST /workspace/mcp/reload · POST /workspace/mcp/:server/restart · POST /language | workspace_tool_toggle, workspace_skill_settings_toggle, workspace_skill_settings_batch_toggle, workspace_init, workspace_mcp_manage, workspace_mcp_restart, user_language_sync; legacy-primary oder process-global | DaemonClient.setWorkspaceToolEnabled, setWorkspaceSkillEnabled, setWorkspaceSkillsEnabled, initWorkspace, reloadWorkspaceMcp, restartMcpServer, setUserLanguage |
| Device-Flow-Authentifizierung | POST /workspace/auth/device-flow · GET /workspace/auth/device-flow/:id · DELETE /workspace/auth/device-flow/:id · GET /workspace/auth/status | auth_device_flow; legacy-primary | DaemonClient.startDeviceFlow, getDeviceFlow, cancelDeviceFlow, getAuthStatus |
Routen ohne eigenen Protokoll-Abschnitt fehlen absichtlich in diesem Index. Es kann sich um erstklassige WebShell-Infrastruktur oder konditionale Implementierungs- Oberflächen handeln; durch ihr Fehlen werden sie nicht zu einem Integrationsvertrag befördert.
Gemeinsame Protokollregeln
- Authentifizieren Sie normale Routen mit
Authorization: Bearer <token>. Eine Standard- Loopback-/health-Probe kann ausgenommen sein; Non-Loopback-Binds sind es nicht. - Senden Sie
X-Qwen-Client-Id, wenn eine Create/Load-Antwort eines bereitgestellt hat. Es ist ein Zuordnungs- und Attributions-Identifier, kein Endnutzer-Sicherheitsprinzipal. - Behandeln Sie Fehler-Bodys als additiv. Verzweigen Sie primär über HTTP-Status und den
stabilen
codeodererrorKind, falls vorhanden. - Bewahren Sie SSE-Antwort-Header auf und deaktivieren Sie Proxy-Buffering. Setzen Sie mit beiden
Last-Event-IDundX-Qwen-Event-Epochfort, wenn der Daemon eine Epoch bereitgestellt hat. - Eine Workspace-Trust-Grenze ist keine Tenant-Isolation. Führen Sie separate Daemons aus, wenn Sicherheitsprinzipale oder Prozess-Level-Fehlerschranken unabhängig sein müssen.