@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api VSOnline
@base https://online.visualstudio.com
@version v1
@auth Bearer bearer
@endpoints 61
@hint download_for_search
@toc api(56), health(1), internal(1), .well-known(2), warmup(1)

@group api
@endpoint GET /api/v1/Agents/{family}
@required {family: str}
@returns(200) {name: str?, assetUri: str?, family: str?}
@errors {404}

@endpoint POST /api/v1/AgentTelemetry
@returns(204)
@errors {401}

@endpoint POST /api/v1/AgentTelemetry/standalone
@returns(204)
@errors {401}

@endpoint PUT /api/v1/Billing/ensure_plan
@required {name: str}
@optional {location: int(int32)(0 (None)/101 (EastAsia)/102 (SouthEastAsia)/201 (AustraliaCentral)/202 (AustraliaCentral2)/203 (AustraliaEast)/205 (AustraliaSouthEast)/301 (BrazilSouth)/401 (CanadaCentral)/402 (CanadaEast)/501 (NorthEurope)/502 (WestEurope)/601 (FranceCentral)/602 (FranceSouth)/701 (CentralIndia)/702 (SouthIndia)/703 (WestIndia)/801 (JapanEast)/802 (JapanWest)/901 (KoreaCentral)/902 (KoreaSouth)/1001 (SouthAfricaNorth)/1002 (SouthAfricaWest)/1201 (UaeCentral)/1202 (UaeNorth)/1401 (UkSouth)/1402 (UkWest)/1501 (CentralUs)/1502 (EastUs)/1503 (EastUs2)/1504 (NorthCentralUs)/1505 (SouthCentralUs)/1506 (WestCentralUs)/1507 (WestUs)/1508 (WestUs2)/1509 (WestUs3)/1601 (CentralUsEuap)/1602 (EastUs2Euap)/1701 (SwitzerlandNorth)/1702 (SwitzerlandWest)/1801 (GermanyNorth)/1802 (GermanyWestCentral)/1901 (NorwayWest)/1902 (NorwayEast))}
@returns(201)
@returns(204)
@errors {400, 401, 403, 500}

@endpoint GET /api/v1/Billing
@returns(200)
@errors {400, 401, 403}

@endpoint GET /api/v1/GenevaActions/Billing/{environmentId}
@required {environmentId: str(uuid)}
@optional {startTime: str, endTime: str}
@returns(200) {id: str?, sessionToken: str?, partitionKey: str?, environmentId: str?, billGenerationTime: str(date-time), plan: map{subscription: str?, resourceGroup: str?, providerNamespace: str?, name: str?, location: int(int32), resourceId: str?}, periodStart: str(date-time), periodEnd: str(date-time), usage: map?, usageDetail: [map]?, location: int(int32)}
@errors {404}

@endpoint POST /api/v1/GenevaActions/Billing/resend
@optional {startTime: str(date-time), endTime: str(date-time)}
@returns(200) {id: str?, sessionToken: str?, partitionKey: str?, environmentId: str?, billGenerationTime: str(date-time), plan: map{subscription: str?, resourceGroup: str?, providerNamespace: str?, name: str?, location: int(int32), resourceId: str?}, periodStart: str(date-time), periodEnd: str(date-time), usage: map?, usageDetail: [map]?, location: int(int32)}
@errors {404}

@endpoint POST /api/v1/GenevaActions/Billing/{environmentId}/state-changes
@required {environmentId: str(uuid)}
@optional {time: str(date-time), oldValue: int(int32)(0 (None)/1 (Created)/2 (Queued)/3 (Provisioning)/4 (Available)/5 (Awaiting)/6 (Unavailable)/7 (Deleted)/8 (Moved)/9 (Shutdown)/10 (Archived)/11 (Starting)/12 (ShuttingDown)/13 (Failed)/14 (Exporting)/15 (Updating)/16 (Rebuilding)), newValue: int(int32)(0 (None)/1 (Created)/2 (Queued)/3 (Provisioning)/4 (Available)/5 (Awaiting)/6 (Unavailable)/7 (Deleted)/8 (Moved)/9 (Shutdown)/10 (Archived)/11 (Starting)/12 (ShuttingDown)/13 (Failed)/14 (Exporting)/15 (Updating)/16 (Rebuilding))}
@returns(200) {id: str?, sessionToken: str?, partitionKey: str?, time: str(date-time), environment: map{id: str?, name: str?, userId: str?, sku: map{name: str?, tier: str?}}, oldValue: int(int32), newValue: int(int32)}
@errors {404}

@endpoint GET /api/v1/GenevaActions/Billing/{environmentId}/state-changes
@required {environmentId: str(uuid)}
@returns(200) {id: str?, sessionToken: str?, partitionKey: str?, time: str(date-time), environment: map{id: str?, name: str?, userId: str?, sku: map{name: str?, tier: str?}}, oldValue: int(int32), newValue: int(int32)}
@errors {404}

@endpoint GET /api/v1/GenevaActions/Configuration/{key}
@required {key: str}
@returns(200) {key: str?, value: str?, comment: str?}
@errors {404}

@endpoint DELETE /api/v1/GenevaActions/Configuration/{key}
@required {key: str}
@returns(200)
@errors {404}

@endpoint POST /api/v1/GenevaActions/Configuration
@optional {key: str, value: str, comment: str}
@returns(200) {key: str?, value: str?, comment: str?}
@errors {400}

@endpoint GET /api/v1/Environments/{environmentId}
@required {environmentId: str(uuid)}
@optional {deleted: bool=false}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {401, 403, 404}

@endpoint DELETE /api/v1/Environments/{environmentId}
@required {environmentId: str(uuid)}
@returns(204)
@errors {401, 403, 404}

@endpoint PATCH /api/v1/Environments/{environmentId}
@required {environmentId: str}
@optional {skuName: str, autoShutdownDelayMinutes: int(int32), friendlyName: str, planId: str, planAccessToken: str, failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {400, 401, 403, 404, 409}

@endpoint GET /api/v1/Environments
@optional {name: str, planId: str, deleted: bool=false}
@returns(200)
@errors {401}

@endpoint POST /api/v1/Environments
@required {type: str, friendlyName: str}
@optional {experimentalFeatures: map{queueResourceAllocation: bool, enableDynamicHttpsDetection: bool, usePrebuiltImages: bool, usePrebuildFastPathIfAvailable: bool, useStorageV2: bool, useRawFuse: bool, copilotWorkspace: bool, systemOnContainerCommandParams: map, fileSyncerWithBridge: bool, sparkCloudspace: bool, sessionHardLimit: num(double), useGpsCompute: bool}, features: map, seed: map{seedType: str, seedMoniker: str, gitConfig: map, recurseClone: bool, repository: map, cloneUrl: str}, personalization: map{dotfilesRepository: str, dotfilesTargetPath: str, dotfilesInstallCommand: str}, containerImage: str, connection: map{connectionSessionId: str, connectionSessionPath: str, connectionServiceUri: str, hostPublicKeys: [str], tunnelProperties: map}, platform: str, location: str, skuName: str, planId: str, autoShutdownDelayMinutes: int(int32), secrets: [map{type: int(int32), name: str, value: str}], devContainerJson: str, devContainerPath: str, workingDirectory: str, label: str, hasDevcontainerJson: bool, identity: map{id: str, userName: str, displayName: str}, githubEnvironmentEndpoint: str, gitHubAppUrl: str, gitHubApiUrl: str, createAsPrebuild: bool, billableOwner: map{type: int(int32), id: str, login: str}, runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)], imageAllowList: [str], hostSetupConfig: map}, testAccount: bool, netmonCorrelationData: map{billableOwnerGlobalRelayId: str, billableOwnerDatabaseId: str, billableOwnerCreatedAt: str, billableOwnerPlan: str, ownerGlobalRelayId: str, ownerDatabaseId: str, ownerCreatedAt: str, ownerPlan: str, repositoryGlobalRelayId: str, repositoryDatabaseId: str, repositoryCreatedAt: str, repositoryPrivate: bool}, gitHubPfsAuthEndpoint: str, userTier: str, analyticsTrackingId: str, enableAutoPushOnStop: bool, preferredComputeImageChannel: int(int32)(0 (Stable)/1 (Beta)), vnetInjectionSubnetId: str}
@returns(201) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {307, 400, 401, 403, 409, 503}

@endpoint POST /api/v1/Environments/{environmentId}/shutdown
@required {environmentId: str(uuid)}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {400, 401, 404}

@endpoint POST /api/v1/Environments/{environmentId}/start
@required {environmentId: str(uuid)}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {400, 401, 404, 503}

@endpoint POST /api/v1/Environments/{environmentId}/archive
@required {environmentId: str(uuid)}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {400, 401, 404, 503}

@endpoint GET /api/v1/Environments/{environmentId}/archive
@required {environmentId: str(uuid)}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool, state: str?}
@errors {400, 401, 404, 503}

@endpoint POST /api/v1/Environments/{environmentId}/export
@required {environmentId: str(uuid)}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {400, 401, 404, 503}

@endpoint PATCH /api/v1/Environments/{environmentId}/restore
@required {environmentId: str(uuid)}
@returns(200)
@errors {400, 401, 403}

@endpoint PATCH /api/v1/Environments/{environmentId}/folder
@required {environmentId: str}
@optional {recentFolderPaths: [str]}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {400, 401, 403, 404}

@endpoint PUT /api/v1/Environments/{environmentId}/secrets
@required {environmentId: str(uuid)}
@optional {secrets: [map{type: int(int32), name: str, value: str}]}
@returns(204) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {307, 400, 401, 403, 503}

@endpoint POST /api/v1/Environments/{environmentId}/notify
@required {environmentId: str(uuid)}
@optional {message: str, details: str, displayMode: str, modal: bool}
@returns(200)
@errors {400, 401, 404}

@endpoint GET /api/v1/GenevaActions/Environments/{environmentId}
@required {environmentId: str}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {404}

@endpoint DELETE /api/v1/GenevaActions/Environments/{environmentId}
@required {environmentId: str(uuid)}
@optional {deletionType: str}
@returns(204)
@errors {404}

@endpoint PUT /api/v1/GenevaActions/Environments/{environmentId}/shutdown
@required {environmentId: str(uuid)}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {404}

@endpoint PUT /api/v1/GenevaActions/Environments/{environmentId}/archive
@required {environmentId: str(uuid)}
@returns(200) {id: str?, type: str?, friendlyName: str?, created: str(date-time), updated: str(date-time), ownerId: str?, state: str?, containerImage: str?, seed: map{seedType: str?, seedMoniker: str?, gitConfig: map{userName: str?, userEmail: str?}, recurseClone: bool, repository: map{repoId: int(int64), name: str?, url: str?, branchName: str?, owner: str?, commitId: str?, prebuildHash: str?, createType: str?, diskUsage: str?}, cloneUrl: str?}, connection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, portForwardingConnection: map{connectionSessionId: str?, connectionSessionPath: str?, connectionServiceUri: str?, hostPublicKeys: [str]?, tunnelProperties: map{tunnelId: str?, tunnelName: str?, clusterId: str?, domain: str?, connectTokenExpiration: int(int64)?, connectAccessToken: str?, managePortsTokenExpiration: int(int64)?, managePortsAccessToken: str?, serviceUri: str?}}, container: map{id: str?, schemaVersion: str?}, recentFolders: [str]?, active: str(date-time), platform: str?, location: str?, planId: str?, autoShutdownDelayMinutes: int(int32), skuName: str?, skuDisplayName: str?, lastStateUpdateReason: str?, lastUsed: str(date-time)?, features: map?, gitStatus: map{commit: str?, branch: str?, hasUnpushedChanges: bool, hasUncommittedChanges: bool, ahead: int(int32), behind: int(int32), noGitRepo: bool, autoPush: bool}, subscriptionData: map{subscriptionId: str?, subscriptionState: str?, computeQuota: int(int32), computeUsage: int(int32)}, exportedBlobUrl: str?, accessToken: str?, createFromPrebuild: bool, templateStatus: str?, billableOwnerType: int(int32), runtimeConstraints: map{allowedPortPrivacySettings: [int(int32)]?, imageAllowList: [str]?, hostSetupConfig: map{cloneUrl: str?, branch: str?, path: str?, token: str?}}, organizationId: str?, prebuildType: str?, storageUtilizationInKb: int(int64)?, displayStorageUtilizationInKb: bool, clientUsage: map{sessionId: str?, usageData: map?}, resourceTier: int(int32), failoverDetails: map{failoverEnabled: bool, failoverRegion: int(int32)}, enableAutoPushOnStop: bool, userControlledFailureReason: int(int32), usingCopilotWorkspaceConfig: bool, isStorageV2: bool?, isAllocatedFromPool: bool}
@errors {404}

@endpoint GET /api/v1/GenevaActions/Environments/storage/{environmentIdOrFriendlyName}/{targetBlob}
@required {environmentIdOrFriendlyName: str, targetBlob: str=None}
@returns(200)
@errors {404}

@endpoint POST /api/v1/GenevaActions/Environments/{environmentId}/upload/running/vm/logs
@required {environmentId: str}
@returns(200) {containerName: str?, storageUri: str?, vmResourceId: str?, pathInContainer: str?, message: str?}
@errors {404}

@endpoint GET /api/v1/Environments/{environmentId}/state
@required {environmentId: str(uuid)}
@returns(200)
@errors {404}

@endpoint POST /api/v1/GenevaActions/Failover/start/{region}
@required {region: str}
@returns(200)
@errors {400}

@endgroup

@group health
@endpoint GET /health
@returns(200)
@errors {500}

@endgroup

@group api
@endpoint POST /api/v1/HeartBeat
@optional {timeStamp: str(date-time), agentVersion: str, resourceId: str(uuid), environmentId: str, collectedDataList: [map{timestamp: str(date-time), name: str, environmentId: str, parentActivityId: str}]}
@returns(204)
@errors {422}

@endpoint GET /api/v1/Locations
@returns(200) {current: int(int32), available: [int(int32)]?, hostnames: map?}

@endpoint GET /api/v1/Locations/{location}
@required {location: str}
@optional {planId: str}
@returns(200) {skus: [map]?}
@errors {400, 403, 404}

@endgroup

@group internal
@endpoint GET /internal/Netmon/correlation
@optional {macAddress: str, correlationKey: str}
@returns(200)
@errors {404}

@endgroup

@group .well-known
@endpoint GET /.well-known/jwks
@returns(200)

@endpoint GET /.well-known/openid-configuration
@returns(200)

@endgroup

@group api
@endpoint GET /api/v1/pools/default
@optional {skuName: [str]}
@returns(200)
@errors {400}

@endpoint POST /api/v1/GenevaActions/Pools/rotate-pools
@optional {poolType: str, poolSubtype: str, poolCode: str}
@returns(200)
@errors {400}

@endpoint POST /api/v1/GenevaActions/Pools
@optional {poolCode: str, poolType: str, region: str, maxTargetCount: str, minTargetCount: str, targetCount: str, comment: str}
@returns(200) {key: str?, value: str?, comment: str?}
@errors {400}

@endpoint POST /api/v1/GenevaActions/Pools/change-resource-deletion-setting
@optional {poolCode: str, poolType: str, region: str, enabled: bool, comment: str}
@returns(200) {key: str?, value: str?, comment: str?}
@errors {400}

@endpoint POST /api/v2/prebuilds/templates
@required {friendlyName: str}
@optional {planId: str, storageType: int(int32)(0 (V1)/1 (V2)), seed: map{seedType: str, seedMoniker: str, gitConfig: map, recurseClone: bool, repository: map, cloneUrl: str}, experimentalFeatures: map{queueResourceAllocation: bool, enableDynamicHttpsDetection: bool, usePrebuiltImages: bool, usePrebuildFastPathIfAvailable: bool, useStorageV2: bool, useRawFuse: bool, copilotWorkspace: bool, systemOnContainerCommandParams: map, fileSyncerWithBridge: bool, sparkCloudspace: bool, sessionHardLimit: num(double), useGpsCompute: bool}, features: map, templateInfo: map{totalTimeSavingsInSeconds: str, templateSizeInGB: num(double), container: map, workFlowRunId: str, prebuildConfigurationId: str, storageImageVersion: int(int32)}, devContainerPath: str, gitHubPrebuildInstanceEndpoint: str, gitHubPrebuildTemplateEndpoint: str}
@returns(201) {templateId: str?, sasUrl: str?, properties: map?}
@errors {400, 401}

@endpoint POST /api/v2/prebuilds/templates/{templateId}/updatestatus
@required {templateId: str(uuid), isSuccess: bool}
@returns(200)
@errors {401, 403, 404}

@endpoint GET /api/v2/prebuilds/templates/skus/repo/{repoId}/branch/{branchName}/hash/{prebuildHash}/location/{location}/devcontainerpath/{devContainerPath}
@required {repoId: str, branchName: str, prebuildHash: str, location: str, devContainerPath: str}
@optional {storageType: int(int32), fastPathEnabled: bool}
@returns(200) {repoId: str?, branchName: str?, prebuildHash: str?, devContainerPath: str?, location: int(int32), templateSkus: [str]?, poolSkus: [str]?, supportedSkus: [str]?}
@errors {400, 401, 403, 404}

@endpoint POST /api/v2/prebuilds/delete
@required {repoId: int(int64), branchName: str}
@optional {devContainerPath: str, prebuildConfigurationId: int(int64)}
@returns(200)
@errors {400, 401, 404, 503}

@endpoint POST /api/v2/prebuilds/templates/updatemaxversions
@required {repoId: int(int64), branchName: str, maxPrebuildTemplateVersions: int(int32)}
@optional {devContainerPath: str}
@returns(200)
@errors {400, 401, 404, 503}

@endpoint PUT /api/v2/prebuilds/pools/{poolId}/instances
@required {poolId: str}
@optional {secrets: [map{type: int(int32), name: str, value: str}], environmentOptions: map{correlationId: str}}
@returns(201)
@errors {401, 404}

@endpoint POST /api/v2/prebuilds/pools/{poolId}/instances
@required {poolId: str}
@optional {secrets: [map{type: int(int32), name: str, value: str}], environmentOptions: map{correlationId: str}}
@returns(201)
@errors {401, 404}

@endpoint GET /api/v2/prebuilds/template/{environmentId}
@required {environmentId: str(uuid)}
@returns(200) {id: str?, isPrebuild: bool?, prebuildHash: str?, repoId: int(int64), branchName: str?, commitId: str?, templateStatus: str?, logicalSkus: [str]?, lastUsedTime: str(date-time)?, devcontainerPath: str?, prebuildConfigurationId: str?}
@errors {401, 403, 404}

@endpoint POST /api/v1/GenevaActions/Prebuilds/pools/delete
@optional {subscription: str, repoId: str, branchName: str, devContainerPath: str, pools: [map{skuName: str, targetCount: int(int64), poolType: int(int32)}], storageType: int(int32)(0 (V1)/1 (V2))}
@returns(201)
@errors {401, 404}

@endpoint POST /api/v1/GenevaActions/Prebuilds/pools/createorupdatesettings
@optional {subscription: str, repoId: str, branchName: str, devContainerPath: str, pools: [map{skuName: str, targetCount: int(int64), poolType: int(int32)}], storageType: int(int32)(0 (V1)/1 (V2))}
@returns(201)
@errors {400, 401, 404}

@endpoint POST /api/v1/GenevaActions/Resources/{resourceId}/under-investigation
@required {resourceId: str}
@returns(200) {resourceId: str?, underInvestigation: bool, updated: bool, investigationStarted: str(date-time)?}
@errors {400}

@endpoint POST /api/v1/GenevaActions/Resources/{resourceId}/storage-credentials
@required {resourceId: str}
@returns(200) {codespaceBaseSasUri: str?, userNextSasUri: str?, userBaseSasUri: str?}
@errors {400}

@endpoint GET /api/v1/Tunnel/{environmentId}/portInfo
@required {environmentId: str(uuid)}
@optional {portNumber: int(int32)}
@returns(200) {tunnelToken: str?, portVisibility: str?}
@errors {400, 401, 403, 404}

@endpoint POST /api/v1/GenevaActions/VnetPoolDefinitions
@required {location: int(int32)(0 (None)/101 (EastAsia)/102 (SouthEastAsia)/201 (AustraliaCentral)/202 (AustraliaCentral2)/203 (AustraliaEast)/205 (AustraliaSouthEast)/301 (BrazilSouth)/401 (CanadaCentral)/402 (CanadaEast)/501 (NorthEurope)/502 (WestEurope)/601 (FranceCentral)/602 (FranceSouth)/701 (CentralIndia)/702 (SouthIndia)/703 (WestIndia)/801 (JapanEast)/802 (JapanWest)/901 (KoreaCentral)/902 (KoreaSouth)/1001 (SouthAfricaNorth)/1002 (SouthAfricaWest)/1201 (UaeCentral)/1202 (UaeNorth)/1401 (UkSouth)/1402 (UkWest)/1501 (CentralUs)/1502 (EastUs)/1503 (EastUs2)/1504 (NorthCentralUs)/1505 (SouthCentralUs)/1506 (WestCentralUs)/1507 (WestUs)/1508 (WestUs2)/1509 (WestUs3)/1601 (CentralUsEuap)/1602 (EastUs2Euap)/1701 (SwitzerlandNorth)/1702 (SwitzerlandWest)/1801 (GermanyNorth)/1802 (GermanyWestCentral)/1901 (NorwayWest)/1902 (NorwayEast)), type: int(int32)(0 (None)/1 (ComputeVM)/2 (StorageFileShare)/3 (StorageArchive)/5 (OSDisk)/6 (NetworkInterface)/7 (InputQueue)/8 (Snapshot)/9 (PoolQueue)/10 (VirtualNetwork)/11 (NetworkSecurityGroup)/13 (BasisTunnel)/14 (StorageBlockBlob)/15 (DataDisk)/17 (StorageAccount)), subtype: int(int32)(0 (Default)/2 (ShrunkBlob)/3 (FullBlob)/4 (UserParametersBlob)/6 (VnetInjected)/7 (UseManagedDisk)/8 (UseSharedSubnet)), isEnabled: bool, targetCount: int(int32), dimensions: map}
@optional {logicalSkus: [str]}
@returns(200)
@errors {400, 404, 503}

@endpoint DELETE /api/v1/GenevaActions/VnetPoolDefinitions
@required {location: int(int32)(0 (None)/101 (EastAsia)/102 (SouthEastAsia)/201 (AustraliaCentral)/202 (AustraliaCentral2)/203 (AustraliaEast)/205 (AustraliaSouthEast)/301 (BrazilSouth)/401 (CanadaCentral)/402 (CanadaEast)/501 (NorthEurope)/502 (WestEurope)/601 (FranceCentral)/602 (FranceSouth)/701 (CentralIndia)/702 (SouthIndia)/703 (WestIndia)/801 (JapanEast)/802 (JapanWest)/901 (KoreaCentral)/902 (KoreaSouth)/1001 (SouthAfricaNorth)/1002 (SouthAfricaWest)/1201 (UaeCentral)/1202 (UaeNorth)/1401 (UkSouth)/1402 (UkWest)/1501 (CentralUs)/1502 (EastUs)/1503 (EastUs2)/1504 (NorthCentralUs)/1505 (SouthCentralUs)/1506 (WestCentralUs)/1507 (WestUs)/1508 (WestUs2)/1509 (WestUs3)/1601 (CentralUsEuap)/1602 (EastUs2Euap)/1701 (SwitzerlandNorth)/1702 (SwitzerlandWest)/1801 (GermanyNorth)/1802 (GermanyWestCentral)/1901 (NorwayWest)/1902 (NorwayEast)), type: int(int32)(0 (None)/1 (ComputeVM)/2 (StorageFileShare)/3 (StorageArchive)/5 (OSDisk)/6 (NetworkInterface)/7 (InputQueue)/8 (Snapshot)/9 (PoolQueue)/10 (VirtualNetwork)/11 (NetworkSecurityGroup)/13 (BasisTunnel)/14 (StorageBlockBlob)/15 (DataDisk)/17 (StorageAccount)), subtype: int(int32)(0 (Default)/2 (ShrunkBlob)/3 (FullBlob)/4 (UserParametersBlob)/6 (VnetInjected)/7 (UseManagedDisk)/8 (UseSharedSubnet)), isEnabled: bool, targetCount: int(int32), dimensions: map}
@optional {logicalSkus: [str]}
@returns(200)
@errors {400, 404, 503}

@endgroup

@group warmup
@endpoint GET /warmup
@returns(200)
@errors {503}

@endgroup

@end
