openapi: 3.0.3 info: description: Coderd is the service created by running coder server. It is a thin API that connects workspaces, provisioners and users. coderd stores its state in Postgres and is the only service that communicates with Postgres. title: Coder Agents Builds API termsOfService: https://coder.com/legal/terms-of-service contact: name: API Support url: https://coder.com email: support@coder.com license: name: AGPL-3.0 url: https://github.com/coder/coder/blob/main/LICENSE version: '2.0' servers: - url: https://{coderHost}/api/v2 description: Coder instance variables: coderHost: default: coder.example.com description: Your Coder deployment hostname security: - CoderSessionToken: [] tags: - name: Builds paths: /api/v2/users/{user}/workspace/{workspacename}/builds/{buildnumber}: get: operationId: get-workspace-build-by-user-workspace-name-and-build-number summary: Get workspace build by user, workspace name, and build number tags: - Builds security: - CoderSessionToken: [] parameters: - name: user in: path required: true description: User ID, name, or me schema: type: string - name: workspacename in: path required: true description: Workspace name schema: type: string - name: buildnumber in: path required: true description: Build number schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/codersdk.WorkspaceBuild' /api/v2/workspacebuilds/{workspacebuild}: get: operationId: get-workspace-build summary: Get workspace build tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/codersdk.WorkspaceBuild' /api/v2/workspacebuilds/{workspacebuild}/cancel: patch: operationId: cancel-workspace-build summary: Cancel workspace build tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string - name: expect_status in: query required: false description: Expected status of the job. If expect_status is supplied, the request will be rejected with 412 Precondition Failed if the job doesn't match the state when performing the cancellation. schema: type: string enum: - running - pending responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/codersdk.Response' /api/v2/workspacebuilds/{workspacebuild}/logs: get: operationId: get-workspace-build-logs summary: Get workspace build logs tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string - name: before in: query required: false description: Before log id schema: type: integer - name: after in: query required: false description: After log id schema: type: integer - name: follow in: query required: false description: Follow log stream schema: type: boolean - name: format in: query required: false description: 'Log output format. Accepted: ''json'' (default), ''text'' (plain text with RFC3339 timestamps and ANSI colors). Not supported with follow=true.' schema: type: string enum: - json - text responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/codersdk.ProvisionerJobLog' /api/v2/workspacebuilds/{workspacebuild}/parameters: get: operationId: get-build-parameters-for-workspace-build summary: Get build parameters for workspace build tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceBuildParameter' /api/v2/workspacebuilds/{workspacebuild}/resources: get: operationId: removed-get-workspace-resources-for-workspace-build summary: 'Removed: Get workspace resources for workspace build' tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceResource' /api/v2/workspacebuilds/{workspacebuild}/state: get: operationId: get-provisioner-state-for-workspace-build summary: Get provisioner state for workspace build tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/codersdk.WorkspaceBuild' put: operationId: update-workspace-build-state summary: Update workspace build state tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/codersdk.UpdateWorkspaceBuildStateRequest' responses: '204': description: No Content /api/v2/workspacebuilds/{workspacebuild}/timings: get: operationId: get-workspace-build-timings-by-id summary: Get workspace build timings by ID tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspacebuild in: path required: true description: Workspace build ID schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/codersdk.WorkspaceBuildTimings' /api/v2/workspaces/{workspace}/builds: get: operationId: get-workspace-builds-by-workspace-id summary: Get workspace builds by workspace ID tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspace in: path required: true description: Workspace ID schema: type: string - name: after_id in: query required: false description: After ID schema: type: string - name: limit in: query required: false description: Page limit schema: type: integer - name: offset in: query required: false description: Page offset schema: type: integer - name: since in: query required: false description: Since timestamp schema: type: string responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceBuild' post: operationId: create-workspace-build summary: Create workspace build tags: - Builds security: - CoderSessionToken: [] parameters: - name: workspace in: path required: true description: Workspace ID schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/codersdk.CreateWorkspaceBuildRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/codersdk.WorkspaceBuild' components: schemas: codersdk.UpdateWorkspaceBuildStateRequest: type: object properties: state: type: array items: type: integer codersdk.TimingStage: type: string enum: - init - plan - graph - apply - start - stop - cron - connect codersdk.BuildReason: type: string enum: - initiator - autostart - autostop - dormancy - dashboard - cli - ssh_connection - vscode_connection - jetbrains_connection - task_auto_pause - task_manual_pause - task_resume codersdk.AgentSubsystem: type: string enum: - envbox - envbuilder - exectrace codersdk.CreateWorkspaceBuildReason: type: string enum: - dashboard - cli - ssh_connection - vscode_connection - jetbrains_connection - task_manual_pause - task_resume codersdk.DisplayApp: type: string enum: - vscode - vscode_insiders - web_terminal - port_forwarding_helper - ssh_helper codersdk.WorkspaceAgentHealth: type: object properties: healthy: type: boolean description: Healthy is true if the agent is healthy. example: false reason: type: string description: Reason is a human-readable explanation of the agent's health. It is empty if Healthy is true. example: agent has lost connection codersdk.WorkspaceBuild: type: object properties: build_number: type: integer created_at: type: string format: date-time daily_cost: type: integer deadline: type: string format: date-time has_ai_task: type: boolean description: 'Deprecated: This field has been deprecated in favor of Task WorkspaceID.' has_external_agent: type: boolean id: type: string format: uuid initiator_id: type: string format: uuid initiator_name: type: string job: $ref: '#/components/schemas/codersdk.ProvisionerJob' matched_provisioners: $ref: '#/components/schemas/codersdk.MatchedProvisioners' max_deadline: type: string format: date-time reason: enum: - initiator - autostart - autostop allOf: - $ref: '#/components/schemas/codersdk.BuildReason' resources: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceResource' status: enum: - pending - starting - running - stopping - stopped - failed - canceling - canceled - deleting - deleted allOf: - $ref: '#/components/schemas/codersdk.WorkspaceStatus' template_version_id: type: string format: uuid template_version_name: type: string template_version_preset_id: type: string format: uuid transition: enum: - start - stop - delete allOf: - $ref: '#/components/schemas/codersdk.WorkspaceTransition' updated_at: type: string format: date-time workspace_id: type: string format: uuid workspace_name: type: string workspace_owner_avatar_url: type: string workspace_owner_id: type: string format: uuid workspace_owner_name: type: string description: WorkspaceOwnerName is the username of the owner of the workspace. uuid.NullUUID: type: object properties: uuid: type: string valid: type: boolean description: Valid is true if UUID is not NULL codersdk.ProvisionerJobStatus: type: string enum: - pending - running - succeeded - canceling - canceled - failed - unknown codersdk.WorkspaceBuildParameter: type: object properties: name: type: string value: type: string codersdk.WorkspaceBuildTimings: type: object properties: agent_connection_timings: type: array items: $ref: '#/components/schemas/codersdk.AgentConnectionTiming' agent_script_timings: type: array description: 'TODO: Consolidate agent-related timing metrics into a single struct when updating the API version' items: $ref: '#/components/schemas/codersdk.AgentScriptTiming' provisioner_timings: type: array items: $ref: '#/components/schemas/codersdk.ProvisionerTiming' codersdk.DERPRegion: type: object properties: latency_ms: type: number preferred: type: boolean codersdk.LogLevel: type: string enum: - trace - debug - info - warn - error codersdk.WorkspaceAgentScriptStatus: type: string enum: - ok - exit_failure - timed_out - pipes_left_open codersdk.AgentScriptTiming: type: object properties: display_name: type: string ended_at: type: string format: date-time exit_code: type: integer stage: $ref: '#/components/schemas/codersdk.TimingStage' started_at: type: string format: date-time status: type: string workspace_agent_id: type: string workspace_agent_name: type: string codersdk.ProvisionerJobType: type: string enum: - template_version_import - workspace_build - template_version_dry_run codersdk.WorkspaceAgentStartupScriptBehavior: type: string enum: - blocking - non-blocking codersdk.ProvisionerJobLog: type: object properties: created_at: type: string format: date-time id: type: integer log_level: enum: - trace - debug - info - warn - error allOf: - $ref: '#/components/schemas/codersdk.LogLevel' log_source: $ref: '#/components/schemas/codersdk.LogSource' output: type: string stage: type: string codersdk.WorkspaceApp: type: object properties: command: type: string display_name: type: string description: DisplayName is a friendly name for the app. external: type: boolean description: 'External specifies whether the URL should be opened externally on the client or not.' group: type: string health: $ref: '#/components/schemas/codersdk.WorkspaceAppHealth' healthcheck: description: Healthcheck specifies the configuration for checking app health. allOf: - $ref: '#/components/schemas/codersdk.Healthcheck' hidden: type: boolean icon: type: string description: 'Icon is a relative path or external URL that specifies an icon to be displayed in the dashboard.' id: type: string format: uuid open_in: $ref: '#/components/schemas/codersdk.WorkspaceAppOpenIn' sharing_level: enum: - owner - authenticated - organization - public allOf: - $ref: '#/components/schemas/codersdk.WorkspaceAppSharingLevel' slug: type: string description: Slug is a unique identifier within the agent. statuses: type: array description: Statuses is a list of statuses for the app. items: $ref: '#/components/schemas/codersdk.WorkspaceAppStatus' subdomain: type: boolean description: 'Subdomain denotes whether the app should be accessed via a path on the `coder server` or via a hostname-based dev URL. If this is set to true and there is no app wildcard configured on the server, the app will not be accessible in the UI.' subdomain_name: type: string description: SubdomainName is the application domain exposed on the `coder server`. tooltip: type: string description: 'Tooltip is an optional markdown supported field that is displayed when hovering over workspace apps in the UI.' url: type: string description: 'URL is the address being proxied to inside the workspace. If external is specified, this will be opened on the client.' codersdk.WorkspaceAgentLifecycle: type: string enum: - created - starting - start_timeout - start_error - ready - shutting_down - shutdown_timeout - shutdown_error - 'off' codersdk.WorkspaceAppStatusState: type: string enum: - working - idle - complete - failure codersdk.WorkspaceAppStatus: type: object properties: agent_id: type: string format: uuid app_id: type: string format: uuid created_at: type: string format: date-time icon: type: string description: 'Deprecated: This field is unused and will be removed in a future version. Icon is an external URL to an icon that will be rendered in the UI.' id: type: string format: uuid message: type: string needs_user_attention: type: boolean description: 'Deprecated: This field is unused and will be removed in a future version. NeedsUserAttention specifies whether the status needs user attention.' state: $ref: '#/components/schemas/codersdk.WorkspaceAppStatusState' uri: type: string description: 'URI is the URI of the resource that the status is for. e.g. https://github.com/org/repo/pull/123 e.g. file:///path/to/file' workspace_id: type: string format: uuid codersdk.WorkspaceResource: type: object properties: agents: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceAgent' created_at: type: string format: date-time daily_cost: type: integer hide: type: boolean icon: type: string id: type: string format: uuid job_id: type: string format: uuid metadata: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceResourceMetadata' name: type: string type: type: string workspace_transition: enum: - start - stop - delete allOf: - $ref: '#/components/schemas/codersdk.WorkspaceTransition' codersdk.WorkspaceStatus: type: string enum: - pending - starting - running - stopping - stopped - failed - canceling - canceled - deleting - deleted codersdk.CreateWorkspaceBuildRequest: type: object properties: dry_run: type: boolean log_level: description: Log level changes the default logging verbosity of a provider ("info" if empty). enum: - debug allOf: - $ref: '#/components/schemas/codersdk.ProvisionerLogLevel' orphan: type: boolean description: Orphan may be set for the Destroy transition. reason: description: Reason sets the reason for the workspace build. enum: - dashboard - cli - ssh_connection - vscode_connection - jetbrains_connection - task_manual_pause allOf: - $ref: '#/components/schemas/codersdk.CreateWorkspaceBuildReason' rich_parameter_values: type: array description: 'ParameterValues are optional. It will write params to the ''workspace'' scope. This will overwrite any existing parameters with the same name. This will not delete old params not included in this list.' items: $ref: '#/components/schemas/codersdk.WorkspaceBuildParameter' state: type: array items: type: integer template_version_id: type: string format: uuid template_version_preset_id: type: string format: uuid description: TemplateVersionPresetID is the ID of the template version preset to use for the build. transition: enum: - start - stop - delete allOf: - $ref: '#/components/schemas/codersdk.WorkspaceTransition' required: - transition codersdk.LogSource: type: string enum: - provisioner_daemon - provisioner codersdk.WorkspaceAgent: type: object properties: api_version: type: string apps: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceApp' architecture: type: string connection_timeout_seconds: type: integer created_at: type: string format: date-time directory: type: string disconnected_at: type: string format: date-time display_apps: type: array items: $ref: '#/components/schemas/codersdk.DisplayApp' environment_variables: type: object additionalProperties: type: string expanded_directory: type: string first_connected_at: type: string format: date-time health: description: Health reports the health of the agent. allOf: - $ref: '#/components/schemas/codersdk.WorkspaceAgentHealth' id: type: string format: uuid instance_id: type: string last_connected_at: type: string format: date-time latency: type: object description: DERPLatency is mapped by region name (e.g. "New York City", "Seattle"). additionalProperties: $ref: '#/components/schemas/codersdk.DERPRegion' lifecycle_state: $ref: '#/components/schemas/codersdk.WorkspaceAgentLifecycle' log_sources: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceAgentLogSource' logs_length: type: integer logs_overflowed: type: boolean name: type: string operating_system: type: string parent_id: format: uuid allOf: - $ref: '#/components/schemas/uuid.NullUUID' ready_at: type: string format: date-time resource_id: type: string format: uuid scripts: type: array items: $ref: '#/components/schemas/codersdk.WorkspaceAgentScript' started_at: type: string format: date-time startup_script_behavior: description: 'StartupScriptBehavior is a legacy field that is deprecated in favor of the `coder_script` resource. It''s only referenced by old clients. Deprecated: Remove in the future!' allOf: - $ref: '#/components/schemas/codersdk.WorkspaceAgentStartupScriptBehavior' status: $ref: '#/components/schemas/codersdk.WorkspaceAgentStatus' subsystems: type: array items: $ref: '#/components/schemas/codersdk.AgentSubsystem' troubleshooting_url: type: string updated_at: type: string format: date-time version: type: string codersdk.WorkspaceAppHealth: type: string enum: - disabled - initializing - healthy - unhealthy codersdk.Response: type: object properties: detail: type: string description: 'Detail is a debug message that provides further insight into why the action failed. This information can be technical and a regular golang err.Error() text. - "database: too many open connections" - "stat: too many open files"' message: type: string description: 'Message is an actionable message that depicts actions the request took. These messages should be fully formed sentences with proper punctuation. Examples: - "A user has been created." - "Failed to create a user."' validations: type: array description: 'Validations are form field-specific friendly error messages. They will be shown on a form field in the UI. These can also be used to add additional context if there is a set of errors in the primary ''Message''.' items: $ref: '#/components/schemas/codersdk.ValidationError' codersdk.AgentConnectionTiming: type: object properties: ended_at: type: string format: date-time stage: $ref: '#/components/schemas/codersdk.TimingStage' started_at: type: string format: date-time workspace_agent_id: type: string workspace_agent_name: type: string codersdk.ProvisionerJob: type: object properties: available_workers: type: array items: type: string format: uuid canceled_at: type: string format: date-time completed_at: type: string format: date-time created_at: type: string format: date-time error: type: string error_code: enum: - REQUIRED_TEMPLATE_VARIABLES - INSUFFICIENT_QUOTA allOf: - $ref: '#/components/schemas/codersdk.JobErrorCode' file_id: type: string format: uuid id: type: string format: uuid initiator_id: type: string format: uuid input: $ref: '#/components/schemas/codersdk.ProvisionerJobInput' logs_overflowed: type: boolean metadata: $ref: '#/components/schemas/codersdk.ProvisionerJobMetadata' organization_id: type: string format: uuid queue_position: type: integer queue_size: type: integer started_at: type: string format: date-time status: enum: - pending - running - succeeded - canceling - canceled - failed allOf: - $ref: '#/components/schemas/codersdk.ProvisionerJobStatus' tags: type: object additionalProperties: type: string type: $ref: '#/components/schemas/codersdk.ProvisionerJobType' worker_id: type: string format: uuid worker_name: type: string codersdk.JobErrorCode: type: string enum: - REQUIRED_TEMPLATE_VARIABLES - INSUFFICIENT_QUOTA codersdk.WorkspaceAgentScript: type: object properties: cron: type: string display_name: type: string exit_code: type: integer id: type: string format: uuid log_path: type: string log_source_id: type: string format: uuid run_on_start: type: boolean run_on_stop: type: boolean script: type: string start_blocks_login: type: boolean status: $ref: '#/components/schemas/codersdk.WorkspaceAgentScriptStatus' timeout: type: integer codersdk.WorkspaceResourceMetadata: type: object properties: key: type: string sensitive: type: boolean value: type: string codersdk.ProvisionerTiming: type: object properties: action: type: string ended_at: type: string format: date-time job_id: type: string format: uuid resource: type: string source: type: string stage: $ref: '#/components/schemas/codersdk.TimingStage' started_at: type: string format: date-time codersdk.ProvisionerJobInput: type: object properties: error: type: string template_version_id: type: string format: uuid workspace_build_id: type: string format: uuid codersdk.WorkspaceAgentStatus: type: string enum: - connecting - connected - disconnected - timeout codersdk.WorkspaceAppSharingLevel: type: string enum: - owner - authenticated - organization - public codersdk.WorkspaceAppOpenIn: type: string enum: - slim-window - tab codersdk.ProvisionerJobMetadata: type: object properties: template_display_name: type: string template_icon: type: string template_id: type: string format: uuid template_name: type: string template_version_name: type: string workspace_build_transition: $ref: '#/components/schemas/codersdk.WorkspaceTransition' workspace_id: type: string format: uuid workspace_name: type: string codersdk.WorkspaceAgentLogSource: type: object properties: created_at: type: string format: date-time display_name: type: string icon: type: string id: type: string format: uuid workspace_agent_id: type: string format: uuid codersdk.MatchedProvisioners: type: object properties: available: type: integer description: 'Available is the number of provisioner daemons that are available to take jobs. This may be less than the count if some provisioners are busy or have been stopped.' count: type: integer description: 'Count is the number of provisioner daemons that matched the given tags. If the count is 0, it means no provisioner daemons matched the requested tags.' most_recently_seen: type: string format: date-time description: 'MostRecentlySeen is the most recently seen time of the set of matched provisioners. If no provisioners matched, this field will be null.' codersdk.Healthcheck: type: object properties: interval: type: integer description: Interval specifies the seconds between each health check. threshold: type: integer description: Threshold specifies the number of consecutive failed health checks before returning "unhealthy". url: type: string description: URL specifies the endpoint to check for the app health. codersdk.ProvisionerLogLevel: type: string enum: - debug codersdk.ValidationError: type: object properties: detail: type: string field: type: string required: - detail - field codersdk.WorkspaceTransition: type: string enum: - start - stop - delete securitySchemes: CoderSessionToken: type: apiKey in: header name: Coder-Session-Token externalDocs: {}