Streaming Hub API

HTTP routes and .NET client reference

Find HTTP methods, permissions, request/response contracts and matching .NET methods.

Alpha
Developer referenceUpdated 2026-10-25

All 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 routePermission / authorizationRequestResponseSuccess.NET method
GET /api/v1/plugins/trustplugins.trust.read—PluginTrustSnapshotDto200GetPluginTrustAsync
POST /api/v1/plugins/trustplugins.trust.managePluginTrustCommandPluginTrustCommandResult200SetPluginTrustAsync
GET /api/v1/plugins/trust/commands/{commandId}plugins.trust.manage—PluginTrustCommandResult200GetPluginTrustCommandAsync
GET /api/v1/components/catalogcomponents.read—ComponentCatalogDto200GetComponentCatalogAsync
POST /api/v1/components/plancomponents.installComponentCatalogPlanCommandUpdateCommandResultDto200PlanCatalogInstallationAsync
GET /api/v1/updatesupdates.read—UpdateStateDto200GetUpdatesAsync
GET /api/v1/updates/operations/{operationId}updates.read—UpdateOperationDto200GetUpdateOperationAsync
GET /api/v1/updates/commands/{commandId}updates.manage—UpdateCommandResultDto200GetUpdateCommandAsync
POST /api/v1/updates/checkupdates.manageUpdateCheckCommandUpdateCommandResultDto200CheckUpdatesAsync
POST /api/v1/updates/planupdates.manageUpdatePlanCommandUpdateCommandResultDto200PlanUpdatesAsync
POST /api/v1/updates/inspectupdates.manageUpdateInspectCommandUpdateCommandResultDto200InspectUpdatePackagesAsync
POST /api/v1/updates/approveupdates.manageUpdateApproveCommandUpdateCommandResultDto200ApproveUpdatesAsync
POST /api/v1/updates/installupdates.manageUpdateInstallCommandUpdateCommandResultDto200InstallUpdatesAsync
POST /api/v1/updates/cancelupdates.manageUpdateCancelCommandUpdateCommandResultDto200CancelUpdateAsync
POST /api/v1/updates/prepareupdates.manageUpdatePrepareCommandUpdateCommandResultDto200PrepareUpdateClientsAsync
POST /api/v1/updates/maintenanceupdates.manageUpdateMaintenanceCommandUpdateCommandResultDto200BeginUpdateMaintenanceAsync
POST /api/v1/updates/shutdownupdates.manageUpdateShutdownCommandUpdateCommandResultDto200CommitUpdateShutdownAsync
POST /api/v1/updates/clients/refuse-closeupdates.prepareUpdateCloseRefusalUpdateClientDto200RefuseUpdateCloseAsync
POST /api/v1/updates/clients/closedupdates.prepareUpdateClientCloseCommandUpdateClientClosedDto200CompleteUpdateCloseAsync
POST /api/v1/updates/clients/registerupdates.prepareUpdateClientRegistrationUpdateClientDto200RegisterUpdateClientAsync
POST /api/v1/updates/clients/respondupdates.prepareUpdateClientResponseUpdateClientDto200RespondUpdateClientAsync
DELETE /api/v1/updates/clients/{clientId}updates.prepare—UpdateClientClosedDto200UnregisterUpdateClientAsync
GET /api/v1/projects/active/files/locationssettings.read—FileLocationsDto200GetFileLocationsAsync
GET /api/v1/projects/active/files/directoryproject.files—FileLocationDirectoryDto200GetFileDirectoryAsync
GET /api/v1/projects/active/context/rootsproject.files—ContextRootsDto200GetContextRootsAsync
GET /api/v1/projects/active/context/directoryproject.files—ContextDirectoryDto200GetContextDirectoryAsync
GET /api/v1/projects/active/context/textproject.files—ContextTextDto200GetContextTextAsync
POST /api/v1/projects/active/context/commandsproject.filesContextFileCommandContextFileResultDto200SendContextFileCommandAsync
POST /api/v1/projects/createproject.filesProjectFileCommandProjectFileAcceptedDto202CreateProjectAsync
GET /api/v1/projects/active/persistenceproject.read—ProjectPersistenceStatusDto200GetPersistenceAsync
POST /api/v1/projects/active/autosaveproject.filesAutosaveCommandProjectPersistenceStatusDto200ConfigureAutosaveAsync
GET /api/v1/projects/active/layoutproject.layout.read—ProjectLayoutDto—GetLayoutAsync
POST /api/v1/projects/active/layoutproject.layout.writeProjectLayoutCommandProjectLayoutDto—SaveLayoutAsync
GET /api/v1/runtime/runs/{runId}/inspectorinspector.read—RuntimeInspectorDto200GetInspectorAsync
GET /api/v1/runtime/historyhistory.read—RunHistoryPageDto200GetRunHistoryAsync
GET /api/v1/runtime/history/{runId}history.read—RunHistoryDetailDto200GetRunHistoryDetailAsync
GET /api/v1/runtime/history/settingshistory.read—RunHistoryStatusDto200GetRunHistorySettingsAsync
POST /api/v1/runtime/history/settingshistory.manageRunHistorySettingsCommandRunHistoryStatusDto200ConfigureRunHistoryAsync
POST /api/v1/runtime/history/clearhistory.manageRunHistoryClearCommandRunHistoryStatusDto200ClearRunHistoryAsync
GET /api/v1/interactionsinteraction.read—InteractionPageDto200GetInteractionsAsync
POST /api/v1/interactions/claiminteraction.respondInteractionClaimCommandInteractionResultDto200ClaimInteractionAsync
POST /api/v1/interactions/releaseinteraction.respondInteractionClaimCommandInteractionResultDto200ReleaseInteractionAsync
POST /api/v1/interactions/respondinteraction.respondInteractionResponseCommandInteractionResultDto200RespondInteractionAsync
POST /api/v1/pairing/requestspublicPairingRequestDtoPairingStart202RequestPairingAsync
POST /api/v1/pairing/requests/statuspublicPairingStatusRequestDtoPairingResult200PollPairingAsync
POST /api/v1/credentials/exchangepublicCredentialExchangeRequestDtoCredentialSessionDto200ConnectWithCredentialAsync
POST /api/v1/bootstrap/exchangepipe ticketTicketRequestCredentialSessionDto200ConnectWithBootstrapAsync
POST /api/v1/handshakesessionHandshakeRequestHandshakeResponseDto200ConnectWithCredentialAsync, ConnectWithBootstrapAsync
GET /api/v1/hosthost.status—HostInfoDto200GetHostAsync
POST /api/v1/host/shutdownhost.shutdownHostShutdownCommandRuntimeControlResultDto200ShutdownHostAsync
GET /api/v1/openapi.jsonhost.status—JsonElement200GetOpenApiAsync
GET /api/v1/schemas/{name}host.status—JsonElement200GetSchemaAsync
GET /api/v1/examples/{name}host.status—JsonElement200GetExampleAsync
GET /api/v1/streams/shell/snapshothost.status—HostStreamSnapshotDto200GetShellSnapshotAsync
GET /api/v1/streams/runtime/snapshotruntime.read—HostStreamSnapshotDto200GetRuntimeSnapshotAsync
GET /api/v1/streamsstream-specific——101SubscribeProjectAsync, SubscribeStatusAsync, SubscribeDiagnosticsAsync, SubscribeShellAsync, SubscribeRuntimeAsync
GET /api/v1/streams/status/snapshothost.status—HostStreamSnapshotDto200GetStatusSnapshotAsync
GET /api/v1/streams/logs/snapshotdiagnostics.content.read—HostStreamSnapshotDto200GetLogsSnapshotAsync
GET /api/v1/streams/diagnostics/snapshotdiagnostics.read—HostStreamSnapshotDto200GetDiagnosticsSnapshotAsync
GET /api/v1/projects/active/snapshotproject.read—ProjectSnapshotDto200GetSnapshotAsync
GET /api/v1/projects/active/resources/{kind}project.read—ProjectResourcePageDto200GetResourcesAsync
GET /api/v1/projects/active/resources/{kind}/{id}project.read—ProjectResourceDto200GetResourceAsync
GET /api/v1/projects/active/configuration/{kind}project.configuration.read—ProjectResourcePageDto200GetConfigurationAsync
GET /api/v1/projects/active/graph/{kind}/{id}project.read—ProjectGraphDto200GetGraphAsync
POST /api/v1/projects/active/undoproject.writeUndoCommandChangeSetResult200UndoAsync
GET /api/v1/projects/active/referencesproject.read—AvailableReferencePageDto200GetReferencesAsync
GET /api/v1/projects/active/plugins/{pluginId}/settingsproject.read—PluginResourceDto200GetPluginSettingsAsync
GET /api/v1/projects/active/plugins/{pluginId}/entities/{entityTypeId}project.read—PluginEntityCollectionDto200GetPluginEntitiesAsync
GET /api/v1/projects/active/plugin-editorsproject.read—PluginEditorInventoryDto200GetPluginEditorsAsync
GET /api/v1/plugins/{pluginId}/local-settingssettings.read—PluginLocalSettingsDto200GetLocalSettingsAsync
POST /api/v1/plugins/local-settingssettings.writePluginLocalSettingCommandPluginSettingsOperationDto200SetLocalSettingAsync
POST /api/v1/plugins/local-settings/batchsettings.writePluginLocalSettingsBatchCommandPluginSettingsOperationDto200SetLocalSettingsBatchAsync
GET /api/v1/plugins/inventorysettings.read—HostPluginInventoryDto200GetHostPluginsAsync
POST /api/v1/plugins/settings-actionssettings.writePluginSettingsActionCommandPluginSettingsOperationDto200StartSettingsActionAsync
GET /api/v1/plugins/settings-operations/{operationId}settings.read—PluginSettingsOperationDto200GetSettingsOperationAsync
POST /api/v1/plugins/settings-operations/authorizationsettings.writePluginSettingsOperationCommandPluginAuthorizationDto200ClaimSettingsAuthorizationAsync
POST /api/v1/plugins/entities/exportproject.configuration.readPluginEntityExportCommandPluginEntityExportDto200ExportPluginEntitiesAsync
POST /api/v1/plugins/settings-operations/responsesettings.writePluginClientResponseCommandPluginSettingsOperationDto200RespondSettingsInteractionAsync
POST /api/v1/plugins/settings-operations/cancelsettings.writePluginSettingsOperationCommandPluginSettingsOperationDto200CancelSettingsOperationAsync
GET /api/v1/catalogcatalog.read—CatalogPageDto200GetCatalogAsync
GET /api/v1/catalog/{id}catalog.read—CatalogSchemaDto200GetCatalogSchemaAsync
POST /api/v1/projects/active/editor-optionscatalog.read, project.configuration.read, settings.readEditorOptionsRequestEditorOptionsDto200GetEditorOptionsAsync
POST /api/v1/projects/active/plugin-entity-formproject.read, project.configuration.readPluginEntityFormRequestPluginEntityFormDto200GetPluginEntityFormAsync
POST /api/v1/projects/active/changesets/validateproject.writeChangeSetCommandChangeSetResult200ValidateAsync
POST /api/v1/projects/active/changesetsproject.writeChangeSetCommandChangeSetResult200ApplyAsync
GET /api/v1/commands/{commandId}project.write | project.files | runtime.read | settings.write—ApiCommandLookupDto200GetCommandResultAsync
GET /api/v1/operations/{operationId}project.files—ProjectFileOperationDto200GetOperationAsync
POST /api/v1/runtime/valuesruntime.controlRuntimeValueCommandRuntimeControlResultDto200SetRuntimeValueAsync
GET /api/v1/runtime/valuesruntime.values.read—RuntimeObservationSnapshotDto200GetRuntimeValuesAsync
GET /api/v1/runtime/statusruntime.read—RuntimeStatusDto200GetRuntimeStatusAsync
POST /api/v1/runtime/signals/samplediagnostics.content.readSignalLiveSampleRequestSignalLiveSampleDto200GetSignalLiveSampleAsync
POST /api/v1/runtime/hotkeys/captureruntime.controlHotkeyCaptureCommandHotkeyCaptureDto200CaptureHotkeyAsync
POST /api/v1/runtime/runsruntime.controlRuntimeStartCommandRuntimeCommandResult202StartRunAsync
GET /api/v1/runtime/test-chainsruntime.read—TestChainRuntimeDto200GetTestChainRuntimeAsync
POST /api/v1/runtime/test-chainsruntime.controlTestChainStartCommandRuntimeCommandResult202StartTestChainAsync
POST /api/v1/runtime/test-chains/{runId}/stopruntime.controlRuntimeControlCommandRuntimeControlResultDto200StopTestChainAsync
GET /api/v1/runtime/runs/{runId}runtime.read—RuntimeRunStatusDto200GetRunAsync
GET /api/v1/runtime/commands/{commandId}runtime.read—RuntimeCommandResult200GetRuntimeCommandResultAsync
POST /api/v1/projects/active/saveproject.filesProjectFileCommandProjectFileAcceptedDto202SaveAsync
POST /api/v1/projects/openproject.filesProjectFileCommandProjectFileAcceptedDto202OpenAsync
POST /api/v1/projects/active/switchproject.filesProjectFileCommandProjectFileAcceptedDto202SwitchAsync
POST /api/v1/projects/active/importproject.filesProjectFileCommandProjectFileAcceptedDto202ImportAsync
POST /api/v1/projects/active/exportproject.filesProjectFileCommandProjectFileAcceptedDto202ExportAsync
POST /api/v1/runtime/runs/{runId}/stopruntime.controlRuntimeControlCommandRuntimeControlResultDto200StopRunAsync
POST /api/v1/runtime/automations/stopruntime.controlRuntimeControlCommandRuntimeControlResultDto200StopAutomationsAsync
POST /api/v1/runtime/stopruntime.controlRuntimeControlCommandRuntimeControlResultDto200StopRuntimeAsync
POST /api/v1/runtime/resumeruntime.controlRuntimeControlCommandRuntimeControlResultDto200ResumeRuntimeAsync

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.