HTTP routes and .NET client reference
Find HTTP methods, permissions, request/response contracts and matching .NET methods.
AlphaAll paths below are relative to the current discovered endpoint. After pairing and handshake, send the session token as Authorization: Bearer <accessToken>. Requests and responses use JSON with camelCase field names.
Live contract and schemas
With host.status, read GET /api/v1/openapi.json for the running Core's methods and GET /api/v1/schemas/{name} for a named DTO. In .NET use GetOpenApiAsync and GetSchemaAsync. GET /api/v1/examples/{name} / GetExampleAsync exposes supported named examples.
The route table is checked against the repository's public ApiSurface.Endpoints and ApiClientCoverage.Methods. Request and response names identify public Contracts types; query parameters and full field definitions are described by the live OpenAPI and named schemas. Generate or validate non-.NET payloads against that running contract. PowerShell testing shows how to retrieve it.
Route table
GetFileLocationsAsync lists approved logical folder IDs, names, operation rights and flags for the current project. Machine paths are excluded. Folder approval, rebinding and revocation belong to the trusted Core Settings window; settings.write, project.write and runtime scopes cannot modify those local approvals. Catalog IDs beginning Core.Files. require the project's separate folder permissions when executed.
GetFileDirectoryAsync(locationId) requires project.files plus the location's local List and inspect permission. It supplies bounded relative file/folder metadata for path selection, including empty folders, with no content or absolute paths. Subfolder permissions, truncation and permission-revision checks remain enforced.
— means no typed body/schema. public, session, pipe ticket and stream-specific describe authorization stages, not grantable scopes. Comma-separated permissions are required together; command lookup authorizes the specific command family, not every scope shown as an alternative.
202 accepts work; inspect the returned operation/run until completion. 101 is a WebSocket upgrade. The retired layout routes return editor_layout_local; store layout in your client. Named Pipe bootstrap is an internal local-launch path with only status access and is not a substitute for external-client pairing.
| HTTP route | Permission / authorization | Request | Response | Success | .NET method |
|---|---|---|---|---|---|
GET /api/v1/plugins/trust | plugins.trust.read | — | PluginTrustSnapshotDto | 200 | GetPluginTrustAsync |
POST /api/v1/plugins/trust | plugins.trust.manage | PluginTrustCommand | PluginTrustCommandResult | 200 | SetPluginTrustAsync |
GET /api/v1/plugins/trust/commands/{commandId} | plugins.trust.manage | — | PluginTrustCommandResult | 200 | GetPluginTrustCommandAsync |
GET /api/v1/components/catalog | components.read | — | ComponentCatalogDto | 200 | GetComponentCatalogAsync |
POST /api/v1/components/plan | components.install | ComponentCatalogPlanCommand | UpdateCommandResultDto | 200 | PlanCatalogInstallationAsync |
GET /api/v1/updates | updates.read | — | UpdateStateDto | 200 | GetUpdatesAsync |
GET /api/v1/updates/operations/{operationId} | updates.read | — | UpdateOperationDto | 200 | GetUpdateOperationAsync |
GET /api/v1/updates/commands/{commandId} | updates.manage | — | UpdateCommandResultDto | 200 | GetUpdateCommandAsync |
POST /api/v1/updates/check | updates.manage | UpdateCheckCommand | UpdateCommandResultDto | 200 | CheckUpdatesAsync |
POST /api/v1/updates/plan | updates.manage | UpdatePlanCommand | UpdateCommandResultDto | 200 | PlanUpdatesAsync |
POST /api/v1/updates/inspect | updates.manage | UpdateInspectCommand | UpdateCommandResultDto | 200 | InspectUpdatePackagesAsync |
POST /api/v1/updates/approve | updates.manage | UpdateApproveCommand | UpdateCommandResultDto | 200 | ApproveUpdatesAsync |
POST /api/v1/updates/install | updates.manage | UpdateInstallCommand | UpdateCommandResultDto | 200 | InstallUpdatesAsync |
POST /api/v1/updates/cancel | updates.manage | UpdateCancelCommand | UpdateCommandResultDto | 200 | CancelUpdateAsync |
POST /api/v1/updates/prepare | updates.manage | UpdatePrepareCommand | UpdateCommandResultDto | 200 | PrepareUpdateClientsAsync |
POST /api/v1/updates/maintenance | updates.manage | UpdateMaintenanceCommand | UpdateCommandResultDto | 200 | BeginUpdateMaintenanceAsync |
POST /api/v1/updates/shutdown | updates.manage | UpdateShutdownCommand | UpdateCommandResultDto | 200 | CommitUpdateShutdownAsync |
POST /api/v1/updates/clients/refuse-close | updates.prepare | UpdateCloseRefusal | UpdateClientDto | 200 | RefuseUpdateCloseAsync |
POST /api/v1/updates/clients/closed | updates.prepare | UpdateClientCloseCommand | UpdateClientClosedDto | 200 | CompleteUpdateCloseAsync |
POST /api/v1/updates/clients/register | updates.prepare | UpdateClientRegistration | UpdateClientDto | 200 | RegisterUpdateClientAsync |
POST /api/v1/updates/clients/respond | updates.prepare | UpdateClientResponse | UpdateClientDto | 200 | RespondUpdateClientAsync |
DELETE /api/v1/updates/clients/{clientId} | updates.prepare | — | UpdateClientClosedDto | 200 | UnregisterUpdateClientAsync |
GET /api/v1/projects/active/files/locations | settings.read | — | FileLocationsDto | 200 | GetFileLocationsAsync |
GET /api/v1/projects/active/files/directory | project.files | — | FileLocationDirectoryDto | 200 | GetFileDirectoryAsync |
GET /api/v1/projects/active/context/roots | project.files | — | ContextRootsDto | 200 | GetContextRootsAsync |
GET /api/v1/projects/active/context/directory | project.files | — | ContextDirectoryDto | 200 | GetContextDirectoryAsync |
GET /api/v1/projects/active/context/text | project.files | — | ContextTextDto | 200 | GetContextTextAsync |
POST /api/v1/projects/active/context/commands | project.files | ContextFileCommand | ContextFileResultDto | 200 | SendContextFileCommandAsync |
POST /api/v1/projects/create | project.files | ProjectFileCommand | ProjectFileAcceptedDto | 202 | CreateProjectAsync |
GET /api/v1/projects/active/persistence | project.read | — | ProjectPersistenceStatusDto | 200 | GetPersistenceAsync |
POST /api/v1/projects/active/autosave | project.files | AutosaveCommand | ProjectPersistenceStatusDto | 200 | ConfigureAutosaveAsync |
GET /api/v1/projects/active/layout | project.layout.read | — | ProjectLayoutDto | — | GetLayoutAsync |
POST /api/v1/projects/active/layout | project.layout.write | ProjectLayoutCommand | ProjectLayoutDto | — | SaveLayoutAsync |
GET /api/v1/runtime/runs/{runId}/inspector | inspector.read | — | RuntimeInspectorDto | 200 | GetInspectorAsync |
GET /api/v1/runtime/history | history.read | — | RunHistoryPageDto | 200 | GetRunHistoryAsync |
GET /api/v1/runtime/history/{runId} | history.read | — | RunHistoryDetailDto | 200 | GetRunHistoryDetailAsync |
GET /api/v1/runtime/history/settings | history.read | — | RunHistoryStatusDto | 200 | GetRunHistorySettingsAsync |
POST /api/v1/runtime/history/settings | history.manage | RunHistorySettingsCommand | RunHistoryStatusDto | 200 | ConfigureRunHistoryAsync |
POST /api/v1/runtime/history/clear | history.manage | RunHistoryClearCommand | RunHistoryStatusDto | 200 | ClearRunHistoryAsync |
GET /api/v1/interactions | interaction.read | — | InteractionPageDto | 200 | GetInteractionsAsync |
POST /api/v1/interactions/claim | interaction.respond | InteractionClaimCommand | InteractionResultDto | 200 | ClaimInteractionAsync |
POST /api/v1/interactions/release | interaction.respond | InteractionClaimCommand | InteractionResultDto | 200 | ReleaseInteractionAsync |
POST /api/v1/interactions/respond | interaction.respond | InteractionResponseCommand | InteractionResultDto | 200 | RespondInteractionAsync |
POST /api/v1/pairing/requests | public | PairingRequestDto | PairingStart | 202 | RequestPairingAsync |
POST /api/v1/pairing/requests/status | public | PairingStatusRequestDto | PairingResult | 200 | PollPairingAsync |
POST /api/v1/credentials/exchange | public | CredentialExchangeRequestDto | CredentialSessionDto | 200 | ConnectWithCredentialAsync |
POST /api/v1/bootstrap/exchange | pipe ticket | TicketRequest | CredentialSessionDto | 200 | ConnectWithBootstrapAsync |
POST /api/v1/handshake | session | HandshakeRequest | HandshakeResponseDto | 200 | ConnectWithCredentialAsync, ConnectWithBootstrapAsync |
GET /api/v1/host | host.status | — | HostInfoDto | 200 | GetHostAsync |
POST /api/v1/host/shutdown | host.shutdown | HostShutdownCommand | RuntimeControlResultDto | 200 | ShutdownHostAsync |
GET /api/v1/openapi.json | host.status | — | JsonElement | 200 | GetOpenApiAsync |
GET /api/v1/schemas/{name} | host.status | — | JsonElement | 200 | GetSchemaAsync |
GET /api/v1/examples/{name} | host.status | — | JsonElement | 200 | GetExampleAsync |
GET /api/v1/streams/shell/snapshot | host.status | — | HostStreamSnapshotDto | 200 | GetShellSnapshotAsync |
GET /api/v1/streams/runtime/snapshot | runtime.read | — | HostStreamSnapshotDto | 200 | GetRuntimeSnapshotAsync |
GET /api/v1/streams | stream-specific | — | — | 101 | SubscribeProjectAsync, SubscribeStatusAsync, SubscribeDiagnosticsAsync, SubscribeShellAsync, SubscribeRuntimeAsync |
GET /api/v1/streams/status/snapshot | host.status | — | HostStreamSnapshotDto | 200 | GetStatusSnapshotAsync |
GET /api/v1/streams/logs/snapshot | diagnostics.content.read | — | HostStreamSnapshotDto | 200 | GetLogsSnapshotAsync |
GET /api/v1/streams/diagnostics/snapshot | diagnostics.read | — | HostStreamSnapshotDto | 200 | GetDiagnosticsSnapshotAsync |
GET /api/v1/projects/active/snapshot | project.read | — | ProjectSnapshotDto | 200 | GetSnapshotAsync |
GET /api/v1/projects/active/resources/{kind} | project.read | — | ProjectResourcePageDto | 200 | GetResourcesAsync |
GET /api/v1/projects/active/resources/{kind}/{id} | project.read | — | ProjectResourceDto | 200 | GetResourceAsync |
GET /api/v1/projects/active/configuration/{kind} | project.configuration.read | — | ProjectResourcePageDto | 200 | GetConfigurationAsync |
GET /api/v1/projects/active/graph/{kind}/{id} | project.read | — | ProjectGraphDto | 200 | GetGraphAsync |
POST /api/v1/projects/active/undo | project.write | UndoCommand | ChangeSetResult | 200 | UndoAsync |
GET /api/v1/projects/active/references | project.read | — | AvailableReferencePageDto | 200 | GetReferencesAsync |
GET /api/v1/projects/active/plugins/{pluginId}/settings | project.read | — | PluginResourceDto | 200 | GetPluginSettingsAsync |
GET /api/v1/projects/active/plugins/{pluginId}/entities/{entityTypeId} | project.read | — | PluginEntityCollectionDto | 200 | GetPluginEntitiesAsync |
GET /api/v1/projects/active/plugin-editors | project.read | — | PluginEditorInventoryDto | 200 | GetPluginEditorsAsync |
GET /api/v1/plugins/{pluginId}/local-settings | settings.read | — | PluginLocalSettingsDto | 200 | GetLocalSettingsAsync |
POST /api/v1/plugins/local-settings | settings.write | PluginLocalSettingCommand | PluginSettingsOperationDto | 200 | SetLocalSettingAsync |
POST /api/v1/plugins/local-settings/batch | settings.write | PluginLocalSettingsBatchCommand | PluginSettingsOperationDto | 200 | SetLocalSettingsBatchAsync |
GET /api/v1/plugins/inventory | settings.read | — | HostPluginInventoryDto | 200 | GetHostPluginsAsync |
POST /api/v1/plugins/settings-actions | settings.write | PluginSettingsActionCommand | PluginSettingsOperationDto | 200 | StartSettingsActionAsync |
GET /api/v1/plugins/settings-operations/{operationId} | settings.read | — | PluginSettingsOperationDto | 200 | GetSettingsOperationAsync |
POST /api/v1/plugins/settings-operations/authorization | settings.write | PluginSettingsOperationCommand | PluginAuthorizationDto | 200 | ClaimSettingsAuthorizationAsync |
POST /api/v1/plugins/entities/export | project.configuration.read | PluginEntityExportCommand | PluginEntityExportDto | 200 | ExportPluginEntitiesAsync |
POST /api/v1/plugins/settings-operations/response | settings.write | PluginClientResponseCommand | PluginSettingsOperationDto | 200 | RespondSettingsInteractionAsync |
POST /api/v1/plugins/settings-operations/cancel | settings.write | PluginSettingsOperationCommand | PluginSettingsOperationDto | 200 | CancelSettingsOperationAsync |
GET /api/v1/catalog | catalog.read | — | CatalogPageDto | 200 | GetCatalogAsync |
GET /api/v1/catalog/{id} | catalog.read | — | CatalogSchemaDto | 200 | GetCatalogSchemaAsync |
POST /api/v1/projects/active/editor-options | catalog.read, project.configuration.read, settings.read | EditorOptionsRequest | EditorOptionsDto | 200 | GetEditorOptionsAsync |
POST /api/v1/projects/active/plugin-entity-form | project.read, project.configuration.read | PluginEntityFormRequest | PluginEntityFormDto | 200 | GetPluginEntityFormAsync |
POST /api/v1/projects/active/changesets/validate | project.write | ChangeSetCommand | ChangeSetResult | 200 | ValidateAsync |
POST /api/v1/projects/active/changesets | project.write | ChangeSetCommand | ChangeSetResult | 200 | ApplyAsync |
GET /api/v1/commands/{commandId} | project.write | project.files | runtime.read | settings.write | — | ApiCommandLookupDto | 200 | GetCommandResultAsync |
GET /api/v1/operations/{operationId} | project.files | — | ProjectFileOperationDto | 200 | GetOperationAsync |
POST /api/v1/runtime/values | runtime.control | RuntimeValueCommand | RuntimeControlResultDto | 200 | SetRuntimeValueAsync |
GET /api/v1/runtime/values | runtime.values.read | — | RuntimeObservationSnapshotDto | 200 | GetRuntimeValuesAsync |
GET /api/v1/runtime/status | runtime.read | — | RuntimeStatusDto | 200 | GetRuntimeStatusAsync |
POST /api/v1/runtime/signals/sample | diagnostics.content.read | SignalLiveSampleRequest | SignalLiveSampleDto | 200 | GetSignalLiveSampleAsync |
POST /api/v1/runtime/hotkeys/capture | runtime.control | HotkeyCaptureCommand | HotkeyCaptureDto | 200 | CaptureHotkeyAsync |
POST /api/v1/runtime/runs | runtime.control | RuntimeStartCommand | RuntimeCommandResult | 202 | StartRunAsync |
GET /api/v1/runtime/test-chains | runtime.read | — | TestChainRuntimeDto | 200 | GetTestChainRuntimeAsync |
POST /api/v1/runtime/test-chains | runtime.control | TestChainStartCommand | RuntimeCommandResult | 202 | StartTestChainAsync |
POST /api/v1/runtime/test-chains/{runId}/stop | runtime.control | RuntimeControlCommand | RuntimeControlResultDto | 200 | StopTestChainAsync |
GET /api/v1/runtime/runs/{runId} | runtime.read | — | RuntimeRunStatusDto | 200 | GetRunAsync |
GET /api/v1/runtime/commands/{commandId} | runtime.read | — | RuntimeCommandResult | 200 | GetRuntimeCommandResultAsync |
POST /api/v1/projects/active/save | project.files | ProjectFileCommand | ProjectFileAcceptedDto | 202 | SaveAsync |
POST /api/v1/projects/open | project.files | ProjectFileCommand | ProjectFileAcceptedDto | 202 | OpenAsync |
POST /api/v1/projects/active/switch | project.files | ProjectFileCommand | ProjectFileAcceptedDto | 202 | SwitchAsync |
POST /api/v1/projects/active/import | project.files | ProjectFileCommand | ProjectFileAcceptedDto | 202 | ImportAsync |
POST /api/v1/projects/active/export | project.files | ProjectFileCommand | ProjectFileAcceptedDto | 202 | ExportAsync |
POST /api/v1/runtime/runs/{runId}/stop | runtime.control | RuntimeControlCommand | RuntimeControlResultDto | 200 | StopRunAsync |
POST /api/v1/runtime/automations/stop | runtime.control | RuntimeControlCommand | RuntimeControlResultDto | 200 | StopAutomationsAsync |
POST /api/v1/runtime/stop | runtime.control | RuntimeControlCommand | RuntimeControlResultDto | 200 | StopRuntimeAsync |
POST /api/v1/runtime/resume | runtime.control | RuntimeControlCommand | RuntimeControlResultDto | 200 | ResumeRuntimeAsync |
Read coherent state
GetCompleteSnapshotAsync follows snapshot pages while pinning Host/project identity, revision and cursor. Resource lists use pageToken, pageSize and optional search where supported. Encode path segments and query values; do not treat a resource's display name as its ID.
Ordinary project.read responses omit content-bearing configuration. Additional project.configuration.read can be required for definitions and editor forms; protected fields remain redacted. Dynamic options require catalog.read, project.configuration.read and settings.read together. Context file operations require project.files.
Project revision, plugin resource version, local settings version and runtime observations are distinct. Read the relevant version before a write. A runtime variable observation is not an edit to its saved default.
Operations, recovery and limits
WaitForOperationAsync waits for a terminal file outcome or waiting_for_interaction. An authorized interaction responder must claim/respond where required; this is not implicit permission to approve passwords or trust. WaitForRunAsync waits for a run's terminal state. Cancelling a wait does not cancel Core work.
The default .NET client bounds responses to 2 MiB and HTTP calls to 15 seconds. Core also enforces endpoint/body/page/stream limits and rate limits; handle explicit refusal instead of interpreting a truncated observation as complete state.
Handle revision_conflict, schema_changed, stale identity, incompatible contracts, revoked/expired access and unknown command outcomes separately. See partial edits, command recovery, streams and installation cooperation.