Browse documentation
DURPDEPLOY DOCUMENTATION

API reference

Browse every documented API endpoint, request parameter, response, and schema without leaving this site.

On this page

Send API requests to your own DurpDeploy server under /api/v1.

Use the API operations guide for complete workflows and examples.

Download the OpenAPI specification to use with your API tools.

Authentication

Send your token in the Authorization: Bearer YOUR_TOKEN header.

Your account role, project membership, and token permissions limit each request.

Read token setup before connecting a client.

JSON request bodies are limited to 4 MiB of encoded bytes and must contain exactly one object matching the endpoint schema. Unknown fields, null, and trailing data return 400. Oversized bodies return 413 before mutation. Control actions accept an empty body or an empty JSON object. Permission order: viewer < deployer < maintainer < admin. Deployers can start existing releases, retry, re-run, and cancel deployments. Maintainers can author content and execute runbooks within admin boundaries. Project membership and token ceilings also limit each operation. Explicit-role tokens cannot manage API tokens. Unrestricted global tokens can change their owner's local password with current-password verification, including for Viewer and Deployer owners. Requests use the host, port, and scheme that serve this specification.

Endpoints

Expand an endpoint to read its parameters and responses.

admin

GET /api/v1/admin/auditList audit log entries.

Parameters

[
  {
    "type": "string",
    "x-go-name": "User",
    "description": "Exact current actor name or email. ASCII case is ignored.",
    "name": "user",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "UserID",
    "name": "user_id",
    "in": "query"
  },
  {
    "type": "string",
    "x-go-name": "Action",
    "name": "action",
    "in": "query"
  },
  {
    "type": "string",
    "x-go-name": "EntityType",
    "name": "entity_type",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "AuditLogListResponse is a list of audit log entries.",
    "schema": {
      "$ref": "#/definitions/AuditLogListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/admin/database-securityGet configured database transport security and warnings.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/DatabaseSecurityResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/admin/db-tablesList database tables.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "DbTableListResponse is a list of SQLite table names.",
    "schema": {
      "$ref": "#/definitions/DbTableListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/maintenanceRun maintenance tasks.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/admin/notifications

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "NotificationEventListResponse is a list of notification events.",
    "schema": {
      "$ref": "#/definitions/NotificationEventListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/admin/notifications/settings

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "GlobalNotification holds the global notification settings.",
    "schema": {
      "$ref": "#/definitions/GlobalNotification"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/admin/notifications/settings

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "GlobalNotification holds the global notification settings.",
    "schema": {
      "$ref": "#/definitions/GlobalNotification"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/admin/statsGet server stats.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "ServerStatsResponse contains aggregate counts.",
    "schema": {
      "$ref": "#/definitions/ServerStatsResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

admin-agents

GET /api/v1/admin/agentsList agents.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/AgentListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/agents/pairPair an agent.

Parameters

[
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/PairAgentRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/PairAgentResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "503": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/admin/agents/{id}Get an agent and its labels.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/AgentDetailResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/admin/agents/{id}Delete an agent from the inventory, retaining deployment history.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/agents/{id}/drainStop new claims without cancelling issued work. Repeated calls are harmless.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/agents/{id}/environmentsAssign an environment routing label to an agent.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/AgentEnvironmentRequest"
    }
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/admin/agents/{id}/environmentsRemove an environment routing label from an agent.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/AgentEnvironmentRequest"
    }
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/agents/{id}/labelsAdd an agent label.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/AgentLabelRequest"
    }
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/admin/agents/{id}/labelsDelete an agent label.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/AgentLabelRequest"
    }
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/agents/{id}/resumeResume new claims. Repeated calls are harmless.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/agents/{id}/retry-pairRetry pairing an agent.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/PairAgentRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/PairAgentResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "503": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/agents/{id}/revokeRevoke an agent.

Parameters

[
  {
    "type": "string",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  }
}

Related schemas

admin-tokens

GET /api/v1/admin/tokensList all API tokens (admin only).

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "UserID",
    "name": "user_id",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "TokenListResponse is a list of API tokens.",
    "schema": {
      "$ref": "#/definitions/TokenListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/admin/tokens/{id}Revoke any API token by ID (admin only).

Parameters

[
  {
    "type": "string",
    "x-go-name": "TokenID",
    "description": "The API token ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

admin-users

GET /api/v1/admin/usersList all users.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "UserListResponse is a list of users.",
    "schema": {
      "$ref": "#/definitions/UserListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/admin/usersCreate a user.

Parameters

[
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/UserRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "User is a user account.",
    "schema": {
      "$ref": "#/definitions/User"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/admin/users/{id}Get a user.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "User is a user account.",
    "schema": {
      "$ref": "#/definitions/User"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/admin/users/{id}Update a user.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/UserRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "User is a user account.",
    "schema": {
      "$ref": "#/definitions/User"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/admin/users/{id}Delete a user.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

artifacts

GET /api/v1/projects/{id}/package-repositoryRead the active project repository, or null when no package is configured.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/PackageRepositoryResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/package-repositoryConfigure and activate the project repository. Replacing its source preserves existing pins.

A blank credential preserves the secret only when URL template, auth type, and username are unchanged.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/PackageRepositoryRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/PackageRepositoryResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}/package-repositoryDisable packages for future snapshots. Source records needed by existing pins are retained.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "Removed"
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/package-repository/testDownload and validate one version using the saved repository credentials, without creating a release.

Size is the compressed ZIP byte count. Failure does not claim that the package is missing.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/PackageTestRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/PackageTestResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  },
  "502": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/releases/{relId}/artifactRead a release's attached ZIP; pending means no validated pull yet.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RelID",
    "name": "relId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/ReleaseArtifactResponse"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  }
}

Related schemas

deployments

GET /api/v1/deploymentsList deployments in projects accessible to the caller. Global admins see all projects.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "description": "Positive project ID; inaccessible or nonexistent projects return an empty list.",
    "name": "project_id",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "DeploymentListResponse is the paginated envelope for ListDeployments.",
    "schema": {
      "$ref": "#/definitions/DeploymentListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/activityDeployment counts for the last 14 UTC calendar days, including today.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "DeploymentActivityDay contains counts by current status for one UTC date.",
    "schema": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/DeploymentActivityDay"
      }
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}Get a deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "Deployment represents a release executing against an environment.",
    "schema": {
      "$ref": "#/definitions/Deployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/deployments/{id}/approve

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "Deployment represents a release executing against an environment.",
    "schema": {
      "$ref": "#/definitions/Deployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/artifact-gatesList checksum-bound artifact reviews. Sensitive contents are omitted.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "$ref": "#/responses/ArtifactGateListResponse"
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  }
}

Related schemas

POST /api/v1/deployments/{id}/artifact-gates/{stepIndex}/approveApprove this exact artifact revision and resume. Administrator only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepIndex",
    "description": "Zero-based generation step index.",
    "name": "stepIndex",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "type": "object",
      "required": [
        "revision",
        "sha256"
      ],
      "properties": {
        "revision": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Revision"
        },
        "sha256": {
          "type": "string",
          "x-go-name": "SHA256"
        }
      }
    }
  }
]

Responses

{
  "200": {
    "description": "Decision accepted"
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/artifact-gates/{stepIndex}/artifactDownload the exact sensitive artifact. Viewers cannot download artifacts.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepIndex",
    "description": "Zero-based generation step index.",
    "name": "stepIndex",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "Verified binary artifact"
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  }
}

Related schemas

POST /api/v1/deployments/{id}/artifact-gates/{stepIndex}/rejectReject this exact artifact revision. Administrator only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepIndex",
    "description": "Zero-based generation step index.",
    "name": "stepIndex",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "type": "object",
      "required": [
        "revision",
        "sha256"
      ],
      "properties": {
        "revision": {
          "type": "integer",
          "format": "int64",
          "x-go-name": "Revision"
        },
        "sha256": {
          "type": "string",
          "x-go-name": "SHA256"
        }
      }
    }
  }
]

Responses

{
  "200": {
    "description": "Decision accepted"
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/artifact-gates/{stepIndex}/reviewRead redacted Terraform resource changes supplied by the step. Writers only.

Review metadata is not independent verification of the saved plan.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepIndex",
    "description": "Zero-based generation step index.",
    "name": "stepIndex",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "$ref": "#/responses/ArtifactGateReviewResponse"
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  }
}

Related schemas

POST /api/v1/deployments/{id}/cancelCancel a running deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "Deployment represents a release executing against an environment.",
    "schema": {
      "$ref": "#/definitions/Deployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/eventsStream deployment events as Server-Sent Events.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "StreamResponse is a server-sent event stream.",
    "schema": {
      "$ref": "#/definitions/StreamResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/logsList deployment step logs.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "DeploymentLogListResponse is a list of deployment log entries.",
    "schema": {
      "$ref": "#/definitions/DeploymentLogListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/deployments/{id}/redeploy

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "201": {
    "description": "Deployment represents a release executing against an environment.",
    "schema": {
      "$ref": "#/definitions/Deployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/deployments/{id}/retryRetry a failed or cancelled deployment.

Recheck lifecycle promotion and approval gates before retrying.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "201": {
    "description": "Deployment represents a release executing against an environment.",
    "schema": {
      "$ref": "#/definitions/Deployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/rollbackPreview the latest prior successful different release in the same project and environment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RollbackPreview"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/deployments/{id}/rollbackCreate an audited deployment of the confirmed rollback target. Normal gates and approvals apply.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/rollbackRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Deployment represents a release executing against an environment.",
    "schema": {
      "$ref": "#/definitions/Deployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/stagingList active staging transfer metadata. File contents are omitted.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "$ref": "#/responses/StagingListResponse"
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/status

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "DeploymentStatusResponse is the status payload for GetDeploymentStatus.",
    "schema": {
      "$ref": "#/definitions/DeploymentStatusResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/verificationGet the snapshotted verification check and its outcome.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/DeploymentVerification"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/deploymentsList deployments for a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ProjectID",
    "name": "project_id",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "EnvID",
    "name": "env_id",
    "in": "query"
  },
  {
    "type": "string",
    "x-go-name": "Status",
    "name": "status",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "From",
    "name": "from",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "To",
    "name": "to",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "DeploymentListResponse is the paginated envelope for ListDeployments.",
    "schema": {
      "$ref": "#/definitions/DeploymentListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/deploymentsStart a deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/DeploymentScheduleRequest"
    }
  },
  {
    "type": "string",
    "x-go-name": "Key",
    "description": "Optional key containing 1 to 255 visible ASCII characters.\nKeys are scoped to the user, project, and operation, with no expiry.\nMatching retries return the original 201 response and Idempotency-Replayed: true.\nReuse with different input returns 409. Failed creations do not consume keys.",
    "name": "Idempotency-Key",
    "in": "header"
  }
]

Responses

{
  "201": {
    "description": "Deployment represents a release executing against an environment.",
    "schema": {
      "$ref": "#/definitions/Deployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

environments

GET /api/v1/environmentsList all environments.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "EnvironmentListResponse is a list of environments.",
    "schema": {
      "$ref": "#/definitions/EnvironmentListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/environmentsCreate a new environment.

Parameters

[
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/EnvironmentRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Environment represents a deployment target.",
    "schema": {
      "$ref": "#/definitions/Environment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/environments/{id}Get an environment by ID.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "Environment represents a deployment target.",
    "schema": {
      "$ref": "#/definitions/Environment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/environments/{id}Update an environment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/EnvironmentRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "Environment represents a deployment target.",
    "schema": {
      "$ref": "#/definitions/Environment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/environments/{id}Global admin only; deletion also removes scoped shared variables.

Delete an environment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

health

GET /api/v1/healthzPublic API liveness probe. This does not check database connectivity.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "The HTTP API is running.",
    "schema": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "boolean"
        }
      }
    }
  },
  "400": {
    "description": "Unexpected request body."
  },
  "413": {
    "description": "Request body exceeds the encoded byte ceiling."
  }
}

lifecycles

GET /api/v1/lifecyclesList all lifecycles.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "LifecycleListResponse is a list of lifecycles.",
    "schema": {
      "$ref": "#/definitions/LifecycleListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/lifecyclesCreate a new lifecycle.

Parameters

[
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/LifecycleRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Lifecycle represents a deployment promotion pipeline.",
    "schema": {
      "$ref": "#/definitions/Lifecycle"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/lifecycles/{id}Get a lifecycle with its stages.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "LifecycleResponse is the detailed lifecycle payload.",
    "schema": {
      "$ref": "#/definitions/LifecycleResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/lifecycles/{id}Delete a lifecycle and its shared variables. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/lifecycles/{id}/saveSave a lifecycle name and description.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/LifecycleRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "LifecycleResponse is the detailed lifecycle payload.",
    "schema": {
      "$ref": "#/definitions/LifecycleResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/lifecycles/{id}/stagesAdd a stage to a lifecycle. Global admin only.

Positive sort_order values select an unoccupied position, including gaps. Omitted, zero, and negative sort_order values append after the highest position.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/LifecycleStageRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "LifecycleStage is a single stage in a lifecycle.",
    "schema": {
      "$ref": "#/definitions/LifecycleStage"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/lifecycles/{id}/stages/reorderReorder lifecycle stages. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ReorderStagesRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "LifecycleStageListResponse is a list of lifecycle stages.",
    "schema": {
      "$ref": "#/definitions/LifecycleStageListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PATCH /api/v1/lifecycles/{id}/stages/{stageId}Update a lifecycle stage. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StageID",
    "description": "The lifecycle stage ID.",
    "name": "stageId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/LifecycleStageRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "LifecycleStage is a single stage in a lifecycle.",
    "schema": {
      "$ref": "#/definitions/LifecycleStage"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/lifecycles/{id}/stages/{stageId}/deleteDelete a lifecycle stage. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StageID",
    "description": "The lifecycle stage ID.",
    "name": "stageId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

logs

GET /api/v1/deployments/{id}/logs.txtExport deployment logs as text.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "TextResponse is a plain text response.",
    "schema": {
      "$ref": "#/definitions/TextResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/logs/pageRead log previews within 500 rows and 1 MiB, ordered by increasing ID.

Text fields over 16 KiB are shortened. Use next_before for older rows.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "minimum": 1,
    "type": "integer",
    "format": "int64",
    "x-go-name": "Before",
    "description": "Return rows older than this ID. Omit to read the latest page.",
    "name": "before",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "LogPage contains a bounded history window in increasing log-ID order.",
    "schema": {
      "$ref": "#/definitions/LogPage"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/logs/stream

Stream deployment logs. The format=structured SSE option emits indexed step logs and lifecycle states, supports after and Last-Event-ID cursors, and ends with a complete event. Default SSE and NDJSON remain text streams. Add preview=true to structured streams for marked 16 KiB display previews.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "string",
    "x-go-name": "Format",
    "description": "Format is sse, ndjson, or structured (SSE with step metadata).",
    "name": "format",
    "in": "query"
  },
  {
    "minimum": 0,
    "type": "integer",
    "format": "int64",
    "x-go-name": "After",
    "description": "Replay events with an ID greater than this cursor (structured only).",
    "name": "after",
    "in": "query"
  },
  {
    "type": "string",
    "x-go-name": "LastEventID",
    "description": "Reconnection cursor; overrides after (structured only).",
    "name": "Last-Event-ID",
    "in": "header"
  },
  {
    "type": "boolean",
    "x-go-name": "Preview",
    "description": "Bound structured display text to 16 KiB. Defaults to false.",
    "name": "preview",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "StreamResponse is a server-sent event stream.",
    "schema": {
      "$ref": "#/definitions/StreamResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  }
}

Related schemas

GET /api/v1/deployments/{id}/logs/{logId}Get a single deployment log entry.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "LogID",
    "description": "The log entry ID.",
    "name": "logId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "DeploymentLog is a single step log entry.",
    "schema": {
      "$ref": "#/definitions/DeploymentLog"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

members

GET /api/v1/projects/{id}/membersList members of a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "ProjectMemberListResponse is a list of project members.",
    "schema": {
      "$ref": "#/definitions/ProjectMemberListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/membersAdd a member to a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectMemberRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "ProjectMember is a single user membership on a project.",
    "schema": {
      "$ref": "#/definitions/ProjectMember"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/members/{userId}Change a project member's role.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "UserID",
    "description": "The user ID.",
    "name": "userId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectMemberRoleRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "ProjectMember is a single user membership on a project.",
    "schema": {
      "$ref": "#/definitions/ProjectMember"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}/members/{userId}Remove a member from a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "UserID",
    "description": "The user ID.",
    "name": "userId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

project-groups

GET /api/v1/project-groupsList groups containing accessible projects. Global administrators also see empty groups.

Scoped tokens see only groups containing selected, accessible projects.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/ProjectGroupListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/project-groupsCreate a shared group. Requires a global administrator and a global token with an Admin ceiling.

Names are trimmed, case-insensitively unique, and limited to 100 characters. Ungrouped is reserved.

Parameters

[
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectGroupRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/ProjectGroup"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/project-groups/{id}Rename a shared group. Requires a global administrator and a global token with an Admin ceiling.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectGroupRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/ProjectGroup"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/project-groups/{id}Delete a group and move its projects to Ungrouped. Requires a global administrator and global Admin token.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "Deleted"
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

project-templates

GET /api/v1/project-templatesList project templates accessible through current source-project membership.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/ProjectTemplateListResponse"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/project-templatesList templates owned by an accessible source project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Source project ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/ProjectTemplateListResponse"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/project-templatesSave an independent project snapshot without secret values or credentials.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Source project ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/saveProjectTemplateRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/ProjectTemplateResponse"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/project-templates/{templateId}Preview copied defaults, secret definitions, steps, and references.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Source project ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Template ID within the source project.",
    "name": "templateId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/ProjectTemplateResponse"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/project-templates/{templateId}/projectsCreate a project atomically with explicit mappings and fresh secrets and credentials.

Scoped tokens cannot create projects. Lifecycle assignment requires a global administrator.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Source project ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Template ID within the source project.",
    "name": "templateId",
    "in": "path",
    "required": true
  },
  {
    "description": "Use snapshot variable keys for variable_values.\nUse source environment IDs for environment_mappings.\nUse one-based step positions for agent_selectors overrides.\nSupply all secret values and package credentials independently.\nSet reviewed to true after reviewing the preview.",
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ApplyProjectTemplate"
    }
  }
]

Responses

{
  "201": {
    "description": "ProjectResponse is the JSON shape for a project.",
    "schema": {
      "$ref": "#/definitions/ProjectResponse"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  }
}

Related schemas

projects

GET /api/v1/projectsList projects the authenticated user can access.

Parameters

[
  {
    "type": "string",
    "x-go-name": "Query",
    "description": "Search project names and descriptions. Matching ignores ASCII case.",
    "name": "q",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "GroupID",
    "description": "Omit for all groups. Use 0 for Ungrouped or a positive group ID.",
    "name": "group_id",
    "in": "query"
  },
  {
    "enum": [
      "newest",
      "name",
      "name_desc"
    ],
    "type": "string",
    "default": "name",
    "x-go-name": "Sort",
    "description": "Name A-Z by default. Use newest for creation time or name_desc for reverse name order.",
    "name": "sort",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "ProjectListResponse is a list of projects.",
    "schema": {
      "$ref": "#/definitions/ProjectListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projectsCreate a new project. Lifecycle assignment requires a global admin.

Parameters

[
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "ProjectResponse is the JSON shape for a project.",
    "schema": {
      "$ref": "#/definitions/ProjectResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}Get a project by ID.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "ProjectResponse is the JSON shape for a project.",
    "schema": {
      "$ref": "#/definitions/ProjectResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}Update a project. Only a global admin can assign a different lifecycle.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "ProjectResponse is the JSON shape for a project.",
    "schema": {
      "$ref": "#/definitions/ProjectResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}Delete a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/groupAssign a project to a visible group, or send group_id null for Ungrouped.

Requires project authoring permission. Group membership does not grant project access.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectGroupAssignment"
    }
  }
]

Responses

{
  "200": {
    "description": "ProjectResponse is the JSON shape for a project.",
    "schema": {
      "$ref": "#/definitions/ProjectResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/notificationsGet project notification settings.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "ProjectNotificationResponse is the notification settings for a project.",
    "schema": {
      "$ref": "#/definitions/ProjectNotificationResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/notificationsUpdate project notification settings.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ProjectNotificationRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "ProjectNotificationResponse is the notification settings for a project.",
    "schema": {
      "$ref": "#/definitions/ProjectNotificationResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

releases

GET /api/v1/projects/{id}/releasesList releases for a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "ReleaseListResponse is a list of releases.",
    "schema": {
      "$ref": "#/definitions/ReleaseListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/releasesCreate a release snapshot for a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ReleaseRequest"
    }
  },
  {
    "type": "string",
    "x-go-name": "Key",
    "description": "Optional key containing 1 to 255 visible ASCII characters.\nKeys are scoped to the user, project, and operation, with no expiry.\nMatching retries return the original 201 response and Idempotency-Replayed: true.\nReuse with different input returns 409. Failed creations do not consume keys.",
    "name": "Idempotency-Key",
    "in": "header"
  }
]

Responses

{
  "201": {
    "description": "Release is a refreshable snapshot of project steps and variables.",
    "schema": {
      "$ref": "#/definitions/Release"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/releases/{relId}Get a release with its variable snapshots.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RelID",
    "description": "The release ID.",
    "name": "relId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "ReleaseWithVariablesResponse is the detailed release payload.",
    "schema": {
      "$ref": "#/definitions/ReleaseWithVariablesResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}/releases/{relId}Delete a release, its schedules, and completed deployment history.

Active or unconfirmed deployments prevent deletion.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RelID",
    "description": "The release ID.",
    "name": "relId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/releases/{relId}/refreshRefresh a release snapshot from current project steps and variables.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RelID",
    "description": "The release ID.",
    "name": "relId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "Release is a refreshable snapshot of project steps and variables.",
    "schema": {
      "$ref": "#/definitions/Release"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

runbooks

GET /api/v1/projects/{id}/runbook-executionsList runbook execution history.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookExecutionListResponse"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbook-executions/{executionId}Read a runbook execution.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookExecutionDetail"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/runbook-executions/{executionId}/approveApprove and start a pending runbook execution.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookStateResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/runbook-executions/{executionId}/cancelCancel a running runbook execution.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookStateResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbook-executions/{executionId}/logsRead persisted runbook logs in execution order.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "DeploymentLogListResponse is a list of deployment log entries.",
    "schema": {
      "$ref": "#/definitions/DeploymentLogListResponse"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbook-executions/{executionId}/logs.txtExport all persisted runbook logs as text.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "TextResponse is a plain text response.",
    "schema": {
      "$ref": "#/definitions/TextResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbook-executions/{executionId}/logs/pageRead a bounded runbook log page. Use next_before for older rows.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  },
  {
    "minimum": 1,
    "type": "integer",
    "format": "int64",
    "x-go-name": "Before",
    "description": "Return rows older than this ID. Omit to read the latest page.",
    "name": "before",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "LogPage contains a bounded history window in increasing log-ID order.",
    "schema": {
      "$ref": "#/definitions/LogPage"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbook-executions/{executionId}/logs/streamStream persisted and live runbook logs.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  },
  {
    "type": "string",
    "x-go-name": "Format",
    "description": "Format is sse, ndjson, or structured.",
    "name": "format",
    "in": "query"
  },
  {
    "type": "boolean",
    "x-go-name": "Preview",
    "description": "Bound structured display text to 16 KiB. Defaults to false.",
    "name": "preview",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "StreamResponse is a server-sent event stream.",
    "schema": {
      "$ref": "#/definitions/StreamResponse"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/runbook-executions/{executionId}/retryRetry the pinned version of a completed runbook execution.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ExecutionID",
    "name": "executionId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/RunbookExecution"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbooksList project runbooks.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookListResponse"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/runbooksCreate a runbook and its first immutable version.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/RunbookSaveRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/RunbookSaveResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbooks/{runbookId}Read a runbook and its saved versions.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookDetailResponse"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/runbooks/{runbookId}Save the next immutable version of a runbook.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/RunbookSaveRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/RunbookSaveResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}/runbooks/{runbookId}Delete a runbook from active lists and disable its schedules.

Saved versions, backing releases, artifact pins, completed executions, and logs remain for history. Future execution and retry are blocked. Deleted names remain reserved. Finish or cancel unfinished executions and confirm cleanup before deletion. A repeated deletion returns 404.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "Runbook deleted"
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/runbooks/{runbookId}/executionsRun one concrete version against a project environment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/RunbookExecuteRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/RunbookExecution"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbooks/{runbookId}/schedulesList runbook schedules.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookScheduleListResponse"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/runbooks/{runbookId}/schedulesSchedule a pinned version or the latest saved version.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/RunbookScheduleRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/RunbookSchedule"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/runbooks/{runbookId}/schedules/{scheduleId}/disableDisable a runbook schedule.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ScheduleID",
    "name": "scheduleId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookScheduleStateResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/runbooks/{runbookId}/versions/{versionId}Read an immutable runbook version.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "RunbookID",
    "name": "runbookId",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "VersionID",
    "name": "versionId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/RunbookVersionResponse"
    }
  }
}

Related schemas

schedules

GET /api/v1/projects/{id}/schedulesList scheduled deployments for a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "ScheduledDeploymentListResponse is a list of scheduled deployments.",
    "schema": {
      "$ref": "#/definitions/ScheduledDeploymentListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/schedulesCreate a scheduled deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ScheduleRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "ScheduledDeployment is a cron-driven deployment configuration.",
    "schema": {
      "$ref": "#/definitions/ScheduledDeployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/schedules/{schedId}Get a scheduled deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "SchedID",
    "description": "The schedule ID.",
    "name": "schedId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "ScheduledDeployment is a cron-driven deployment configuration.",
    "schema": {
      "$ref": "#/definitions/ScheduledDeployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/schedules/{schedId}Update a scheduled deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "SchedID",
    "description": "The schedule ID.",
    "name": "schedId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ScheduleRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "ScheduledDeployment is a cron-driven deployment configuration.",
    "schema": {
      "$ref": "#/definitions/ScheduledDeployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}/schedules/{schedId}Delete a scheduled deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "SchedID",
    "description": "The schedule ID.",
    "name": "schedId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/schedules/{schedId}/toggleToggle active state of a scheduled deployment.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "SchedID",
    "description": "The schedule ID.",
    "name": "schedId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "ScheduledDeployment is a cron-driven deployment configuration.",
    "schema": {
      "$ref": "#/definitions/ScheduledDeployment"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

steps

GET /api/v1/projects/{id}/stepsList steps for a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "StepListResponse is a list of project steps.",
    "schema": {
      "$ref": "#/definitions/StepListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/stepsCreate a project step.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/StepRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Step is an executable script step within a project.",
    "schema": {
      "$ref": "#/definitions/Step"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PATCH /api/v1/projects/{id}/steps/reorderReorder project steps.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ReorderStepsRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "StepListResponse is a list of project steps.",
    "schema": {
      "$ref": "#/definitions/StepListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/steps/{stepId}Get a project step.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepID",
    "description": "The step ID.",
    "name": "stepId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "Step is an executable script step within a project.",
    "schema": {
      "$ref": "#/definitions/Step"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/steps/{stepId}Update a project step.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepID",
    "description": "The step ID.",
    "name": "stepId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/StepRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "Step is an executable script step within a project.",
    "schema": {
      "$ref": "#/definitions/Step"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}/steps/{stepId}Delete a project step.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepID",
    "description": "The step ID.",
    "name": "stepId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

system

GET /api/v1/versionGet the server executable's software version, build number, and source commit.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "Info describes the executable, independently of agent wire protocols.",
    "schema": {
      "$ref": "#/definitions/BuildInfo"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  }
}

Related schemas

template-library

GET /api/v1/projects/{id}/template-libraryBrowse curated templates within an authorized project. Supports scoped tokens.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Destination project ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/LibraryTemplateListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/template-library/{slug}Preview a curated template within an authorized project. Supports scoped tokens.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Destination project ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "string",
    "x-go-name": "Slug",
    "description": "Curated template slug from the library list.",
    "name": "slug",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "LibraryTemplate is bundled with the binary. Applying it creates independent\nproject records, rather than references to a mutable library definition.",
    "schema": {
      "$ref": "#/definitions/LibraryTemplate"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/template-library/{slug}/applyAppend editable steps and encrypted variables atomically. Never starts work.

Requires effective Maintainer permission. Conflicts do not overwrite configuration.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "Destination project ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "string",
    "x-go-name": "Slug",
    "description": "Curated template slug from the library list.",
    "name": "slug",
    "in": "path",
    "required": true
  },
  {
    "description": "Supply the preview version, reviewed=true, and variable keys.\nHost templates require agent labels. Server-container templates omit labels.\nEvery matching agent runs the steps. Use a unique label for a single host.\nTerraform requires TF_CONTAINER_IMAGE and TF_CONFIG_DIR and pauses before apply.",
    "name": "Body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/ApplyLibraryTemplate"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/LibraryApplyResult"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  }
}

Related schemas

GET /api/v1/template-libraryList curated step and workflow templates. Global tokens only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/LibraryTemplateListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  }
}

Related schemas

GET /api/v1/template-library/{slug}Preview every script, variable, dependency, and permission. Global tokens only.

Parameters

[
  {
    "type": "string",
    "x-go-name": "Slug",
    "description": "Curated template slug from the library list.",
    "name": "slug",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "LibraryTemplate is bundled with the binary. Applying it creates independent\nproject records, rather than references to a mutable library definition.",
    "schema": {
      "$ref": "#/definitions/LibraryTemplate"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  }
}

Related schemas

templates

GET /api/v1/projects/{id}/templates-pickerList step templates for the picker.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "StepTemplateListResponse is a list of step templates.",
    "schema": {
      "$ref": "#/definitions/StepTemplateListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/templatesList all step templates.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "StepTemplateListResponse is a list of step templates.",
    "schema": {
      "$ref": "#/definitions/StepTemplateListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/templatesCreate a step template.

Parameters

[
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/StepTemplateRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "StepTemplate is a reusable step template.",
    "schema": {
      "$ref": "#/definitions/StepTemplate"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/templates/{id}Get a step template.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "StepTemplate is a reusable step template.",
    "schema": {
      "$ref": "#/definitions/StepTemplate"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/templates/{id}Update a step template.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/StepTemplateRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "StepTemplate is a reusable step template.",
    "schema": {
      "$ref": "#/definitions/StepTemplate"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "409": {
    "description": "Conflict error response.",
    "schema": {
      "$ref": "#/definitions/ConflictError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/templates/{id}Delete a step template.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/templates/{id}/historyList version history for a step template.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "StepTemplateVersionListResponse is a list of step template versions.",
    "schema": {
      "$ref": "#/definitions/StepTemplateVersionListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

tokens

GET /api/v1/tokensList API tokens for the authenticated user.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "UserID",
    "name": "user_id",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "TokenListResponse is a list of API tokens.",
    "schema": {
      "$ref": "#/definitions/TokenListResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/tokensCreate a new API token.

Parameters

[
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/CreateTokenRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "CreateTokenResponse returns the plaintext token once.",
    "schema": {
      "$ref": "#/definitions/CreateTokenResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/tokens/{id}Revoke the authenticated user's API token.

Parameters

[
  {
    "type": "string",
    "x-go-name": "TokenID",
    "description": "The API token ID.",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PATCH /api/v1/tokens/{id}Replace an owned token's explicit scope, role, and project selection.

Scoped tokens and tokens with permission ceilings cannot manage tokens.

Parameters

[
  {
    "type": "string",
    "x-go-name": "TokenID",
    "description": "The API token ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/TokenScopeResponse"
    }
  }
]

Responses

{
  "200": {
    "description": "TokenScopeResponse identifies a token's permission ceiling.",
    "schema": {
      "$ref": "#/definitions/TokenScopeResponse"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

users

GET /api/v1/users/meGet the currently authenticated user.

This endpoint has no documented parameters.

Responses

{
  "200": {
    "description": "User is a user account.",
    "schema": {
      "$ref": "#/definitions/User"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/users/me/passwordChange the authenticated local user's password.

Require an unrestricted global bearer token and the current password. All roles can change their own password. Project-scoped and explicit-role tokens cannot use this operation. Browser sessions and pending MFA challenges are invalidated atomically. API tokens and enrolled factors remain valid. SSO-only accounts must change their password with their identity provider. New passwords must leave room for all three password fields, email, and CSRF within the 64 KiB encoded browser form limit. Line breaks are not allowed.

Parameters

[
  {
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "type": "object",
      "required": [
        "current_password",
        "new_password",
        "password_confirmation"
      ],
      "properties": {
        "current_password": {
          "type": "string",
          "format": "password"
        },
        "new_password": {
          "type": "string",
          "format": "password",
          "minLength": 8
        },
        "password_confirmation": {
          "type": "string",
          "format": "password"
        }
      },
      "additionalProperties": false
    }
  }
]

Responses

{
  "204": {
    "description": "Password changed. Sign in again in all browsers."
  },
  "400": {
    "description": "Invalid JSON body."
  },
  "401": {
    "description": "Missing, invalid, expired, or revoked bearer token."
  },
  "403": {
    "description": "Token has a project scope or permission ceiling."
  },
  "413": {
    "description": "Request body exceeds the encoded byte ceiling."
  },
  "422": {
    "description": "Invalid current password, missing local password, or invalid new password."
  },
  "500": {
    "description": "Password update failed. The transaction preserves the original state."
  }
}

variables

POST /api/v1/admin/secret-exportsRequest an export of secret-marked project or shared lifecycle variables.

Require an instance administrator and a global bearer token with admin permission. Open approval_url in a browser as the same user. Confirm the selected scope. Reauthenticate with the local password or OAuth/OIDC, including required MFA. Each export requires new authentication. The request expires after five minutes. Keep claim_token private. It is returned once and never belongs in a URL.

Parameters

[
  {
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "type": "object",
      "required": [
        "scope",
        "scope_id"
      ],
      "properties": {
        "scope": {
          "type": "string",
          "enum": [
            "project",
            "lifecycle"
          ]
        },
        "scope_id": {
          "type": "integer",
          "format": "int64",
          "minimum": 1
        }
      }
    }
  }
]

Responses

{
  "201": {
    "description": "Pending export. No secret values are returned.",
    "schema": {
      "type": "object",
      "properties": {
        "approval_url": {
          "description": "Relative browser URL. This identifier does not authorize a download.",
          "type": "string"
        },
        "claim_token": {
          "description": "Single-use download credential. Store it securely until approval.",
          "type": "string"
        },
        "expires_at": {
          "type": "integer",
          "format": "int64"
        },
        "id": {
          "type": "string"
        }
      }
    }
  },
  "400": {
    "description": "Invalid request or scope."
  },
  "401": {
    "description": "Missing or invalid bearer token."
  },
  "403": {
    "description": "Instance administrator and global token required."
  },
  "404": {
    "description": "Project or lifecycle not found."
  },
  "413": {
    "description": "Request exceeds the JSON body limit."
  },
  "500": {
    "description": "Export request failed."
  }
}
POST /api/v1/admin/secret-exports/{exportId}/downloadDownload an approved export once as a JSON attachment.

Require the original bearer token and claim_token after browser reauthentication. The approving browser session must remain valid. Logout invalidates approval. Project administrators without the global admin role cannot export secrets. Ordinary variable reads remain masked. Non-secret variables and snapshots are excluded. Successful downloads generate an audit event without secret values.

Parameters

[
  {
    "type": "string",
    "name": "exportId",
    "in": "path",
    "required": true
  },
  {
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "type": "object",
      "required": [
        "claim_token"
      ],
      "properties": {
        "claim_token": {
          "type": "string"
        }
      }
    }
  }
]

Responses

{
  "200": {
    "description": "JSON attachment. Cache-Control is no-store.",
    "schema": {
      "type": "object",
      "properties": {
        "scope": {
          "type": "string"
        },
        "scope_id": {
          "type": "integer",
          "format": "int64"
        },
        "variables": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "environment_id": {
                "type": "integer",
                "format": "int64",
                "x-nullable": true
              },
              "id": {
                "type": "integer",
                "format": "int64"
              },
              "name": {
                "type": "string"
              },
              "value": {
                "description": "Plaintext secret value.",
                "type": "string"
              }
            }
          }
        }
      }
    }
  },
  "400": {
    "description": "Invalid JSON body."
  },
  "401": {
    "description": "Missing or invalid bearer token."
  },
  "403": {
    "description": "Instance administrator and global token required."
  },
  "404": {
    "description": "Export is unapproved, expired, canceled, consumed, or bound to different credentials."
  },
  "413": {
    "description": "Request exceeds the JSON body limit."
  },
  "500": {
    "description": "Export failed. No partial export is returned."
  }
}
GET /api/v1/lifecycles/{id}/variablesList shared lifecycle variables. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/LifecycleVariableList"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/lifecycles/{id}/variablesCreate a shared lifecycle variable. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/VariableRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "Created",
    "schema": {
      "$ref": "#/definitions/LifecycleVariable"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/lifecycles/{id}/variables/{varId}Get a masked shared lifecycle variable. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "varId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/LifecycleVariable"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/lifecycles/{id}/variables/{varId}Update a shared lifecycle variable. Blank values preserve existing secrets. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "varId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/VariableRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/LifecycleVariable"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/lifecycles/{id}/variables/{varId}Delete a shared variable. Future deployments stop inheriting it; active deployments retain captured values. Global admin only.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "varId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/variablesList variables for a project.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "EnvironmentID",
    "name": "environment_id",
    "in": "query"
  },
  {
    "type": "boolean",
    "x-go-name": "SecretOnly",
    "name": "secret_only",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Limit",
    "name": "limit",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "Offset",
    "name": "offset",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "VariableListResponse is a list of variables.",
    "schema": {
      "$ref": "#/definitions/VariableListResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

POST /api/v1/projects/{id}/variablesCreate a project variable.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/VariableRequest"
    }
  }
]

Responses

{
  "201": {
    "description": "VariableResponse is the JSON shape for a variable.",
    "schema": {
      "$ref": "#/definitions/VariableResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/variables/availableInspect current configured and conditional runtime variables for step authoring.

Secret values are null. Requires project access. Does not inspect snapshots or host environments.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "EnvironmentID",
    "description": "Omit for scope alternatives rather than an effective environment.",
    "name": "environment_id",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "StepID",
    "description": "Saved step must belong to this project. Draft fields override its metadata.",
    "name": "step_id",
    "in": "query"
  },
  {
    "enum": [
      "bash",
      "pwsh",
      "powershell",
      "python3"
    ],
    "type": "string",
    "x-go-name": "Interpreter",
    "name": "interpreter",
    "in": "query"
  },
  {
    "enum": [
      "local",
      "agent"
    ],
    "type": "string",
    "x-go-name": "ExecutionTarget",
    "name": "execution_target",
    "in": "query"
  },
  {
    "enum": [
      "host",
      "container"
    ],
    "type": "string",
    "x-go-name": "AgentExecutionMode",
    "description": "Local requires host; agent accepts host or container.",
    "name": "agent_execution_mode",
    "in": "query"
  },
  {
    "type": "string",
    "x-go-name": "VariableNames",
    "description": "Comma-separated names. Explicit empty selects all configured variables.",
    "name": "variable_names",
    "in": "query"
  }
]

Responses

{
  "200": {
    "description": "AvailableVariables describes current authoring definitions, not snapshots.",
    "schema": {
      "$ref": "#/definitions/AvailableVariables"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/variables/inheritedList inherited lifecycle variables and project overrides. Requires project membership; secret values are masked.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "name": "id",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "OK",
    "schema": {
      "$ref": "#/definitions/InheritedVariableList"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "403": {
    "description": "Forbidden error response.",
    "schema": {
      "$ref": "#/definitions/ForbiddenError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

GET /api/v1/projects/{id}/variables/{varId}Get a project variable.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "VarID",
    "description": "The variable ID.",
    "name": "varId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "200": {
    "description": "VariableResponse is the JSON shape for a variable.",
    "schema": {
      "$ref": "#/definitions/VariableResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

PUT /api/v1/projects/{id}/variables/{varId}Update a project variable.

Parameters

[
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "VarID",
    "description": "The variable ID.",
    "name": "varId",
    "in": "path",
    "required": true
  },
  {
    "x-go-name": "Body",
    "name": "body",
    "in": "body",
    "required": true,
    "schema": {
      "$ref": "#/definitions/VariableRequest"
    }
  }
]

Responses

{
  "200": {
    "description": "VariableResponse is the JSON shape for a variable.",
    "schema": {
      "$ref": "#/definitions/VariableResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "404": {
    "description": "Not found error response.",
    "schema": {
      "$ref": "#/definitions/NotFoundError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "422": {
    "description": "Validation error response.",
    "schema": {
      "$ref": "#/definitions/ValidationError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

DELETE /api/v1/projects/{id}/variables/{varId}Delete a project variable.

Parameters

[
  {
    "enum": [
      "inherit"
    ],
    "type": "string",
    "x-go-name": "Reset",
    "description": "Set to inherit to remove every project value with this name and scope,\nincluding legacy duplicate unscoped rows. Other scopes are retained.",
    "name": "reset",
    "in": "query"
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "ID",
    "description": "The resource ID.",
    "name": "id",
    "in": "path",
    "required": true
  },
  {
    "type": "integer",
    "format": "int64",
    "x-go-name": "VarID",
    "description": "The variable ID.",
    "name": "varId",
    "in": "path",
    "required": true
  }
]

Responses

{
  "204": {
    "description": "EmptyResponse is returned for no-content endpoints.",
    "schema": {
      "$ref": "#/definitions/EmptyResponse"
    }
  },
  "400": {
    "description": "Bad request error response.",
    "schema": {
      "$ref": "#/definitions/BadRequestError"
    }
  },
  "401": {
    "description": "Unauthorized error response.",
    "schema": {
      "$ref": "#/definitions/UnauthorizedError"
    }
  },
  "413": {
    "description": "Request body exceeds the 4 MiB encoded byte ceiling.",
    "schema": {
      "$ref": "#/definitions/RequestEntityTooLargeError"
    }
  },
  "500": {
    "description": "Server error response.",
    "schema": {
      "$ref": "#/definitions/ServerError"
    }
  }
}

Related schemas

Request and response schemas

Use the related schema links to follow nested request and response fields.

Agent
{
  "type": "object",
  "properties": {
    "administrative_status": {
      "type": "string",
      "x-go-name": "AdministrativeStatus"
    },
    "agent_protocol": {
      "$ref": "#/definitions/swaggerSQLNullString"
    },
    "agent_version": {
      "$ref": "#/definitions/swaggerSQLNullString"
    },
    "certificate_fingerprint": {
      "$ref": "#/definitions/swaggerSQLNullString"
    },
    "compatibility": {
      "type": "string",
      "x-go-name": "Compatibility"
    },
    "container_interpreters": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "ContainerInterpreters"
    },
    "container_runtimes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "ContainerRuntimes"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "current_work": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/swaggerAgentWork"
      },
      "x-go-name": "CurrentWork"
    },
    "draining": {
      "type": "boolean",
      "x-go-name": "Draining"
    },
    "endpoint": {
      "type": "string",
      "x-go-name": "Endpoint"
    },
    "execution_modes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "ExecutionModes"
    },
    "health": {
      "type": "string",
      "x-go-name": "Health"
    },
    "id": {
      "type": "string",
      "x-go-name": "ID"
    },
    "interpreters": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "Interpreters"
    },
    "last_error": {
      "$ref": "#/definitions/swaggerAgentError"
    },
    "last_heartbeat_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "last_successful_deployment": {
      "$ref": "#/definitions/swaggerAgentSuccess"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "queued_work": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "QueuedWork"
    },
    "recommended_agent_version": {
      "type": "string",
      "x-go-name": "RecommendedAgentVersion"
    },
    "revoked_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "server_version": {
      "type": "string",
      "x-go-name": "ServerVersion"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UpdatedAt"
    }
  },
  "x-go-name": "swaggerAgent",
  "x-go-package": "durpdeploy/internal/handler/api"
}
AgentDetailResponse
{
  "type": "object",
  "properties": {
    "agent": {
      "$ref": "#/definitions/Agent"
    },
    "environment_labels": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/Environment"
      },
      "x-go-name": "EnvironmentLabels"
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "Labels"
    }
  },
  "x-go-name": "swaggerAgentDetailResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
AgentEnvironmentRequest
{
  "type": "object",
  "properties": {
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    }
  },
  "x-go-name": "swaggerAgentEnvironmentRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
AgentLabelRequest
{
  "type": "object",
  "properties": {
    "label": {
      "type": "string",
      "x-go-name": "Label"
    }
  },
  "x-go-name": "swaggerAgentLabelRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
AgentListResponse
{
  "type": "array",
  "items": {
    "$ref": "#/definitions/Agent"
  },
  "x-go-name": "swaggerAgentListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ApplyLibraryTemplate
{
  "type": "object",
  "properties": {
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "reviewed": {
      "type": "boolean",
      "x-go-name": "Reviewed"
    },
    "variable_values": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "x-go-name": "VariableValues"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
ApplyProjectTemplate
{
  "type": "object",
  "properties": {
    "agent_selectors": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "x-go-name": "AgentSelectors"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "environment_mappings": {
      "type": "object",
      "additionalProperties": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "EnvironmentMappings"
    },
    "lifecycle_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LifecycleID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "package_repository": {
      "$ref": "#/definitions/ProjectTemplatePackage"
    },
    "reviewed": {
      "type": "boolean",
      "x-go-name": "Reviewed"
    },
    "variable_values": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "x-go-name": "VariableValues"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
ArtifactGateInfo
{
  "type": "object",
  "properties": {
    "approved_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ApprovedAt"
    },
    "approved_by": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ApprovedBy"
    },
    "bundle_sha256": {
      "type": "string",
      "x-go-name": "BundleSHA256"
    },
    "bundle_size": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "BundleSize"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "decision_ready": {
      "type": "boolean",
      "x-go-name": "DecisionReady"
    },
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "expires_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ExpiresAt"
    },
    "review": {
      "$ref": "#/definitions/GateReview"
    },
    "review_format": {
      "type": "string",
      "x-go-name": "ReviewFormat"
    },
    "review_source": {
      "type": "string",
      "x-go-name": "ReviewSource"
    },
    "review_verified": {
      "type": "boolean",
      "x-go-name": "ReviewVerified"
    },
    "revision": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Revision"
    },
    "sha256": {
      "type": "string",
      "x-go-name": "SHA256"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    },
    "step_index": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "StepIndex"
    }
  },
  "x-go-package": "durpdeploy/views/pages"
}
AuditLog
{
  "type": "object",
  "title": "AuditLog is a recorded state-changing action.",
  "properties": {
    "action": {
      "type": "string",
      "x-go-name": "Action"
    },
    "actor_email": {
      "type": "string",
      "x-go-name": "ActorEmail"
    },
    "actor_name": {
      "type": "string",
      "x-go-name": "ActorName"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "details": {
      "type": "string",
      "x-go-name": "Details"
    },
    "entity_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EntityID"
    },
    "entity_type": {
      "type": "string",
      "x-go-name": "EntityType"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "target_url": {
      "description": "Relative web URL. Empty without an unambiguous supported target record.",
      "type": "string",
      "x-go-name": "TargetURL"
    },
    "user_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UserID"
    }
  },
  "x-go-name": "swaggerAuditLog",
  "x-go-package": "durpdeploy/internal/handler/api"
}
AuditLogListResponse
{
  "type": "array",
  "title": "AuditLogListResponse is a list of audit log entries.",
  "items": {
    "$ref": "#/definitions/AuditLog"
  },
  "x-go-name": "swaggerAuditLogListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
AuditLogParams
{
  "type": "object",
  "title": "AuditLogParams filters the audit log list.",
  "properties": {
    "action": {
      "type": "string",
      "x-go-name": "Action"
    },
    "entity_type": {
      "type": "string",
      "x-go-name": "EntityType"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "user": {
      "description": "Exact current actor name or email. ASCII case is ignored.",
      "type": "string",
      "x-go-name": "User"
    },
    "user_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UserID"
    }
  },
  "x-go-name": "swaggerAuditLogParams",
  "x-go-package": "durpdeploy/internal/handler/api"
}
AvailableVariables
{
  "type": "object",
  "title": "AvailableVariables describes current authoring definitions, not snapshots.",
  "properties": {
    "configured": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/VariableDefinition"
      },
      "x-go-name": "Configured"
    },
    "context": {
      "$ref": "#/definitions/VariableContext"
    },
    "environments": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/VariableEnvironment"
      },
      "x-go-name": "Environments"
    },
    "predefined": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/VariableDefinition"
      },
      "x-go-name": "Predefined"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "Warnings"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
BadRequestError
{
  "type": "object",
  "title": "Bad request error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerBadRequestError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
BuildInfo
{
  "type": "object",
  "title": "Info describes the executable, independently of agent wire protocols.",
  "properties": {
    "build_number": {
      "type": "string",
      "x-go-name": "BuildNumber"
    },
    "commit": {
      "type": "string",
      "x-go-name": "Commit"
    },
    "modified": {
      "type": "boolean",
      "x-go-name": "Modified"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "Info",
  "x-go-package": "durpdeploy/internal/buildinfo"
}
ConflictError
{
  "type": "object",
  "title": "Conflict error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerConflictError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
CreateTokenRequest
{
  "type": "object",
  "title": "CreateTokenRequest is the body for CreateToken.",
  "properties": {
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "project_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "ProjectIDs"
    },
    "role": {
      "description": "Viewer, deployer, maintainer, or admin. This ceiling cannot increase owner permissions.",
      "type": "string",
      "x-go-name": "Role"
    },
    "scope": {
      "description": "Omit grant fields for legacy global creation. Scoped selections must be nonempty.\nBoth global and scoped tokens support an explicit permission ceiling.",
      "type": "string",
      "x-go-name": "Scope"
    }
  },
  "x-go-name": "swaggerCreateTokenRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
CreateTokenResponse
{
  "type": "object",
  "title": "CreateTokenResponse returns the plaintext token once.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "id": {
      "type": "string",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "prefix": {
      "type": "string",
      "x-go-name": "Prefix"
    },
    "project_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "ProjectIDs"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "scope": {
      "type": "string",
      "x-go-name": "Scope"
    },
    "token_id": {
      "type": "string",
      "x-go-name": "TokenID"
    }
  },
  "x-go-name": "swaggerCreateTokenResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DatabaseSecurityResponse
{
  "type": "object",
  "properties": {
    "backend": {
      "type": "string",
      "x-go-name": "Backend"
    },
    "policy": {
      "type": "string",
      "x-go-name": "Policy"
    },
    "warning": {
      "type": "string",
      "x-go-name": "Warning"
    }
  },
  "x-go-name": "swaggerDatabaseSecurityResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DbTableListResponse
{
  "type": "array",
  "title": "DbTableListResponse is a list of SQLite table names.",
  "items": {
    "type": "string"
  },
  "x-go-name": "swaggerDbTableListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
Deployment
{
  "type": "object",
  "title": "Deployment represents a release executing against an environment.",
  "properties": {
    "active_deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ActiveDeploymentID"
    },
    "active_work_url": {
      "type": "string",
      "x-go-name": "ActiveWorkURL"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "finished_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "FinishedAt"
    },
    "forced": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Forced"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "note": {
      "type": "string",
      "x-go-name": "Note"
    },
    "provenance": {
      "$ref": "#/definitions/ReleaseSource"
    },
    "queue_position": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "QueuePosition"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    },
    "started_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "StartedAt"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    }
  },
  "x-go-name": "swaggerDeployment",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentActivityDay
{
  "type": "object",
  "title": "DeploymentActivityDay contains counts by current status for one UTC date.",
  "properties": {
    "counts": {
      "type": "object",
      "additionalProperties": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "Counts"
    },
    "date": {
      "type": "string",
      "x-go-name": "Date"
    }
  },
  "x-go-name": "deploymentActivityDay",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentListItem
{
  "type": "object",
  "title": "DeploymentListItem is the enriched row returned by ListDeployments.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "environment_name": {
      "type": "string",
      "x-go-name": "EnvironmentName"
    },
    "finished_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "FinishedAt"
    },
    "forced": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Forced"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "note": {
      "type": "string",
      "x-go-name": "Note"
    },
    "project_name": {
      "type": "string",
      "x-go-name": "ProjectName"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    },
    "release_version": {
      "type": "string",
      "x-go-name": "ReleaseVersion"
    },
    "started_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "StartedAt"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    }
  },
  "x-go-name": "swaggerDeploymentListItem",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentListResponse
{
  "type": "object",
  "title": "DeploymentListResponse is the paginated envelope for ListDeployments.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/DeploymentListItem"
      },
      "x-go-name": "Items"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "offset": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Offset"
    },
    "total": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Total"
    }
  },
  "x-go-name": "swaggerDeploymentListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentLog
{
  "type": "object",
  "title": "DeploymentLog is a single step log entry.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "line": {
      "type": "string",
      "x-go-name": "Line"
    },
    "step_name": {
      "type": "string",
      "x-go-name": "StepName"
    }
  },
  "x-go-name": "swaggerDeploymentLog",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentLogListResponse
{
  "type": "array",
  "title": "DeploymentLogListResponse is a list of deployment log entries.",
  "items": {
    "$ref": "#/definitions/DeploymentLog"
  },
  "x-go-name": "swaggerDeploymentLogListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentScheduleRequest
{
  "type": "object",
  "title": "DeploymentScheduleRequest is the body for scheduling a deployment.",
  "properties": {
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "force": {
      "type": "boolean",
      "x-go-name": "Force"
    },
    "note": {
      "type": "string",
      "x-go-name": "Note"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    }
  },
  "x-go-name": "swaggerDeploymentScheduleRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentStagingSnapshot
{
  "type": "object",
  "properties": {
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "producer": {
      "type": "string",
      "x-go-name": "Producer"
    },
    "sha256": {
      "type": "string",
      "x-go-name": "Sha256"
    },
    "size": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Size"
    },
    "step_index": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "StepIndex"
    }
  },
  "x-go-package": "durpdeploy/internal/db"
}
DeploymentStatusResponse
{
  "type": "object",
  "title": "DeploymentStatusResponse is the status payload for GetDeploymentStatus.",
  "properties": {
    "active_deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ActiveDeploymentID"
    },
    "active_work_url": {
      "type": "string",
      "x-go-name": "ActiveWorkURL"
    },
    "queue_position": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "QueuePosition"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    },
    "waiting_for_agents": {
      "type": "boolean",
      "x-go-name": "WaitingForAgents"
    }
  },
  "x-go-name": "swaggerDeploymentStatusResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
DeploymentVerification
{
  "type": "object",
  "properties": {
    "finished_at": {
      "$ref": "#/definitions/NullInt64"
    },
    "started_at": {
      "$ref": "#/definitions/NullInt64"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    },
    "timeout_seconds": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TimeoutSeconds"
    },
    "type": {
      "type": "string",
      "x-go-name": "Type"
    }
  },
  "x-go-name": "verificationResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
EmptyResponse
{
  "type": "object",
  "title": "EmptyResponse is returned for no-content endpoints.",
  "x-go-name": "swaggerEmptyResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
Environment
{
  "type": "object",
  "title": "Environment represents a deployment target.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "tags": {
      "type": "string",
      "x-go-name": "Tags"
    },
    "verification_target": {
      "description": "Admin-only; omitted from responses for other roles.",
      "type": "string",
      "x-go-name": "VerificationTarget"
    },
    "verification_timeout_seconds": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "VerificationTimeoutSeconds"
    },
    "verification_type": {
      "type": "string",
      "x-go-name": "VerificationType"
    }
  },
  "x-go-name": "swaggerEnvironment",
  "x-go-package": "durpdeploy/internal/handler/api"
}
EnvironmentListResponse
{
  "type": "array",
  "title": "EnvironmentListResponse is a list of environments.",
  "items": {
    "$ref": "#/definitions/Environment"
  },
  "x-go-name": "swaggerEnvironmentListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
EnvironmentRequest
{
  "type": "object",
  "title": "EnvironmentRequest is the body for create/update environment.",
  "properties": {
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "tags": {
      "type": "string",
      "x-go-name": "Tags"
    },
    "verification_target": {
      "type": "string",
      "x-go-name": "VerificationTarget"
    },
    "verification_timeout_seconds": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "VerificationTimeoutSeconds"
    },
    "verification_type": {
      "type": "string",
      "x-go-name": "VerificationType"
    }
  },
  "x-go-name": "swaggerEnvironmentRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ErrorResponse
{
  "type": "object",
  "title": "Generic error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerErrorResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ForbiddenError
{
  "type": "object",
  "title": "Forbidden error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerForbiddenError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
GateReview
{
  "type": "object",
  "title": "GateReview deliberately exposes counts only, never names, values or outputs.",
  "properties": {
    "create": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Create"
    },
    "delete": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Delete"
    },
    "read": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Read"
    },
    "update": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Update"
    }
  },
  "x-go-package": "durpdeploy/internal/artifact"
}
GlobalNotification
{
  "type": "object",
  "title": "GlobalNotification holds the global notification settings.",
  "properties": {
    "discord_webhook_url": {
      "type": "string",
      "x-go-name": "DiscordWebhookURL"
    },
    "discord_webhook_url_configured": {
      "type": "boolean",
      "x-go-name": "DiscordWebhookURLConfigured"
    },
    "gotify_token": {
      "type": "string",
      "x-go-name": "GotifyToken"
    },
    "gotify_token_configured": {
      "type": "boolean",
      "x-go-name": "GotifyTokenConfigured"
    },
    "gotify_url": {
      "type": "string",
      "x-go-name": "GotifyURL"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "notify_emails": {
      "type": "string",
      "x-go-name": "NotifyEmails"
    },
    "slack_webhook_url": {
      "type": "string",
      "x-go-name": "SlackWebhookURL"
    },
    "slack_webhook_url_configured": {
      "type": "boolean",
      "x-go-name": "SlackWebhookURLConfigured"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UpdatedAt"
    }
  },
  "x-go-name": "swaggerGlobalNotification",
  "x-go-package": "durpdeploy/internal/handler/api"
}
GlobalNotificationRequest
{
  "type": "object",
  "title": "GlobalNotificationRequest is the body for global notification settings.",
  "properties": {
    "clear_discord_webhook_url": {
      "type": "boolean",
      "x-go-name": "ClearDiscordWebhookURL"
    },
    "clear_gotify_token": {
      "type": "boolean",
      "x-go-name": "ClearGotifyToken"
    },
    "clear_slack_webhook_url": {
      "type": "boolean",
      "x-go-name": "ClearSlackWebhookURL"
    },
    "discord_webhook_url": {
      "type": "string",
      "x-go-name": "DiscordWebhookURL"
    },
    "gotify_token": {
      "type": "string",
      "x-go-name": "GotifyToken"
    },
    "gotify_url": {
      "type": "string",
      "x-go-name": "GotifyURL"
    },
    "notify_emails": {
      "type": "string",
      "x-go-name": "NotifyEmails"
    },
    "slack_webhook_url": {
      "type": "string",
      "x-go-name": "SlackWebhookURL"
    }
  },
  "x-go-name": "swaggerGlobalNotificationRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
InheritedVariable
{
  "type": "object",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "lifecycle_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LifecycleID"
    },
    "lifecycle_name": {
      "type": "string",
      "x-go-name": "LifecycleName"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "override": {
      "$ref": "#/definitions/VariableResponse"
    },
    "secret": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Secret"
    },
    "value": {
      "description": "Empty when Secret is 1.",
      "type": "string",
      "x-go-name": "Value"
    }
  },
  "x-go-name": "swaggerInheritedVariable",
  "x-go-package": "durpdeploy/internal/handler/api"
}
InheritedVariableList
{
  "type": "array",
  "items": {
    "$ref": "#/definitions/InheritedVariable"
  },
  "x-go-name": "swaggerInheritedVariableList",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LibraryApplyResult
{
  "type": "object",
  "properties": {
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "slug": {
      "type": "string",
      "x-go-name": "Slug"
    },
    "steps_created": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "StepsCreated"
    },
    "variables_created": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "VariablesCreated"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
LibraryTemplate
{
  "description": "LibraryTemplate is bundled with the binary. Applying it creates independent\nproject records, rather than references to a mutable library definition.",
  "type": "object",
  "properties": {
    "configuration": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/LibraryVariableConfig"
      },
      "x-go-name": "Configuration"
    },
    "dependencies": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "Dependencies"
    },
    "kind": {
      "type": "string",
      "x-go-name": "Kind"
    },
    "permissions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "Permissions"
    },
    "slug": {
      "type": "string",
      "x-go-name": "Slug"
    },
    "snapshot": {
      "$ref": "#/definitions/ProjectTemplateSnapshot"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
LibraryTemplateListResponse
{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/LibraryTemplate"
      },
      "x-go-name": "Items"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "offset": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Offset"
    },
    "total": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Total"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
LibraryVariableConfig
{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "format": {
      "type": "string",
      "x-go-name": "Format"
    },
    "required": {
      "type": "boolean",
      "x-go-name": "Required"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
Lifecycle
{
  "type": "object",
  "title": "Lifecycle represents a deployment promotion pipeline.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    }
  },
  "x-go-name": "swaggerLifecycle",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleListResponse
{
  "type": "array",
  "title": "LifecycleListResponse is a list of lifecycles.",
  "items": {
    "$ref": "#/definitions/Lifecycle"
  },
  "x-go-name": "swaggerLifecycleListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleRequest
{
  "type": "object",
  "title": "LifecycleRequest is the body for create/update lifecycle.",
  "properties": {
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    }
  },
  "x-go-name": "swaggerLifecycleRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleResponse
{
  "type": "object",
  "title": "LifecycleResponse is the detailed lifecycle payload.",
  "properties": {
    "lifecycle": {
      "$ref": "#/definitions/Lifecycle"
    },
    "stages": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/LifecycleStage"
      },
      "x-go-name": "Stages"
    }
  },
  "x-go-name": "swaggerLifecycleResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleStage
{
  "type": "object",
  "title": "LifecycleStage is a single stage in a lifecycle.",
  "properties": {
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "lifecycle_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LifecycleID"
    },
    "requires_approval": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RequiresApproval"
    },
    "sort_order": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SortOrder"
    }
  },
  "x-go-name": "swaggerLifecycleStage",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleStageListResponse
{
  "type": "array",
  "title": "LifecycleStageListResponse is a list of lifecycle stages.",
  "items": {
    "$ref": "#/definitions/LifecycleStage"
  },
  "x-go-name": "swaggerLifecycleStageListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleStageRequest
{
  "type": "object",
  "title": "LifecycleStageRequest is the body for add/update lifecycle stage.",
  "properties": {
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "requires_approval": {
      "type": "boolean",
      "x-go-name": "RequiresApproval"
    },
    "sort_order": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SortOrder"
    }
  },
  "x-go-name": "swaggerLifecycleStageRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleVariable
{
  "type": "object",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "lifecycle_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LifecycleID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "secret": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Secret"
    },
    "value": {
      "description": "Empty when Secret is 1.",
      "type": "string",
      "x-go-name": "Value"
    }
  },
  "x-go-name": "swaggerLifecycleVariable",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LifecycleVariableList
{
  "type": "array",
  "items": {
    "$ref": "#/definitions/LifecycleVariable"
  },
  "x-go-name": "swaggerLifecycleVariableList",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ListAccessibleProjectTemplatesRow
{
  "type": "object",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "created_by": {
      "$ref": "#/definitions/NullInt64"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "source_project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SourceProjectID"
    },
    "source_project_name": {
      "type": "string",
      "x-go-name": "SourceProjectName"
    }
  },
  "x-go-package": "durpdeploy/internal/db"
}
LogEntry
{
  "type": "object",
  "title": "LogEntry is a single line of deployment log output.",
  "properties": {
    "line": {
      "type": "string",
      "x-go-name": "Line"
    },
    "step": {
      "type": "string",
      "x-go-name": "Step"
    },
    "ts": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TS"
    }
  },
  "x-go-name": "swaggerLogEntry",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LogLineListResponse
{
  "type": "array",
  "title": "LogLineListResponse is a list of streamed log lines.",
  "items": {
    "$ref": "#/definitions/LogEntry"
  },
  "x-go-name": "swaggerLogLineListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LogPage
{
  "type": "object",
  "title": "LogPage contains a bounded history window in increasing log-ID order.",
  "properties": {
    "before": {
      "description": "Requested exclusive upper ID. Zero selects the latest page.",
      "type": "integer",
      "format": "int64",
      "x-go-name": "Before"
    },
    "byte_limit": {
      "description": "Maximum JSON response size in bytes, including the envelope (1048576).",
      "type": "integer",
      "format": "int64",
      "x-go-name": "ByteLimit"
    },
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/LogPageEntry"
      },
      "x-go-name": "Items"
    },
    "last_id": {
      "description": "Highest returned ID. Use this as the live stream's after cursor.",
      "type": "integer",
      "format": "int64",
      "x-go-name": "LastID"
    },
    "limit": {
      "description": "Maximum number of returned rows (500).",
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "line_byte_limit": {
      "description": "Maximum UTF-8 bytes per displayed text field, including markers (16384).",
      "type": "integer",
      "format": "int64",
      "x-go-name": "LineByteLimit"
    },
    "next_before": {
      "description": "Exclusive cursor for the next older page. Zero means no older rows.",
      "type": "integer",
      "format": "int64",
      "x-go-name": "NextBefore"
    }
  },
  "x-go-name": "swaggerLogPage",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LogPageEntry
{
  "type": "object",
  "title": "LogPageEntry is a persisted log row, including nullable step metadata.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "line": {
      "type": "string",
      "x-go-name": "Line"
    },
    "step_index": {
      "$ref": "#/definitions/NullInt64"
    },
    "step_name": {
      "$ref": "#/definitions/NullString"
    },
    "step_state": {
      "$ref": "#/definitions/NullString"
    },
    "truncated": {
      "description": "True when display text was shortened. Full output remains in exports.",
      "type": "boolean",
      "x-go-name": "Truncated"
    }
  },
  "x-go-name": "swaggerLogPageEntry",
  "x-go-package": "durpdeploy/internal/handler/api"
}
LogStreamParams
{
  "type": "object",
  "title": "LogStreamParams controls the log stream format.",
  "properties": {
    "format": {
      "description": "Format is sse or ndjson; deployment streams also support structured SSE.",
      "type": "string",
      "x-go-name": "Format"
    }
  },
  "x-go-name": "swaggerLogStreamParams",
  "x-go-package": "durpdeploy/internal/handler/api"
}
NotFoundError
{
  "type": "object",
  "title": "Not found error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerNotFoundError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
NotificationEvent
{
  "type": "object",
  "title": "NotificationEvent is a fired notification record.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "event_type": {
      "type": "string",
      "x-go-name": "EventType"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "message": {
      "type": "string",
      "x-go-name": "Message"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "results": {
      "type": "string",
      "x-go-name": "Results"
    }
  },
  "x-go-name": "swaggerNotificationEvent",
  "x-go-package": "durpdeploy/internal/handler/api"
}
NotificationEventListResponse
{
  "type": "array",
  "title": "NotificationEventListResponse is a list of notification events.",
  "items": {
    "$ref": "#/definitions/NotificationEvent"
  },
  "x-go-name": "swaggerNotificationEventListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
NullInt64
{
  "description": "NullInt64 implements the [Scanner] interface so\nit can be used as a scan destination, similar to [NullString].",
  "type": "object",
  "title": "NullInt64 represents an int64 that may be null.",
  "properties": {
    "Int64": {
      "type": "integer",
      "format": "int64"
    },
    "Valid": {
      "type": "boolean"
    }
  },
  "x-go-package": "database/sql"
}
NullString
{
  "description": "var s NullString\nerr := db.QueryRow(\"SELECT name FROM foo WHERE id=?\", id).Scan(&s)\n...\nif s.Valid {\nuse s.String\n} else {\nNULL value\n}",
  "type": "object",
  "title": "NullString represents a string that may be null.\nNullString implements the [Scanner] interface so\nit can be used as a scan destination:",
  "properties": {
    "String": {
      "type": "string"
    },
    "Valid": {
      "type": "boolean"
    }
  },
  "x-go-package": "database/sql"
}
PackageRepositoryRequest
{
  "type": "object",
  "properties": {
    "auth_type": {
      "type": "string",
      "x-go-name": "AuthType"
    },
    "credential": {
      "type": "string",
      "x-go-name": "Credential"
    },
    "url_template": {
      "type": "string",
      "x-go-name": "URLTemplate"
    },
    "username": {
      "type": "string",
      "x-go-name": "Username"
    }
  },
  "x-go-name": "packageRepositoryRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
PackageRepositoryResponse
{
  "type": "object",
  "properties": {
    "auth_type": {
      "type": "string",
      "x-go-name": "AuthType"
    },
    "credential_configured": {
      "type": "boolean",
      "x-go-name": "CredentialConfigured"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "url_template": {
      "type": "string",
      "x-go-name": "URLTemplate"
    },
    "username": {
      "type": "string",
      "x-go-name": "Username"
    }
  },
  "x-go-name": "packageRepositoryResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
PackageTestRequest
{
  "type": "object",
  "properties": {
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "packageTestRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
PackageTestResponse
{
  "type": "object",
  "properties": {
    "exists": {
      "type": "boolean",
      "x-go-name": "Exists"
    },
    "sha256": {
      "type": "string",
      "x-go-name": "SHA256"
    },
    "size": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Size"
    },
    "url": {
      "type": "string",
      "x-go-name": "URL"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "packageTestResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
PaginatedResponse
{
  "type": "object",
  "title": "Paginated list envelope.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": {}
      },
      "x-go-name": "Items"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "offset": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Offset"
    },
    "total": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Total"
    }
  },
  "x-go-name": "swaggerPaginatedResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
PairAgentRequest
{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "x-go-name": "Address"
    },
    "code": {
      "type": "string",
      "x-go-name": "Code"
    },
    "fingerprint": {
      "type": "string",
      "x-go-name": "Fingerprint"
    }
  },
  "x-go-name": "swaggerPairAgentRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
PairAgentResponse
{
  "type": "object",
  "properties": {
    "agent_id": {
      "type": "string",
      "x-go-name": "AgentID"
    },
    "state": {
      "type": "string",
      "x-go-name": "State"
    }
  },
  "x-go-name": "swaggerPairAgentResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectGroup
{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    }
  },
  "x-go-name": "projectGroupResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectGroupAssignment
{
  "type": "object",
  "required": [
    "group_id"
  ],
  "properties": {
    "group_id": {
      "description": "Send null to move the project to Ungrouped. This field is required.",
      "type": "integer",
      "format": "int64",
      "x-go-name": "GroupID",
      "x-nullable": true
    }
  },
  "x-go-name": "projectGroupAssignment",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectGroupListResponse
{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "ID"
          },
          "name": {
            "type": "string",
            "x-go-name": "Name"
          },
          "project_count": {
            "type": "integer",
            "format": "int64",
            "x-go-name": "ProjectCount"
          }
        }
      },
      "x-go-name": "Items"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "offset": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Offset"
    },
    "total": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Total"
    }
  },
  "x-go-name": "projectGroupListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectGroupRequest
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "x-go-name": "Name"
    }
  },
  "x-go-name": "projectGroupRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectListResponse
{
  "type": "object",
  "title": "ProjectListResponse is a list of projects.",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/ProjectResponse"
      },
      "x-go-name": "Items"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "offset": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Offset"
    },
    "total": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Total"
    }
  },
  "x-go-name": "swaggerProjectListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectMember
{
  "type": "object",
  "title": "ProjectMember is a single user membership on a project.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "user_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UserID"
    }
  },
  "x-go-name": "swaggerProjectMember",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectMemberListResponse
{
  "type": "array",
  "title": "ProjectMemberListResponse is a list of project members.",
  "items": {
    "$ref": "#/definitions/ProjectMemberResponse"
  },
  "x-go-name": "swaggerProjectMemberListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectMemberRequest
{
  "type": "object",
  "title": "ProjectMemberRequest is the body for adding a project member.",
  "properties": {
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "user_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UserID"
    }
  },
  "x-go-name": "swaggerProjectMemberRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectMemberResponse
{
  "type": "object",
  "title": "ProjectMemberResponse is the JSON shape for project membership.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "email": {
      "type": "string",
      "x-go-name": "Email"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "user_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UserID"
    }
  },
  "x-go-name": "swaggerProjectMemberResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectMemberRoleRequest
{
  "type": "object",
  "title": "ProjectMemberRoleRequest updates a member's role.",
  "properties": {
    "role": {
      "type": "string",
      "x-go-name": "Role"
    }
  },
  "x-go-name": "swaggerProjectMemberRoleRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectNotificationRequest
{
  "type": "object",
  "title": "ProjectNotificationRequest updates a project's notification settings.",
  "properties": {
    "clear_discord_webhook_url": {
      "type": "boolean",
      "x-go-name": "ClearDiscordWebhookURL"
    },
    "clear_gotify_token": {
      "type": "boolean",
      "x-go-name": "ClearGotifyToken"
    },
    "clear_slack_webhook_url": {
      "type": "boolean",
      "x-go-name": "ClearSlackWebhookURL"
    },
    "discord_webhook_url": {
      "type": "string",
      "x-go-name": "DiscordWebhookURL"
    },
    "gotify_token": {
      "type": "string",
      "x-go-name": "GotifyToken"
    },
    "gotify_url": {
      "type": "string",
      "x-go-name": "GotifyURL"
    },
    "notify_emails": {
      "type": "string",
      "x-go-name": "NotifyEmails"
    },
    "slack_webhook_url": {
      "type": "string",
      "x-go-name": "SlackWebhookURL"
    }
  },
  "x-go-name": "swaggerProjectNotificationRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectNotificationResponse
{
  "type": "object",
  "title": "ProjectNotificationResponse is the notification settings for a project.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "discord_webhook_url": {
      "type": "string",
      "x-go-name": "DiscordWebhookURL"
    },
    "discord_webhook_url_configured": {
      "type": "boolean",
      "x-go-name": "DiscordWebhookURLConfigured"
    },
    "gotify_token": {
      "type": "string",
      "x-go-name": "GotifyToken"
    },
    "gotify_token_configured": {
      "type": "boolean",
      "x-go-name": "GotifyTokenConfigured"
    },
    "gotify_url": {
      "type": "string",
      "x-go-name": "GotifyURL"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "notify_emails": {
      "type": "string",
      "x-go-name": "NotifyEmails"
    },
    "slack_webhook_url": {
      "type": "string",
      "x-go-name": "SlackWebhookURL"
    },
    "slack_webhook_url_configured": {
      "type": "boolean",
      "x-go-name": "SlackWebhookURLConfigured"
    }
  },
  "x-go-name": "swaggerProjectNotificationResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectRequest
{
  "type": "object",
  "title": "ProjectRequest is the body for create/update project.",
  "properties": {
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "lifecycle_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LifecycleID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    }
  },
  "x-go-name": "swaggerProjectRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectResponse
{
  "type": "object",
  "title": "ProjectResponse is the JSON shape for a project.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "discord_webhook_url": {
      "type": "string",
      "x-go-name": "DiscordWebhookURL"
    },
    "discord_webhook_url_configured": {
      "type": "boolean",
      "x-go-name": "DiscordWebhookURLConfigured"
    },
    "gotify_token": {
      "type": "string",
      "x-go-name": "GotifyToken"
    },
    "gotify_token_configured": {
      "type": "boolean",
      "x-go-name": "GotifyTokenConfigured"
    },
    "gotify_url": {
      "type": "string",
      "x-go-name": "GotifyURL"
    },
    "group_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "GroupID",
      "x-nullable": true
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "lifecycle_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LifecycleID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "notify_emails": {
      "type": "string",
      "x-go-name": "NotifyEmails"
    },
    "slack_webhook_url": {
      "type": "string",
      "x-go-name": "SlackWebhookURL"
    },
    "slack_webhook_url_configured": {
      "type": "boolean",
      "x-go-name": "SlackWebhookURLConfigured"
    }
  },
  "x-go-name": "swaggerProjectResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectTemplateListResponse
{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/ListAccessibleProjectTemplatesRow"
      },
      "x-go-name": "Items"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "offset": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Offset"
    },
    "total": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Total"
    }
  },
  "x-go-name": "swaggerProjectTemplateListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectTemplatePackage
{
  "type": "object",
  "properties": {
    "auth_type": {
      "type": "string",
      "x-go-name": "AuthType"
    },
    "credential": {
      "type": "string",
      "x-go-name": "Credential"
    },
    "url_template": {
      "type": "string",
      "x-go-name": "URLTemplate"
    },
    "username": {
      "type": "string",
      "x-go-name": "Username"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
ProjectTemplateResponse
{
  "type": "object",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "snapshot": {
      "$ref": "#/definitions/ProjectTemplateSnapshot"
    },
    "source_project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SourceProjectID"
    }
  },
  "x-go-name": "projectTemplateResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ProjectTemplateSnapshot
{
  "type": "object",
  "title": "ProjectTemplateSnapshot excludes credentials and execution history by construction.",
  "properties": {
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "lifecycle_name": {
      "type": "string",
      "x-go-name": "LifecycleName"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "package_repository": {
      "$ref": "#/definitions/Repository"
    },
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/ProjectTemplateStep"
      },
      "x-go-name": "Steps"
    },
    "variables": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/ProjectTemplateVariable"
      },
      "x-go-name": "Variables"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
ProjectTemplateStep
{
  "type": "object",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentExecutionMode"
    },
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "approval_artifact_path": {
      "type": "string",
      "x-go-name": "ApprovalArtifactPath"
    },
    "approval_review_format": {
      "type": "string",
      "x-go-name": "ApprovalReviewFormat"
    },
    "approval_review_path": {
      "type": "string",
      "x-go-name": "ApprovalReviewPath"
    },
    "container_image": {
      "type": "string",
      "x-go-name": "ContainerImage"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "ExecutionTarget"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "max_retries": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "MaxRetries"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "network_mode": {
      "type": "string",
      "x-go-name": "NetworkMode"
    },
    "script_body": {
      "type": "string",
      "x-go-name": "ScriptBody"
    },
    "sort_order": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SortOrder"
    },
    "timeout_seconds": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TimeoutSeconds"
    },
    "variable_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
ProjectTemplateVariable
{
  "type": "object",
  "properties": {
    "default": {
      "type": "string",
      "x-go-name": "Default"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "environment_name": {
      "type": "string",
      "x-go-name": "EnvironmentName"
    },
    "key": {
      "type": "string",
      "x-go-name": "Key"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "secret": {
      "type": "boolean",
      "x-go-name": "Secret"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
Release
{
  "type": "object",
  "title": "Release is a refreshable snapshot of project steps and variables.",
  "properties": {
    "artifact_ref": {
      "description": "Public HTTPS URL or artifact identifier, including OCI SHA-256 references.",
      "type": "string",
      "x-go-name": "ArtifactRef"
    },
    "ci_run_url": {
      "type": "string",
      "x-go-name": "CIRunURL"
    },
    "commit_sha": {
      "description": "Full hexadecimal SHA-1 or SHA-256 commit identifier.",
      "type": "string",
      "x-go-name": "CommitSHA"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "repository_url": {
      "type": "string",
      "x-go-name": "RepositoryURL"
    },
    "snapshot_locked": {
      "description": "Deprecated: retained for compatibility; does not prevent refresh.",
      "type": "integer",
      "format": "int64",
      "x-deprecated": true,
      "x-go-name": "SnapshotLocked"
    },
    "steps_json": {
      "type": "string",
      "x-go-name": "StepsJSON"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "swaggerRelease",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReleaseArtifactResponse
{
  "type": "object",
  "properties": {
    "pending": {
      "type": "boolean",
      "x-go-name": "Pending"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    },
    "repository_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RepositoryID"
    },
    "sha256": {
      "type": "string",
      "x-go-name": "SHA256"
    },
    "size": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Size"
    },
    "source_release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SourceReleaseID"
    },
    "url": {
      "type": "string",
      "x-go-name": "URL"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "releaseArtifactResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReleaseListResponse
{
  "type": "array",
  "title": "ReleaseListResponse is a list of releases.",
  "items": {
    "$ref": "#/definitions/Release"
  },
  "x-go-name": "swaggerReleaseListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReleaseRequest
{
  "type": "object",
  "title": "ReleaseRequest is the body for create release.",
  "properties": {
    "artifact_ref": {
      "description": "Public HTTPS URL or artifact identifier, including OCI SHA-256 references.",
      "type": "string",
      "x-go-name": "ArtifactRef"
    },
    "ci_run_url": {
      "type": "string",
      "x-go-name": "CIRunURL"
    },
    "commit_sha": {
      "description": "Full hexadecimal SHA-1 or SHA-256 commit identifier.",
      "type": "string",
      "x-go-name": "CommitSHA"
    },
    "repository_url": {
      "type": "string",
      "x-go-name": "RepositoryURL"
    },
    "version": {
      "description": "Attached packages are downloaded and pinned on the first deployment pull.",
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "swaggerReleaseRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReleaseSource
{
  "description": "URL fields require HTTPS without userinfo, query parameters, or fragments.\nFields accept at most 2048 bytes without whitespace or control characters.\nCredentials and recognized secret formats are rejected.",
  "type": "object",
  "title": "ReleaseSource contains optional, immutable public source identifiers.",
  "properties": {
    "artifact_ref": {
      "description": "Public HTTPS URL or artifact identifier, including OCI SHA-256 references.",
      "type": "string",
      "x-go-name": "ArtifactRef"
    },
    "ci_run_url": {
      "type": "string",
      "x-go-name": "CIRunURL"
    },
    "commit_sha": {
      "description": "Full hexadecimal SHA-1 or SHA-256 commit identifier.",
      "type": "string",
      "x-go-name": "CommitSHA"
    },
    "repository_url": {
      "type": "string",
      "x-go-name": "RepositoryURL"
    }
  },
  "x-go-name": "swaggerReleaseSource",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReleaseVariableResponse
{
  "description": "Value is always a string. It is an empty string whenever Secret\nis 1 or the variable has no stored value; ordinary reads never\nreturn secret plaintext (issue #29).",
  "type": "object",
  "title": "ReleaseVariableResponse is a variable snapshot in a release.",
  "properties": {
    "environment_id": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    },
    "secret": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Secret"
    },
    "value": {
      "type": "string",
      "x-go-name": "Value"
    }
  },
  "x-go-name": "swaggerReleaseVariableResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReleaseWithVariablesResponse
{
  "type": "object",
  "title": "ReleaseWithVariablesResponse is the detailed release payload.",
  "properties": {
    "artifact_ref": {
      "description": "Public HTTPS URL or artifact identifier, including OCI SHA-256 references.",
      "type": "string",
      "x-go-name": "ArtifactRef"
    },
    "ci_run_url": {
      "type": "string",
      "x-go-name": "CIRunURL"
    },
    "commit_sha": {
      "description": "Full hexadecimal SHA-1 or SHA-256 commit identifier.",
      "type": "string",
      "x-go-name": "CommitSHA"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "repository_url": {
      "type": "string",
      "x-go-name": "RepositoryURL"
    },
    "steps_json": {
      "type": "string",
      "x-go-name": "StepsJSON"
    },
    "variables": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/ReleaseVariableResponse"
      },
      "x-go-name": "Variables"
    },
    "version": {
      "type": "string",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "swaggerReleaseWithVariablesResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReorderStagesRequest
{
  "type": "object",
  "title": "ReorderStagesRequest reorders lifecycle stages.",
  "properties": {
    "stage_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "StageIDs"
    }
  },
  "x-go-name": "swaggerReorderStagesRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ReorderStepsRequest
{
  "type": "object",
  "title": "ReorderStepsRequest reorders project steps.",
  "properties": {
    "step_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "StepIDs"
    }
  },
  "x-go-name": "swaggerReorderStepsRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
Repository
{
  "type": "object",
  "properties": {
    "auth_type": {
      "type": "string",
      "x-go-name": "AuthType"
    },
    "url_template": {
      "type": "string",
      "x-go-name": "URLTemplate"
    },
    "username": {
      "type": "string",
      "x-go-name": "Username"
    }
  },
  "x-go-package": "durpdeploy/internal/artifact"
}
RequestEntityTooLargeError
{
  "type": "object",
  "title": "Request body exceeds the 4 MiB encoded byte ceiling.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerRequestEntityTooLargeError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RollbackPreview
{
  "type": "object",
  "properties": {
    "blocked": {
      "type": "boolean",
      "x-go-name": "Blocked"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "environment_name": {
      "type": "string",
      "x-go-name": "EnvironmentName"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "reason": {
      "type": "string",
      "x-go-name": "Reason"
    },
    "requires_approval": {
      "type": "boolean",
      "x-go-name": "RequiresApproval"
    },
    "source_deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SourceDeploymentID"
    },
    "source_release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SourceReleaseID"
    },
    "source_version": {
      "type": "string",
      "x-go-name": "SourceVersion"
    },
    "target_deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TargetDeploymentID"
    },
    "target_release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TargetReleaseID"
    },
    "target_version": {
      "type": "string",
      "x-go-name": "TargetVersion"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
rollbackRequest
{
  "type": "object",
  "properties": {
    "target_deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TargetDeploymentID"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
Runbook
{
  "type": "object",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "deleted_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    }
  },
  "x-go-name": "swaggerRunbook",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookDetailResponse
{
  "type": "object",
  "properties": {
    "runbook": {
      "$ref": "#/definitions/Runbook"
    },
    "versions": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RunbookVersion"
      },
      "x-go-name": "Versions"
    }
  },
  "x-go-name": "swaggerRunbookDetailResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookExecuteRequest
{
  "type": "object",
  "properties": {
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "version_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "VersionID"
    }
  },
  "x-go-name": "swaggerRunbookExecuteRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookExecution
{
  "type": "object",
  "properties": {
    "actor_user_id": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "runbook_version_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RunbookVersionID"
    },
    "schedule_id": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    }
  },
  "x-go-name": "swaggerRunbookExecution",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookExecutionDetail
{
  "type": "object",
  "properties": {
    "active_deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ActiveDeploymentID"
    },
    "active_work_url": {
      "type": "string",
      "x-go-name": "ActiveWorkURL"
    },
    "actor_user_id": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "environment_name": {
      "type": "string",
      "x-go-name": "EnvironmentName"
    },
    "finished_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "queue_position": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "QueuePosition"
    },
    "runbook_deleted_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "runbook_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RunbookID"
    },
    "runbook_name": {
      "type": "string",
      "x-go-name": "RunbookName"
    },
    "runbook_version_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RunbookVersionID"
    },
    "schedule_id": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "started_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    },
    "version": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "swaggerRunbookExecutionDetail",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookExecutionListResponse
{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RunbookExecutionDetail"
      },
      "x-go-name": "Items"
    },
    "limit": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Limit"
    },
    "offset": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Offset"
    },
    "total": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Total"
    }
  },
  "x-go-name": "swaggerRunbookExecutionListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookListResponse
{
  "type": "array",
  "items": {
    "$ref": "#/definitions/Runbook"
  },
  "x-go-name": "swaggerRunbookListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookSaveRequest
{
  "type": "object",
  "properties": {
    "artifact_release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ArtifactReleaseID"
    },
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "keep_artifact_pin": {
      "type": "boolean",
      "x-go-name": "KeepArtifactPin"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RunbookStep"
      },
      "x-go-name": "Steps"
    }
  },
  "x-go-name": "swaggerRunbookSaveRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookSaveResponse
{
  "type": "object",
  "properties": {
    "runbook": {
      "$ref": "#/definitions/Runbook"
    },
    "version": {
      "$ref": "#/definitions/RunbookVersion"
    }
  },
  "x-go-name": "swaggerRunbookSaveResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookSchedule
{
  "type": "object",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "cron": {
      "type": "string",
      "x-go-name": "Cron"
    },
    "enabled": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Enabled"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "last_error": {
      "type": "string",
      "x-go-name": "LastError"
    },
    "last_fired_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "next_run_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "NextRunAt"
    },
    "runbook_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RunbookID"
    },
    "version_id": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    }
  },
  "x-go-name": "swaggerRunbookSchedule",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookScheduleListResponse
{
  "type": "array",
  "items": {
    "$ref": "#/definitions/RunbookSchedule"
  },
  "x-go-name": "swaggerRunbookScheduleListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookScheduleRequest
{
  "type": "object",
  "properties": {
    "cron": {
      "type": "string",
      "x-go-name": "Cron"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "version_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "VersionID"
    }
  },
  "x-go-name": "swaggerRunbookScheduleRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookScheduleStateResponse
{
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean",
      "x-go-name": "Enabled"
    }
  },
  "x-go-name": "swaggerRunbookScheduleStateResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookStateResponse
{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "x-go-name": "Status"
    }
  },
  "x-go-name": "swaggerRunbookStateResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookStep
{
  "type": "object",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentExecutionMode"
    },
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "approval_artifact_path": {
      "type": "string",
      "x-go-name": "ApprovalArtifactPath"
    },
    "approval_review_format": {
      "type": "string",
      "x-go-name": "ApprovalReviewFormat"
    },
    "approval_review_path": {
      "type": "string",
      "x-go-name": "ApprovalReviewPath"
    },
    "container_image": {
      "type": "string",
      "x-go-name": "ContainerImage"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "ExecutionTarget"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "max_retries": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "MaxRetries"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "network_mode": {
      "type": "string",
      "x-go-name": "NetworkMode"
    },
    "script_body": {
      "type": "string",
      "x-go-name": "ScriptBody"
    },
    "sort_order": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SortOrder"
    },
    "timeout_seconds": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TimeoutSeconds"
    },
    "variable_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    }
  },
  "x-go-name": "swaggerRunbookStep",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookVersion
{
  "type": "object",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    },
    "runbook_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RunbookID"
    },
    "version": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Version"
    }
  },
  "x-go-name": "swaggerRunbookVersion",
  "x-go-package": "durpdeploy/internal/handler/api"
}
RunbookVersionResponse
{
  "type": "object",
  "properties": {
    "artifact": {
      "$ref": "#/definitions/ReleaseArtifactResponse"
    },
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/RunbookStep"
      },
      "x-go-name": "Steps"
    },
    "version": {
      "$ref": "#/definitions/RunbookVersion"
    }
  },
  "x-go-name": "swaggerRunbookVersionResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
saveProjectTemplateRequest
{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
ScheduledDeployment
{
  "type": "object",
  "title": "ScheduledDeployment is a cron-driven deployment configuration.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "cron": {
      "type": "string",
      "x-go-name": "Cron"
    },
    "enabled": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Enabled"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "last_error": {
      "type": "string",
      "x-go-name": "LastError"
    },
    "last_fired_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LastFiredAt"
    },
    "next_run_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "NextRunAt"
    },
    "note": {
      "type": "string",
      "x-go-name": "Note"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UpdatedAt"
    }
  },
  "x-go-name": "swaggerScheduledDeployment",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ScheduledDeploymentListResponse
{
  "type": "array",
  "title": "ScheduledDeploymentListResponse is a list of scheduled deployments.",
  "items": {
    "$ref": "#/definitions/ScheduledDeployment"
  },
  "x-go-name": "swaggerScheduledDeploymentListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ScheduleRequest
{
  "type": "object",
  "title": "ScheduleRequest is the body for create/update scheduled deployment.",
  "properties": {
    "active": {
      "description": "Active is an alias for enabled; either is accepted.",
      "type": "boolean",
      "x-go-name": "Active"
    },
    "cron": {
      "type": "string",
      "x-go-name": "Cron"
    },
    "cron_expr": {
      "description": "Deprecated: alias for cron. Prefer cron in new callers.",
      "type": "string",
      "x-deprecated": true,
      "x-go-name": "CronExpr"
    },
    "enabled": {
      "type": "boolean",
      "x-go-name": "Enabled"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "note": {
      "type": "string",
      "x-go-name": "Note"
    },
    "release_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ReleaseID"
    }
  },
  "x-go-name": "swaggerScheduleRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ServerError
{
  "type": "object",
  "title": "Server error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerServerError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ServerStatsResponse
{
  "type": "object",
  "title": "ServerStatsResponse contains aggregate counts.",
  "properties": {
    "deployments": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Deployments"
    },
    "projects": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Projects"
    },
    "users": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Users"
    }
  },
  "x-go-name": "swaggerServerStatsResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
SpecResponse
{
  "type": "object",
  "title": "SpecResponse is the raw OpenAPI JSON spec.",
  "x-go-name": "swaggerSpecResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StatusResponse
{
  "type": "object",
  "title": "Status message response.",
  "properties": {
    "status": {
      "type": "string",
      "x-go-name": "Status"
    }
  },
  "x-go-name": "swaggerStatusResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
Step
{
  "type": "object",
  "title": "Step is an executable script step within a project.",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentExecutionMode"
    },
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "approval_artifact_path": {
      "type": "string",
      "x-go-name": "ApprovalArtifactPath"
    },
    "approval_review_format": {
      "type": "string",
      "x-go-name": "ApprovalReviewFormat"
    },
    "approval_review_path": {
      "type": "string",
      "x-go-name": "ApprovalReviewPath"
    },
    "container_image": {
      "description": "Container image required for local steps and agent container mode.",
      "type": "string",
      "x-go-name": "ContainerImage"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "ExecutionTarget"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "max_retries": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "MaxRetries"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "network_mode": {
      "type": "string",
      "x-go-name": "NetworkMode"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "script_body": {
      "type": "string",
      "x-go-name": "ScriptBody"
    },
    "sort_order": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SortOrder"
    },
    "timeout_seconds": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TimeoutSeconds"
    },
    "variable_names": {
      "description": "Optional variable-name restriction. Empty passes all variables.",
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    }
  },
  "x-go-name": "swaggerStep",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StepListResponse
{
  "type": "array",
  "title": "StepListResponse is a list of project steps.",
  "items": {
    "$ref": "#/definitions/Step"
  },
  "x-go-name": "swaggerStepListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StepRequest
{
  "type": "object",
  "title": "StepRequest is the body for create/update step.",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentExecutionMode"
    },
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "approval_artifact_path": {
      "type": "string",
      "x-go-name": "ApprovalArtifactPath"
    },
    "approval_review_format": {
      "type": "string",
      "x-go-name": "ApprovalReviewFormat"
    },
    "approval_review_path": {
      "type": "string",
      "x-go-name": "ApprovalReviewPath"
    },
    "container_image": {
      "description": "Required for local steps and agent container mode; rejected for agent host mode.",
      "type": "string",
      "x-go-name": "ContainerImage"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "ExecutionTarget"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "max_retries": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "MaxRetries"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "network_mode": {
      "type": "string",
      "x-go-name": "NetworkMode"
    },
    "script_body": {
      "type": "string",
      "x-go-name": "ScriptBody"
    },
    "sort_order": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "SortOrder"
    },
    "timeout_seconds": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TimeoutSeconds"
    },
    "variable_names": {
      "description": "Optional variable-name restriction. Empty passes all variables;\nentries must be identifiers without duplicates.",
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    }
  },
  "x-go-name": "swaggerStepRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StepTemplate
{
  "type": "object",
  "title": "StepTemplate is a reusable step template.",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentExecutionMode"
    },
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "approval_artifact_path": {
      "type": "string",
      "x-go-name": "ApprovalArtifactPath"
    },
    "approval_review_format": {
      "type": "string",
      "x-go-name": "ApprovalReviewFormat"
    },
    "approval_review_path": {
      "type": "string",
      "x-go-name": "ApprovalReviewPath"
    },
    "container_image": {
      "type": "string",
      "x-go-name": "ContainerImage"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "ExecutionTarget"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "network_mode": {
      "type": "string",
      "x-go-name": "NetworkMode"
    },
    "script_body": {
      "type": "string",
      "x-go-name": "ScriptBody"
    },
    "variable_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    }
  },
  "x-go-name": "swaggerStepTemplate",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StepTemplateListResponse
{
  "type": "array",
  "title": "StepTemplateListResponse is a list of step templates.",
  "items": {
    "$ref": "#/definitions/StepTemplate"
  },
  "x-go-name": "swaggerStepTemplateListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StepTemplateRequest
{
  "type": "object",
  "title": "StepTemplateRequest is the body for create/update step template.",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentExecutionMode"
    },
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "approval_artifact_path": {
      "type": "string",
      "x-go-name": "ApprovalArtifactPath"
    },
    "approval_review_format": {
      "type": "string",
      "x-go-name": "ApprovalReviewFormat"
    },
    "approval_review_path": {
      "type": "string",
      "x-go-name": "ApprovalReviewPath"
    },
    "container_image": {
      "description": "Required for local steps and agent container mode; rejected for agent host mode.",
      "type": "string",
      "x-go-name": "ContainerImage"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "ExecutionTarget"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "network_mode": {
      "type": "string",
      "x-go-name": "NetworkMode"
    },
    "script_body": {
      "type": "string",
      "x-go-name": "ScriptBody"
    },
    "variable_names": {
      "description": "Optional variable-name restriction. Empty passes all variables;\nentries must be identifiers without duplicates.",
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    }
  },
  "x-go-name": "swaggerStepTemplateRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StepTemplateVersion
{
  "type": "object",
  "title": "StepTemplateVersion is a historical version of a step template.",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentExecutionMode"
    },
    "agent_selectors": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "AgentSelectors"
    },
    "approval_artifact_path": {
      "type": "string",
      "x-go-name": "ApprovalArtifactPath"
    },
    "approval_review_format": {
      "type": "string",
      "x-go-name": "ApprovalReviewFormat"
    },
    "approval_review_path": {
      "type": "string",
      "x-go-name": "ApprovalReviewPath"
    },
    "container_image": {
      "type": "string",
      "x-go-name": "ContainerImage"
    },
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "ExecutionTarget"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "network_mode": {
      "type": "string",
      "x-go-name": "NetworkMode"
    },
    "script_body": {
      "type": "string",
      "x-go-name": "ScriptBody"
    },
    "template_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "TemplateID"
    },
    "variable_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    },
    "version_number": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "VersionNumber"
    }
  },
  "x-go-name": "swaggerStepTemplateVersion",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StepTemplateVersionListResponse
{
  "type": "array",
  "title": "StepTemplateVersionListResponse is a list of step template versions.",
  "items": {
    "$ref": "#/definitions/StepTemplateVersion"
  },
  "x-go-name": "swaggerStepTemplateVersionListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
StreamResponse
{
  "type": "object",
  "title": "StreamResponse is a server-sent event stream.",
  "properties": {
    "data": {
      "type": "string",
      "x-go-name": "Data"
    }
  },
  "x-go-name": "swaggerStreamResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
swaggerAgentError
{
  "type": "object",
  "properties": {
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "finished_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    },
    "reason": {
      "type": "string",
      "x-go-name": "Reason"
    },
    "state": {
      "type": "string",
      "x-go-name": "State"
    },
    "step_index": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "StepIndex"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
swaggerAgentSuccess
{
  "type": "object",
  "properties": {
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "finished_at": {
      "$ref": "#/definitions/swaggerSQLNullInteger"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
swaggerAgentWork
{
  "type": "object",
  "properties": {
    "deployment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "DeploymentID"
    },
    "state": {
      "type": "string",
      "x-go-name": "State"
    },
    "step_index": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "StepIndex"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
swaggerSQLNullInteger
{
  "type": "object",
  "properties": {
    "Int64": {
      "type": "integer",
      "format": "int64"
    },
    "Valid": {
      "type": "boolean"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
swaggerSQLNullString
{
  "type": "object",
  "properties": {
    "String": {
      "type": "string"
    },
    "Valid": {
      "type": "boolean"
    }
  },
  "x-go-package": "durpdeploy/internal/handler/api"
}
SwaggerUIResponse
{
  "type": "object",
  "title": "SwaggerUIResponse is the swagger-ui HTML page.",
  "x-go-name": "swaggerUIResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
TerraformResourceChange
{
  "type": "object",
  "properties": {
    "actions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "Actions"
    },
    "address": {
      "type": "string",
      "x-go-name": "Address"
    },
    "after": {
      "type": "string",
      "x-go-name": "After"
    },
    "before": {
      "type": "string",
      "x-go-name": "Before"
    },
    "omitted_fields": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "OmittedFields"
    }
  },
  "x-go-package": "durpdeploy/internal/artifact"
}
TerraformReviewResponse
{
  "type": "object",
  "properties": {
    "preview_truncated": {
      "type": "boolean",
      "x-go-name": "PreviewTruncated"
    },
    "resources": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/TerraformResourceChange"
      },
      "x-go-name": "Resources"
    },
    "resources_omitted": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ResourcesOmitted"
    },
    "review_source": {
      "type": "string",
      "x-go-name": "ReviewSource"
    },
    "review_verified": {
      "type": "boolean",
      "x-go-name": "ReviewVerified"
    }
  },
  "x-go-package": "durpdeploy/internal/artifact"
}
TextResponse
{
  "type": "object",
  "title": "TextResponse is a plain text response.",
  "properties": {
    "Body": {
      "type": "string"
    }
  },
  "x-go-name": "swaggerTextResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
TokenListResponse
{
  "type": "array",
  "title": "TokenListResponse is a list of API tokens.",
  "items": {
    "$ref": "#/definitions/TokenResponse"
  },
  "x-go-name": "swaggerTokenListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
TokenResponse
{
  "type": "object",
  "title": "TokenResponse is the token representation returned by list endpoints.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "email": {
      "type": "string",
      "x-go-name": "Email"
    },
    "expires_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ExpiresAt"
    },
    "id": {
      "type": "string",
      "x-go-name": "ID"
    },
    "last_used_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LastUsedAt"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "prefix": {
      "type": "string",
      "x-go-name": "Prefix"
    },
    "project_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "ProjectIDs"
    },
    "revoked_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "RevokedAt"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "scope": {
      "type": "string",
      "x-go-name": "Scope"
    },
    "user_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UserID"
    },
    "user_name": {
      "type": "string",
      "x-go-name": "UserName"
    }
  },
  "x-go-name": "swaggerTokenResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
TokenScopeResponse
{
  "type": "object",
  "title": "TokenScopeResponse identifies a token's permission ceiling.",
  "properties": {
    "project_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "int64"
      },
      "x-go-name": "ProjectIDs"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "scope": {
      "type": "string",
      "x-go-name": "Scope"
    }
  },
  "x-go-name": "swaggerTokenScopeResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
UnauthorizedError
{
  "type": "object",
  "title": "Unauthorized error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerUnauthorizedError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
User
{
  "type": "object",
  "title": "User is a user account.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "email": {
      "type": "string",
      "x-go-name": "Email"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "last_login_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LastLoginAt"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UpdatedAt"
    }
  },
  "x-go-name": "swaggerUser",
  "x-go-package": "durpdeploy/internal/handler/api"
}
UserListResponse
{
  "type": "array",
  "title": "UserListResponse is a list of users.",
  "items": {
    "$ref": "#/definitions/UserResponse"
  },
  "x-go-name": "swaggerUserListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
UserRequest
{
  "type": "object",
  "title": "UserRequest is the body for create/update user.",
  "properties": {
    "email": {
      "type": "string",
      "x-go-name": "Email"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "password": {
      "type": "string",
      "x-go-name": "Password"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    }
  },
  "x-go-name": "swaggerUserRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
UserResponse
{
  "type": "object",
  "title": "UserResponse is the JSON shape for a user.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "email": {
      "type": "string",
      "x-go-name": "Email"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "last_login_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "LastLoginAt"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "one_time_password": {
      "type": "string",
      "x-go-name": "OneTimePassword"
    },
    "role": {
      "type": "string",
      "x-go-name": "Role"
    },
    "updated_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "UpdatedAt"
    }
  },
  "x-go-name": "swaggerUserResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
ValidationError
{
  "type": "object",
  "title": "Validation error response.",
  "properties": {
    "error": {
      "type": "string",
      "x-go-name": "Error"
    }
  },
  "x-go-name": "swaggerValidationError",
  "x-go-package": "durpdeploy/internal/handler/api"
}
Variable
{
  "type": "object",
  "title": "Variable is a project or environment-scoped variable.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "secret": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Secret"
    },
    "value": {
      "type": "string",
      "x-go-name": "Value"
    }
  },
  "x-go-name": "swaggerVariable",
  "x-go-package": "durpdeploy/internal/handler/api"
}
VariableContext
{
  "type": "object",
  "title": "VariableContext contains only draft metadata, never script text or values.",
  "properties": {
    "agent_execution_mode": {
      "type": "string",
      "x-go-name": "AgentMode"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "execution_target": {
      "type": "string",
      "x-go-name": "Target"
    },
    "interpreter": {
      "type": "string",
      "x-go-name": "Interpreter"
    },
    "variable_names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "x-go-name": "VariableNames"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
VariableDefinition
{
  "type": "object",
  "title": "VariableDefinition is display data. Secret values are never decrypted.",
  "properties": {
    "description": {
      "type": "string",
      "x-go-name": "Description"
    },
    "effective": {
      "type": "boolean",
      "x-go-name": "Effective"
    },
    "environment_id": {
      "description": "Null for unscoped defaults and runtime variables.",
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID",
      "x-nullable": true
    },
    "key": {
      "type": "string",
      "x-go-name": "Key"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "overridden_by": {
      "type": "string",
      "x-go-name": "OverriddenBy"
    },
    "reason": {
      "type": "string",
      "x-go-name": "Reason"
    },
    "reference": {
      "type": "string",
      "x-go-name": "Reference"
    },
    "scope": {
      "type": "string",
      "x-go-name": "Scope"
    },
    "secret": {
      "type": "boolean",
      "x-go-name": "Secret"
    },
    "source": {
      "type": "string",
      "x-go-name": "Source"
    },
    "source_name": {
      "type": "string",
      "x-go-name": "SourceName"
    },
    "status": {
      "type": "string",
      "x-go-name": "Status"
    },
    "value": {
      "description": "Null for secrets and runtime values assigned at execution.",
      "type": "string",
      "x-go-name": "Value",
      "x-nullable": true
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
VariableEnvironment
{
  "type": "object",
  "title": "VariableEnvironment deliberately contains no environment configuration.",
  "properties": {
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    }
  },
  "x-go-package": "durpdeploy/internal/repository"
}
VariableListResponse
{
  "type": "array",
  "title": "VariableListResponse is a list of variables.",
  "items": {
    "$ref": "#/definitions/VariableResponse"
  },
  "x-go-name": "swaggerVariableListResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}
VariableRequest
{
  "description": "On update, an empty value with secret=true keeps the stored secret\n(the API never returns secret plaintext, so clients send the masked\nread-back unchanged); set secret=false to clear it.",
  "type": "object",
  "title": "VariableRequest is the body for create/update variable.",
  "properties": {
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "secret": {
      "type": "boolean",
      "x-go-name": "Secret"
    },
    "value": {
      "type": "string",
      "x-go-name": "Value"
    }
  },
  "x-go-name": "swaggerVariableRequest",
  "x-go-package": "durpdeploy/internal/handler/api"
}
VariableResponse
{
  "description": "Value is always an empty string when Secret is 1: ordinary reads\nnever return secret plaintext (issue #29).",
  "type": "object",
  "title": "VariableResponse is the JSON shape for a variable.",
  "properties": {
    "created_at": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "CreatedAt"
    },
    "environment_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "EnvironmentID"
    },
    "id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ID"
    },
    "name": {
      "type": "string",
      "x-go-name": "Name"
    },
    "project_id": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "ProjectID"
    },
    "secret": {
      "type": "integer",
      "format": "int64",
      "x-go-name": "Secret"
    },
    "value": {
      "type": "string",
      "x-go-name": "Value"
    }
  },
  "x-go-name": "swaggerVariableResponse",
  "x-go-package": "durpdeploy/internal/handler/api"
}