diff --git a/.mintlify/workflows/update-api-reference.md b/.mintlify/workflows/update-api-reference.md
new file mode 100644
index 0000000..1bacd39
--- /dev/null
+++ b/.mintlify/workflows/update-api-reference.md
@@ -0,0 +1,34 @@
+---
+name: "Update API reference"
+on:
+ cron: "0 9 * * 1"
+context:
+ - repo: "kosli-dev/server"
+notify:
+ slack:
+ channels:
+ - docs
+---
+
+# Agent Instructions
+
+Check kosli-dev/server for **new tags/releases** published since the last time `api-reference/openapi.json` was updated (check the most recent commit touching that file for context). Only document changes that are part of a tagged release — do not include unreleased work on `main`.
+
+If no new tags exist since the last update, do not open a PR.
+
+For each new release, review the diff for changes to API endpoints, parameters, response shapes, or error codes. If API changes were introduced, update `api-reference/openapi.json` in this repository to reflect those changes. This is the OpenAPI 3.1.0 specification that powers the API Reference section of the docs site.
+
+Specifically:
+- Add new endpoints, parameters, or response fields as defined in the server code.
+- Update descriptions, type information, and examples where affected.
+- If a parameter or endpoint was removed, mark it as **deprecated** rather than deleting it, unless the code explicitly removes it with no deprecation period.
+- Preserve the existing `servers` field in the spec — do not modify the server URLs.
+- Preserve the existing `security` and `securitySchemes` configuration.
+
+If new endpoint tags (groups) are introduced, add corresponding entries to the API Reference navigation in `config/navigation.json`, maintaining alphabetical group order.
+
+## Important
+
+- If no API changes were introduced, do nothing.
+- Do not include private repository file paths, directory structures, code snippets, or any other internal implementation details in PR titles, descriptions, or commit messages. The PR body should only describe the user-facing change in terms of the API behavior.
+- Do not modify any files other than `api-reference/openapi.json` and `config/navigation.json`.
diff --git a/api-reference/endpoint/create.mdx b/api-reference/endpoint/create.mdx
deleted file mode 100644
index 5689f1b..0000000
--- a/api-reference/endpoint/create.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Create Plant'
-openapi: 'POST /plants'
----
diff --git a/api-reference/endpoint/delete.mdx b/api-reference/endpoint/delete.mdx
deleted file mode 100644
index 657dfc8..0000000
--- a/api-reference/endpoint/delete.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Delete Plant'
-openapi: 'DELETE /plants/{id}'
----
diff --git a/api-reference/endpoint/get.mdx b/api-reference/endpoint/get.mdx
deleted file mode 100644
index 56aa09e..0000000
--- a/api-reference/endpoint/get.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Get Plants'
-openapi: 'GET /plants'
----
diff --git a/api-reference/endpoint/list_environments.mdx b/api-reference/endpoint/list_environments.mdx
deleted file mode 100644
index ad70f6c..0000000
--- a/api-reference/endpoint/list_environments.mdx
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: 'List environments'
-api: 'GET https://app.kosli.com/api/v2/environments/{org}'
----
-
-## Path Parameters
-
-
- The Kosli organization.
-
-
-## Response
-
-
- A list of environments in the organization.
-
-
- The Kosli organization.
-
-
-
- The name of the environment.
-
-
-
- The type of the environment.
-
-
-
- A description of the environment.
-
-
-
-
diff --git a/api-reference/endpoint/put_environment.mdx b/api-reference/endpoint/put_environment.mdx
deleted file mode 100644
index 0ca812f..0000000
--- a/api-reference/endpoint/put_environment.mdx
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: 'Put environments'
-api: 'PUT https://app.kosli.com/api/v2/environments/{org}'
----
-
-## Path Parameters
-
-
- The Kosli organization.
-
-
-
-## Body Parameters
-
-
- The name of the environment to create or update.
-
-
-
- A description for the environment.
-
-
-
- The type of the environment. Valid values are `K8S`, `S3`, `logical`.
-
-
-
- Whether to include scaling information in the environment snapshot.
-
-
-
- A list of policy names to associate with the environment.
-
diff --git a/api-reference/endpoint/webhook.mdx b/api-reference/endpoint/webhook.mdx
deleted file mode 100644
index 3291340..0000000
--- a/api-reference/endpoint/webhook.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'New Plant'
-openapi: 'WEBHOOK /plant/webhook'
----
diff --git a/api-reference/openapi.json b/api-reference/openapi.json
index da5326e..1b73e96 100644
--- a/api-reference/openapi.json
+++ b/api-reference/openapi.json
@@ -1,58 +1,136 @@
{
"openapi": "3.1.0",
"info": {
- "title": "OpenAPI Plant Store",
- "description": "A sample API that uses a plant store as an example to demonstrate features in the OpenAPI specification",
- "license": {
- "name": "MIT"
- },
- "version": "1.0.0"
+ "title": "Kosli FastAPI",
+ "summary": "The API for communicating with Kosli",
+ "description": "\n# Authentication \n\nWhen making requests against Kosli API, you can authenticate your requests using a bearer token. \nSet the bearer token in the request Authorization header to a valid API key. \nAPI Keys can be personal or for service accounts. Check the [service accounts documentation](https://docs.kosli.com/getting_started/service-accounts/) for details. \n\n## Curl example\n\n```shell\ncurl -H \"Authorization: Bearer <>\" https://app.kosli.com/api/v2/environments/<>\n```\n",
+ "version": "2.0"
},
- "servers": [
- {
- "url": "http://sandbox.mintlify.com"
- }
- ],
- "security": [
- {
- "bearerAuth": []
- }
- ],
"paths": {
- "/plants": {
- "get": {
- "description": "Returns all plants from the system that the user has access to",
+ "/user/{org}": {
+ "put": {
+ "tags": [
+ "User"
+ ],
+ "summary": "Set default organization",
+ "description": "Set a default org for the current user.",
+ "operationId": "put_user_default_org_user__org__put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
"parameters": [
{
- "name": "limit",
- "in": "query",
- "description": "The maximum number of results to return",
+ "name": "org",
+ "in": "path",
+ "required": true,
"schema": {
- "type": "integer",
- "format": "int32"
+ "type": "string",
+ "title": "Org"
}
}
],
"responses": {
"200": {
- "description": "Plant response",
+ "description": "Successful Response",
"content": {
"application/json": {
- "schema": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Plant"
- }
- }
+ "schema": {}
}
}
+ }
+ }
+ }
+ },
+ "/approvals/{org}/{flow_name}": {
+ "get": {
+ "tags": [
+ "Approval"
+ ],
+ "summary": "List approvals",
+ "description": "List Allowlist records in an organization.",
+ "operationId": "list_approvals_approvals__org___flow_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
},
- "400": {
- "description": "Unexpected error",
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The page number of response",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "How many results to return per page of response",
+ "default": 20,
+ "title": "Per Page"
+ },
+ "description": "How many results to return per page of response"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/Error"
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ApprovalResponseSHA1"
+ },
+ "title": "Response 200 List Approvals Approvals Org Flow Name Get"
}
}
}
@@ -60,35 +138,77 @@
}
},
"post": {
- "description": "Creates a new plant in the store",
+ "tags": [
+ "Approval"
+ ],
+ "summary": "Create approval",
+ "description": "Create an approval.",
+ "operationId": "post_approval_approvals__org___flow_name__post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
"requestBody": {
- "description": "Plant to add to the store",
+ "required": true,
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/NewPlant"
+ "$ref": "#/components/schemas/ApprovalPostInput"
}
}
- },
- "required": true
+ }
},
"responses": {
- "200": {
- "description": "plant response",
+ "201": {
+ "description": "Successful Response",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/Plant"
+ "$ref": "#/components/schemas/ApprovalPostInput"
}
}
}
},
"400": {
- "description": "unexpected error",
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__1"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Forbidden",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/Error"
+ "$ref": "#/components/schemas/fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__1"
}
}
}
@@ -96,122 +216,18219 @@
}
}
},
- "/plants/{id}": {
- "delete": {
- "description": "Deletes a single plant based on the ID supplied",
+ "/approvals/{org}/{flow_name}/{approval_number}": {
+ "get": {
+ "tags": [
+ "Approval"
+ ],
+ "summary": "Get approval",
+ "description": "Get an approval record.",
+ "operationId": "get_approval_approvals__org___flow_name___approval_number__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
"parameters": [
{
- "name": "id",
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "approval_number",
"in": "path",
- "description": "ID of plant to delete",
"required": true,
"schema": {
"type": "integer",
- "format": "int64"
+ "title": "Approval Number"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
}
}
],
"responses": {
- "204": {
- "description": "Plant deleted",
- "content": {}
- },
- "400": {
- "description": "unexpected error",
+ "200": {
+ "description": "Successful Response",
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/Error"
+ "$ref": "#/components/schemas/ApprovalResponse"
}
}
}
}
}
}
- }
- },
- "webhooks": {
- "/plant/webhook": {
- "post": {
- "description": "Information about a new plant added to the store",
- "requestBody": {
- "description": "Plant added to the store",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/NewPlant"
- }
+ },
+ "/approvals/{org}/{flow_name}/artifact-commit/{env_name}": {
+ "get": {
+ "tags": [
+ "Approval"
+ ],
+ "summary": "Get commit of running artifact",
+ "description": "Get the git commit of a running artifact in a specific environment that comes from a given flow",
+ "operationId": "get_commit_of_running_artifact_approvals__org___flow_name__artifact_commit__env_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
}
}
- },
+ ],
"responses": {
"200": {
- "description": "Return a 200 status to indicate that the data was received successfully"
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CommitResponse"
+ }
+ }
+ }
}
}
}
- }
- },
- "components": {
- "schemas": {
- "Plant": {
- "required": [
- "name"
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/{attestation_name}": {
+ "get": {
+ "tags": [
+ "Attestation"
],
- "type": "object",
- "properties": {
- "name": {
- "description": "The name of the plant",
- "type": "string"
+ "summary": "Get trail attestation",
+ "operationId": "get_trail_attestation_attestations__org___flow_name__trail__trail_name___attestation_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
},
- "tag": {
- "description": "Tag to specify the type",
- "type": "string"
+ {
+ "HTTPBasic": []
}
- }
- },
- "NewPlant": {
- "allOf": [
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
{
- "$ref": "#/components/schemas/Plant"
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
},
{
- "required": [
- "id"
- ],
- "type": "object",
- "properties": {
- "id": {
- "description": "Identification number of the plant",
- "type": "integer",
- "format": "int64"
- }
+ "name": "attestation_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Attestation Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
}
}
- ]
- },
- "Error": {
- "required": [
- "error",
- "message"
],
- "type": "object",
- "properties": {
- "error": {
- "type": "integer",
- "format": "int32"
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttestationResponse"
+ }
+ }
+ }
},
- "message": {
- "type": "string"
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__1"
+ }
+ }
+ }
}
}
}
},
- "securitySchemes": {
- "bearerAuth": {
- "type": "http",
- "scheme": "bearer"
- }
+ "/attestations/{org}/{flow_name}/artifact/{fingerprint}/{attestation_name}": {
+ "get": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Get artifact attestation",
+ "operationId": "get_artifact_attestation_attestations__org___flow_name__artifact__fingerprint___attestation_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "fingerprint",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{5,64}$",
+ "title": "Fingerprint"
+ }
+ },
+ {
+ "name": "attestation_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Attestation Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttestationResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__2"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/attestation/{attestation_id}/evidence": {
+ "get": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Get attestation evidence file",
+ "description": "Download the evidence file attached to an attestation.",
+ "operationId": "get_attestation_evidence_attestations__org___flow_name__trail__trail_name__attestation__attestation_id__evidence_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "attestation_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Attestation Id"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "headers": {
+ "Content-Type": {
+ "description": "The mime type of the evidence file",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__3"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/attestations/{org}/list_attestations_for_criteria": {
+ "get": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "List attestations for criteria",
+ "description": "List attestations matching a search criteria within an organization.\n\nThis endpoint returns a dictionary mapping commit SHAs to lists of attestations.\nEach attestation contains metadata about compliance, timing, and type-specific data.\n\n## Usage Examples\n\n### Get all attestations for a specific flow\n```\nGET /attestations/my-org?flow_name=production-flow\n```\n\n### Get security attestations for specific commits\n```\nGET /attestations/my-org?attestation_type=snyk&commit_list=ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6\n```\n\n### Get a specific attestation by name\n```\nGET /attestations/my-org?attestation_name=manual-test\n```\n\n### Get custom attestations\n```\nGET /attestations/my-org?attestation_type=custom:security-scan\n```",
+ "operationId": "list_attestations_for_criteria_attestations__org__list_attestations_for_criteria_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "flow_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The flow name to search for attestations in",
+ "title": "Flow Name"
+ },
+ "description": "The flow name to search for attestations in"
+ },
+ {
+ "name": "commit_list",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The commit list that the attestations are associated with",
+ "title": "Commit List"
+ },
+ "description": "The commit list that the attestations are associated with"
+ },
+ {
+ "name": "attestation_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The attestation name to search for",
+ "title": "Attestation Name"
+ },
+ "description": "The attestation name to search for"
+ },
+ {
+ "name": "attestation_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The attestation ID to search for",
+ "title": "Attestation Id"
+ },
+ "description": "The attestation ID to search for"
+ },
+ {
+ "name": "attestation_type",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The attestation type to search for. Use built-in types (e.g., 'junit') or 'custom:' for custom types.",
+ "title": "Attestation Type"
+ },
+ "description": "The attestation type to search for. Use built-in types (e.g., 'junit') or 'custom:' for custom types."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully retrieved attestations",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttestationsListForCommitsResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}": {
+ "get": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "List flow attestations",
+ "description": "Get all attestations for a flow for a given time span.",
+ "operationId": "get_flow_attestations_attestations__org___flow_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The page number of response",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "How many results to return per page of response",
+ "default": 20,
+ "title": "Per Page"
+ },
+ "description": "How many results to return per page of response"
+ },
+ {
+ "name": "from_timestamp",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "From timestamp filter. Example: ?from_timestamp=1675167540",
+ "title": "From Timestamp"
+ },
+ "description": "From timestamp filter. Example: ?from_timestamp=1675167540"
+ },
+ {
+ "name": "to_timestamp",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "To timestamp filter. Example: ?to_timestamp=1675167540",
+ "title": "To Timestamp"
+ },
+ "description": "To timestamp filter. Example: ?to_timestamp=1675167540"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttestationsPaginatedResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__4"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/attestations/{org}": {
+ "get": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "List attestations",
+ "description": "Get a paginated list attestations for an organization based on filters provided as query parameters.",
+ "operationId": "get_attestations_attestations__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "attestation_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The attestation ID to search for",
+ "title": "Attestation Id"
+ },
+ "description": "The attestation ID to search for"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttestationsPaginatedResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/generic": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Attest generic",
+ "description": "Add Generic attestation to a trail with an optional attachment file.",
+ "operationId": "post_generic_attestation_attestations__org___flow_name__trail__trail_name__generic_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_generic_attestation_attestations__org___flow_name__trail__trail_name__generic_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/override": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Override attestation",
+ "description": "Override an attestation in a trail.",
+ "operationId": "post_override_attestation_attestations__org___flow_name__trail__trail_name__override_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OverrideAttestationPostInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Creation Success"
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/pull_request": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Attest pull request",
+ "description": "Add Pull-Request attestation to a trail with an optional attachment file.",
+ "operationId": "post_pull_request_attestation_attestations__org___flow_name__trail__trail_name__pull_request_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_pull_request_attestation_attestations__org___flow_name__trail__trail_name__pull_request_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/junit": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Attest JUnit test results",
+ "description": "Add JUnit attestation to a trail with an optional attachment file.",
+ "operationId": "post_junit_attestation_attestations__org___flow_name__trail__trail_name__junit_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_junit_attestation_attestations__org___flow_name__trail__trail_name__junit_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/sonar": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Attest Sonar scan",
+ "description": "Add Sonar attestation to a trail with an optional attachment file.",
+ "operationId": "post_sonar_attestation_attestations__org___flow_name__trail__trail_name__sonar_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_sonar_attestation_attestations__org___flow_name__trail__trail_name__sonar_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/jira": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Attest Jira issue",
+ "description": "Add Jira attestation to a trail with an optional attachment file.",
+ "operationId": "post_jira_attestation_attestations__org___flow_name__trail__trail_name__jira_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_jira_attestation_attestations__org___flow_name__trail__trail_name__jira_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/snyk": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Attest Snyk scan",
+ "description": "Add Snyk attestation to a trail with an optional attachment file.",
+ "operationId": "post_snyk_attestation_attestations__org___flow_name__trail__trail_name__snyk_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_snyk_attestation_attestations__org___flow_name__trail__trail_name__snyk_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/attestations/{org}/{flow_name}/trail/{trail_name}/custom": {
+ "post": {
+ "tags": [
+ "Attestation"
+ ],
+ "summary": "Attest custom",
+ "description": "Add custom attestation to a trail with an optional attachment file.",
+ "operationId": "post_custom_attestation_attestations__org___flow_name__trail__trail_name__custom_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_custom_attestation_attestations__org___flow_name__trail__trail_name__custom_post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ },
+ "404": {
+ "description": "Not Found"
+ }
+ }
+ }
+ },
+ "/custom-attestation-types/{org}": {
+ "get": {
+ "tags": [
+ "Custom Attestation Types"
+ ],
+ "summary": "List custom attestation types",
+ "description": "List all custom attestation types for an org.",
+ "operationId": "get_custom_attestation_types_custom_attestation_types__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": [
+ "Custom Attestation Types"
+ ],
+ "summary": "Create or update custom attestation type",
+ "description": "Create or update a custom attestation type for an org.",
+ "operationId": "post_custom_attestation_type_custom_attestation_types__org__post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_post_custom_attestation_type_custom_attestation_types__org__post"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error"
+ }
+ }
+ }
+ },
+ "/custom-attestation-types/{org}/{custom_attestation_type_name}": {
+ "get": {
+ "tags": [
+ "Custom Attestation Types"
+ ],
+ "summary": "Get custom attestation type",
+ "description": "Get a custom attestation type.",
+ "operationId": "get_custom_attestation_type_custom_attestation_types__org___custom_attestation_type_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "custom_attestation_type_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Custom Attestation Type Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "version",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Version of the custom attestation type",
+ "title": "Version"
+ },
+ "description": "Version of the custom attestation type"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/custom-attestation-types/{org}/{custom_attestation_type_name}/archive": {
+ "put": {
+ "tags": [
+ "Custom Attestation Types"
+ ],
+ "summary": "Archive custom attestation type",
+ "description": "Archive a custom attestation type.",
+ "operationId": "archive_custom_attestation_type_custom_attestation_types__org___custom_attestation_type_name__archive_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "custom_attestation_type_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Custom Attestation Type Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/flows/{org}/{flow_name}": {
+ "get": {
+ "tags": [
+ "Flows"
+ ],
+ "summary": "Get flow",
+ "description": "Get a flow for an organization.",
+ "operationId": "get_flow_flows__org___flow_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/FlowGet"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__5"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/flows/{org}": {
+ "get": {
+ "tags": [
+ "Flows"
+ ],
+ "summary": "List flows",
+ "description": "List flows for an organization.",
+ "operationId": "get_flows_flows__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "search_by_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Return flows that contain the given string in their name. Only alphanumeric characters and '-' are allowed.",
+ "title": "Search By Name"
+ },
+ "description": "Return flows that contain the given string in their name. Only alphanumeric characters and '-' are allowed."
+ },
+ {
+ "name": "case_sensitive",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "description": "Whether the search_by_name filter is case sensitive. Defaults to true.",
+ "default": true,
+ "title": "Case Sensitive"
+ },
+ "description": "Whether the search_by_name filter is case sensitive. Defaults to true."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/FlowList"
+ },
+ "title": "Response Get Flows Flows Org Get"
+ }
+ }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Flows"
+ ],
+ "summary": "Create or update flow",
+ "description": "Create or update a flow for an organization.",
+ "operationId": "create_flow_flows__org__put",
+ "deprecated": true,
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LegacyCreateFlow"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful flow creation",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "200": {
+ "description": "Successful flow update"
+ },
+ "400": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__2"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/flows/{org}/template_file": {
+ "put": {
+ "tags": [
+ "Flows"
+ ],
+ "summary": "Create or update flow with template",
+ "description": "Create or update a flow for an organization.",
+ "operationId": "create_flow_with_template_flows__org__template_file_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_create_flow_with_template_flows__org__template_file_put"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful flow creation",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "200": {
+ "description": "Successful flow update"
+ },
+ "400": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__2"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/flows/{org}/{flow_name}/archive": {
+ "put": {
+ "tags": [
+ "Flows"
+ ],
+ "summary": "Archive flow",
+ "description": "Archive a flow.",
+ "operationId": "archive_flow_flows__org___flow_name__archive_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful flow archive",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Flow not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__6"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/flows/{org}/{flow_name}/rename": {
+ "put": {
+ "tags": [
+ "Flows"
+ ],
+ "summary": "Rename flow",
+ "description": "Rename a flow.\nThe flow will remain available under its old name until that name is taken by another flow.",
+ "operationId": "rename_flow_flows__org___flow_name__rename_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RenameFlow"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful flow rename",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Flow not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__7"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/trails/{org}/{flow_name}": {
+ "put": {
+ "tags": [
+ "Trails"
+ ],
+ "summary": "Begin trail",
+ "description": "Add a Trail to a Flow.",
+ "operationId": "create_trail_trails__org___flow_name__put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_create_trail_trails__org___flow_name__put"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "Trails"
+ ],
+ "summary": "List trails",
+ "description": "List Trails of a Flow.",
+ "operationId": "list_trails_trails__org___flow_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The page number of response",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "How many results to return per page of response",
+ "title": "Per Page"
+ },
+ "description": "How many results to return per page of response"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ListTrails"
+ },
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GetTrail"
+ }
+ }
+ ],
+ "title": "Response List Trails Trails Org Flow Name Get"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/trails/{org}/{flow_name}/{trail_name}/audit_package": {
+ "get": {
+ "tags": [
+ "Trails"
+ ],
+ "summary": "Download trail audit package",
+ "description": "Download the full trail audit package (same content as the app \u201cDownload Full Audit Package\u201d).",
+ "operationId": "download_trail_audit_package_trails__org___flow_name___trail_name__audit_package_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Gzipped tarball (.tgz) containing manifest, attestations, artifacts, and PDF report",
+ "headers": {
+ "Content-Type": {
+ "description": "application/gzip",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow or trail not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__8"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/trails/{org}/{flow_name}/{trail_name}/audit_pdf": {
+ "get": {
+ "tags": [
+ "Trails"
+ ],
+ "summary": "Download trail audit PDF",
+ "description": "Download only the trail PDF report (same as `trail-page.pdf` inside the full audit package).",
+ "operationId": "download_trail_audit_pdf_trails__org___flow_name___trail_name__audit_pdf_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "PDF summary of the trail",
+ "headers": {
+ "Content-Type": {
+ "description": "application/pdf",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow or trail not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__9"
+ }
+ }
+ }
+ },
+ "503": {
+ "description": "PDF generation failed"
+ }
+ }
+ }
+ },
+ "/trails/{org}/{flow_name}/{trail_name}": {
+ "get": {
+ "tags": [
+ "Trails"
+ ],
+ "summary": "Get trail",
+ "description": "Get a Trail for a Flow in an organization.",
+ "operationId": "get_trail_trails__org___flow_name___trail_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "trail_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Trail Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GetTrail"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/trails/{org}": {
+ "get": {
+ "tags": [
+ "Trails"
+ ],
+ "summary": "List trails for organization",
+ "description": "Get a paginated list of trails for an organization based on filters provided as query parameters.",
+ "operationId": "list_trails_for_org_trails__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "flow",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The name of the flow to filter trails by",
+ "title": "Flow"
+ },
+ "description": "The name of the flow to filter trails by"
+ },
+ {
+ "name": "flow_tag",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter trails by flows that have this tag (format: key=value, e.g., team=backend)",
+ "title": "Flow Tag"
+ },
+ "description": "Filter trails by flows that have this tag (format: key=value, e.g., team=backend)"
+ },
+ {
+ "name": "fingerprint",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The fingerprint of the artifact reported to the trail or trails",
+ "title": "Fingerprint"
+ },
+ "description": "The fingerprint of the artifact reported to the trail or trails"
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The page number of response",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "How many results to return per page of response",
+ "default": 20,
+ "title": "Per Page"
+ },
+ "description": "How many results to return per page of response"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ListTrails"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/artifacts/{org}/{flow_name}": {
+ "post": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "Report artifact",
+ "description": "Create an artifact for organization.",
+ "operationId": "create_artifact_artifacts__org___flow_name__post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateArtifact"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "List artifacts in flow",
+ "description": "Get artifacts in flow.",
+ "operationId": "list_artifacts_deprecated_artifacts__org___flow_name__get",
+ "deprecated": true,
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The page number of response",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "How many results to return per page of response",
+ "default": 15,
+ "title": "Per Page"
+ },
+ "description": "How many results to return per page of response"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ArtifactListItemResponse"
+ },
+ "title": "Response 200 List Artifacts Deprecated Artifacts Org Flow Name Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__10"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/artifacts/{org}": {
+ "get": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "List artifacts",
+ "description": "List artifacts in organization. Can be filtered by flow name or repo name.\n\n- The result is paginated.\n- The list of artifacts is sorted by creation time in descending order.",
+ "operationId": "list_artifacts_artifacts__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "flow_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The name of the flow to list artifacts from",
+ "title": "Flow Name"
+ },
+ "description": "The name of the flow to list artifacts from"
+ },
+ {
+ "name": "repo_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The name of the repo to list artifacts from",
+ "title": "Repo Name"
+ },
+ "description": "The name of the repo to list artifacts from"
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "description": "The page number of response",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "description": "How many artifacts to return per page of response",
+ "default": 15,
+ "title": "Per Page"
+ },
+ "description": "How many artifacts to return per page of response"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ArtifactListItemResponse"
+ },
+ "title": "Response 200 List Artifacts Artifacts Org Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Organization Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__11"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/artifacts/{org}/{flow_name}/fingerprint/{fingerprint}": {
+ "get": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "Get artifact by fingerprint",
+ "description": "Get artifact by fingerprint.",
+ "operationId": "get_artifact_by_fingerprint_artifacts__org___flow_name__fingerprint__fingerprint__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "fingerprint",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "trail",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The name of the trail the artifact was reported to.",
+ "title": "Trail"
+ },
+ "description": "The name of the trail the artifact was reported to."
+ },
+ {
+ "name": "attestation_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{8}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Internal artifact attestation id.",
+ "title": "Attestation Id"
+ },
+ "description": "Internal artifact attestation id."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ArtifactResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__12"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/artifacts/{org}/{flow_name}/{fingerprint}/latest_commit": {
+ "get": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "Get latest artifact commit",
+ "description": "Get the latest git commit of the artifact.",
+ "operationId": "get_latest_artifact_commit_artifacts__org___flow_name___fingerprint__latest_commit_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "fingerprint",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "branch",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The branch to get the commit from",
+ "title": "Branch"
+ },
+ "description": "The branch to get the commit from"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LatestCommitResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__13"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/artifacts/{org}/{flow_name}/{fingerprint}/approvals": {
+ "get": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "List artifact approvals",
+ "description": "List approvals for an artifact.",
+ "operationId": "list_artifact_approvals_artifacts__org___flow_name___fingerprint__approvals_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "fingerprint",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ApprovalResponseSHA1"
+ },
+ "title": "Response 200 List Artifact Approvals Artifacts Org Flow Name Fingerprint Approvals Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__14"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/artifacts/{org}/{flow_name}/{fingerprint}/audit_package": {
+ "get": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "Get artifact audit package",
+ "description": "Get audit package for an artifact.",
+ "operationId": "get_audit_package_artifacts__org___flow_name___fingerprint__audit_package_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "fingerprint",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "headers": {
+ "Content-Encoding": {
+ "description": "gzip",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "Content-Type": {
+ "description": "application/octet-stream",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__15"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/artifacts/{org}/{flow_name}/commit_sha/{commit_sha}": {
+ "get": {
+ "tags": [
+ "Artifacts"
+ ],
+ "summary": "Get artifacts by commit SHA",
+ "description": "Get artifact by commit sha.",
+ "operationId": "get_artifact_by_commit_sha_artifacts__org___flow_name__commit_sha__commit_sha__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "flow_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow Name"
+ }
+ },
+ {
+ "name": "commit_sha",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Commit Sha"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "trail",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The name of the trail the artifact was reported to.",
+ "title": "Trail"
+ },
+ "description": "The name of the trail the artifact was reported to."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ArtifactResponse"
+ },
+ "title": "Response 200 Get Artifact By Commit Sha Artifacts Org Flow Name Commit Sha Commit Sha Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__16"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Create or update environment",
+ "description": "Create or update an Environment for an organization.",
+ "operationId": "create_env_environments__org__put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateEnvironmentPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ },
+ "get": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "List environments",
+ "description": "List environments of an organization.",
+ "operationId": "list_envs_environments__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GetEnvironmentResponse"
+ },
+ "title": "Response List Envs Environments Org Get"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/events": {
+ "get": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "List environment events",
+ "description": "Get events log for an environment.\n\n**Response Headers:**\n\n* `X-Total-Count`: Total number of events available\n* `X-Per-Page`: Number of events per page\n* `X-Current-Page`: Current page number\n* `X-Total-Pages`: Total number of pages\n* `Link`: Pagination links (first, prev, next, last) when applicable\n\n**Pagination Links Format:**\n```\n; rel=\"first\",\n; rel=\"prev\",\n; rel=\"next\",\n; rel=\"last\"\n```\n\n**Note:** The Link header is only included when there are multiple pages.",
+ "operationId": "get_env_events_environments__org___env_name__events_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "interval",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Deprecated, use 'start' and 'end' instead. Expression to specify the interval of snapshots to query.\nMust be two snapshot expressions separated by '..'\nie: '5..10', or '~5..NOW'",
+ "deprecated": true,
+ "title": "Interval"
+ },
+ "description": "Deprecated, use 'start' and 'end' instead. Expression to specify the interval of snapshots to query.\nMust be two snapshot expressions separated by '..'\nie: '5..10', or '~5..NOW'",
+ "deprecated": true
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "The page number of response.",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response."
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "maximum": 100,
+ "minimum": 1,
+ "description": "How many results to return per page of response. min: 1, max: 100",
+ "default": 15,
+ "title": "Per Page"
+ },
+ "description": "How many results to return per page of response. min: 1, max: 100"
+ },
+ {
+ "name": "reverse",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "boolean",
+ "description": "Return results in reverse order. Expected values: True or False. Defaults to False.",
+ "default": false,
+ "title": "Reverse"
+ },
+ "description": "Return results in reverse order. Expected values: True or False. Defaults to False."
+ },
+ {
+ "name": "repo_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter events by repo name. Can be repeated for multiple repos, e.g. repo_name=repo1&repo_name=repo2",
+ "title": "Repo Name"
+ },
+ "description": "Filter events by repo name. Can be repeated for multiple repos, e.g. repo_name=repo1&repo_name=repo2"
+ },
+ {
+ "name": "start",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "description": "The start of the interval to query. Can be a positive snapshot index (1, 2, etc.), negative snapshot index (-1 for latest, -2 for second latest, etc.), or time reference ['NOW', '1hour', '1h', '2days', '30mins'], or an exact unix timestamp (1719638400).",
+ "default": "1",
+ "title": "Start"
+ },
+ "description": "The start of the interval to query. Can be a positive snapshot index (1, 2, etc.), negative snapshot index (-1 for latest, -2 for second latest, etc.), or time reference ['NOW', '1hour', '1h', '2days', '30mins'], or an exact unix timestamp (1719638400)."
+ },
+ {
+ "name": "end",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "description": "The end of the interval to query. Can be a positive snapshot index (1, 2, etc.), negative snapshot index (-1 for latest, -2 for second latest, etc.), or time reference ['NOW', '1hour', '1h', '2days', '30mins'], or an exact unix timestamp (1719638400).",
+ "default": "NOW",
+ "title": "End"
+ },
+ "description": "The end of the interval to query. Can be a positive snapshot index (1, 2, etc.), negative snapshot index (-1 for latest, -2 for second latest, etc.), or time reference ['NOW', '1hour', '1h', '2days', '30mins'], or an exact unix timestamp (1719638400)."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "List of environment events with pagination headers",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GetEnvironmentEventResponse"
+ },
+ "title": "Response Get Env Events Environments Org Env Name Events Get"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}": {
+ "get": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Get environment",
+ "description": "Get an environment for an organization.",
+ "operationId": "get_environment_environments__org___env_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GetEnvironmentResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/report/ECS": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Report ECS environment",
+ "description": "Process a report for an ECS environment.",
+ "operationId": "ecs_report_environments__org___env_name__report_ECS_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ECSReport"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Report processed successfully, no new snapshots to create",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Snapshot created"
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__17"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid report data",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__3"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/report/S3": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Report S3 environment",
+ "description": "Process a report for an S3 environment.",
+ "operationId": "s3_report_environments__org___env_name__report_S3_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/S3Report"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Report processed successfully, no new snapshots to create",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Snapshot created"
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__18"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid report data",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__4"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/report/K8S": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Report K8S environment",
+ "description": "Process a report for a K8S environment.",
+ "operationId": "k8s_report_environments__org___env_name__report_K8S_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/K8SReport"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Report processed successfully, no new snapshots to create",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Snapshot created"
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__19"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid report data",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__5"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/report/azure-apps": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Report Azure Web and Function Apps environment",
+ "description": "[beta] Process a report for an Azure Web and Function Apps environment.",
+ "operationId": "azure_apps_report_environments__org___env_name__report_azure_apps_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AzureAppsReport"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Report processed successfully, no new snapshots to create",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Snapshot created"
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__20"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid report data",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__6"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/report/docker": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Report Docker environment",
+ "description": "Process a report for a Docker environment.",
+ "operationId": "docker_report_environments__org___env_name__report_docker_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DockerReport"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Report processed successfully, no new snapshots to create",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Snapshot created"
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__21"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid report data",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__7"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/report/lambda": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Report Lambda environment",
+ "description": "Process a report for a Lambda environment.",
+ "operationId": "lambda_report_environments__org___env_name__report_lambda_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LambdaReport"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Report processed successfully, no new snapshots to create",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Snapshot created"
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__22"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid report data",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__8"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/report/server": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Report server environment",
+ "description": "Process a report for a server environment.",
+ "operationId": "server_report_environments__org___env_name__report_server_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ServerReport"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Report processed successfully, no new snapshots to create",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "201": {
+ "description": "Snapshot created"
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__23"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid report data",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__9"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/archive": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Archive environment",
+ "description": "Archive an environment.",
+ "operationId": "archive_env_environments__org___env_name__archive_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Environment archived successfully",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Environment not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__24"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "User does not have permission to archive environment",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__2"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/join": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Add environment to logical environment",
+ "description": "Join the given physical environment to this Logical environment",
+ "operationId": "join_physical_to_logical_environments__org___env_name__join_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/JoinPhysicalToLogicalPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successfully added environment",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__25"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__BadRequestResponse___locals___BadRequestResponseModel__1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/rename": {
+ "put": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Rename environment",
+ "description": "Rename an environment",
+ "operationId": "rename_environment_environments__org___env_name__rename_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RenameEnvironmentPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful environment rename",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__26"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/auditlog": {
+ "get": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Get environment audit log",
+ "description": "Get audit log (as a CSV file) for an environment.",
+ "operationId": "get_env_auditlog_environments__org___env_name__auditlog_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "from_timestamp",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "From timestamp filter. Takes a UNIX timestamp. e.g. from_timestamp=1675167540",
+ "title": "From Timestamp"
+ },
+ "description": "From timestamp filter. Takes a UNIX timestamp. e.g. from_timestamp=1675167540"
+ },
+ {
+ "name": "to_timestamp",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "To timestamp filter. Takes a UNIX timestamp. e.g. from_timestamp=1675167540",
+ "title": "To Timestamp"
+ },
+ "description": "To timestamp filter. Takes a UNIX timestamp. e.g. from_timestamp=1675167540"
+ },
+ {
+ "name": "event_types",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Event types filter. Can be one of started, exited, changed. e.g. event_types=started,exited",
+ "title": "Event Types"
+ },
+ "description": "Event types filter. Can be one of started, exited, changed. e.g. event_types=started,exited"
+ },
+ {
+ "name": "flow_names",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Flow names filter as comma separated list. Use 'no provenance' to include artifacts without provenance.e.g. flow_names=server,web,no provenance",
+ "title": "Flow Names"
+ },
+ "description": "Flow names filter as comma separated list. Use 'no provenance' to include artifacts without provenance.e.g. flow_names=server,web,no provenance"
+ },
+ {
+ "name": "repo_names",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Repo names filter as comma separated list. e.g. repo_names=repo1,repo2",
+ "title": "Repo Names"
+ },
+ "description": "Repo names filter as comma separated list. e.g. repo_names=repo1,repo2"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful audit log retrieval",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ },
+ "headers": {
+ "content-type": {
+ "schema": {
+ "type": "string",
+ "example": "text/csv; charset=utf-8"
+ },
+ "description": "Content type of the response"
+ }
+ }
+ },
+ "404": {
+ "description": "Environment Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__27"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/environments/{org}/{env_name}/policies": {
+ "post": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Attach policy to environment",
+ "description": "Attach a Policy to an environment.",
+ "operationId": "attach_policy_to_env_environments__org___env_name__policies_post",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttachPoliciesPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Policy attached successfully",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Environment or policy not found"
+ },
+ "403": {
+ "description": "User does not have permission to attach policy"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Environments"
+ ],
+ "summary": "Detach policy from environment",
+ "description": "Detach a Policy from an environment.",
+ "operationId": "detach_policy_from_env_environments__org___env_name__policies_delete",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AttachPoliciesPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Policy detached successfully",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Environment or policy not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__28"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "User does not have permission to detach policy",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__3"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/env-diff/{org}": {
+ "get": {
+ "tags": [
+ "EnvDiff"
+ ],
+ "summary": "Get environment diff",
+ "description": "Get diff between to snapshots",
+ "operationId": "environment_diff_env_diff__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "snappish1",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Expression to specify the snapshot 1 for comparison.\nMust contain environment name.\nAdd '#N' to specify exact snapshot number N.\nAdd '~N' to get N-th behind the latest snapshot.\nExamples: staging, staging#10, staging~2",
+ "title": "Snappish1"
+ },
+ "description": "Expression to specify the snapshot 1 for comparison.\nMust contain environment name.\nAdd '#N' to specify exact snapshot number N.\nAdd '~N' to get N-th behind the latest snapshot.\nExamples: staging, staging#10, staging~2"
+ },
+ {
+ "name": "snappish2",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Expression to specify the snapshot 2 for comparison.\nMust contain environment name.\nAdd '#N' to specify exact snapshot number N.\n'Add '~N' to get N-th behind the latest snapshot.\nExamples: staging, staging#10, staging~2",
+ "title": "Snappish2"
+ },
+ "description": "Expression to specify the snapshot 2 for comparison.\nMust contain environment name.\nAdd '#N' to specify exact snapshot number N.\n'Add '~N' to get N-th behind the latest snapshot.\nExamples: staging, staging#10, staging~2"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EnvironmentDiffResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Not found"
+ }
+ }
+ }
+ },
+ "/asserts/{org}/fingerprint/{fingerprint}": {
+ "get": {
+ "tags": [
+ "Asserts"
+ ],
+ "summary": "Assert artifact",
+ "description": "Assert an artifact.",
+ "operationId": "assert_artifact_asserts__org__fingerprint__fingerprint__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "fingerprint",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Fingerprint"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "flow_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter by flow name",
+ "title": "Flow Name"
+ },
+ "description": "Filter by flow name"
+ },
+ {
+ "name": "environment_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The name of the environment. Ignored if environment does not use policies.",
+ "title": "Environment Name"
+ },
+ "description": "The name of the environment. Ignored if environment does not use policies."
+ },
+ {
+ "name": "policy_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "List of policy names to assert against. ?policy_name=a&policy_name=b",
+ "title": "Policy Name"
+ },
+ "description": "List of policy names to assert against. ?policy_name=a&policy_name=b"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AssertArtifactResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Artifact Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__29"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/policies/{org}": {
+ "get": {
+ "tags": [
+ "Policies"
+ ],
+ "summary": "List policies",
+ "description": "List Policies in an organization.",
+ "operationId": "list_policies_policies__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PolicyResponse"
+ },
+ "title": "Response List Policies Policies Org Get"
+ }
+ }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Policies"
+ ],
+ "summary": "Create or update policy",
+ "description": "Create or update a Policy in an organization.",
+ "operationId": "put_policy_policies__org__put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/Body_put_policy_policies__org__put"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Update Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PolicyResponse"
+ }
+ }
+ }
+ },
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PolicyResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__10"
+ }
+ }
+ }
+ },
+ "413": {
+ "description": "Request Entity Too Large",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RequestEntityTooLargeResponseModel"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/policies/{org}/{policy_name}": {
+ "get": {
+ "tags": [
+ "Policies"
+ ],
+ "summary": "Get policy",
+ "description": "Get a Policy in an organization.",
+ "operationId": "get_policy_policies__org___policy_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "policy_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Policy Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PolicyResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Policy Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__30"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/allowlists/{org}": {
+ "get": {
+ "tags": [
+ "Allowlists"
+ ],
+ "summary": "List allowlist",
+ "description": "List Allowlist records in an organization.",
+ "operationId": "list_allowlist_allowlists__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/AllowlistResponse"
+ },
+ "title": "Response 200 List Allowlist Allowlists Org Get"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/allowlists/{org}/{env_name}": {
+ "put": {
+ "tags": [
+ "Allowlists"
+ ],
+ "summary": "Allow artifact for environment",
+ "description": "Allow an artifact for an environment.",
+ "operationId": "allow_artifact_for_env_allowlists__org___env_name__put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AllowlistPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AllowlistPutInput"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__11"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Forbidden",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__4"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/organizations/{org}": {
+ "get": {
+ "tags": [
+ "Organizations"
+ ],
+ "summary": "Get organization",
+ "description": "Get a specific org.",
+ "operationId": "get_organization_organizations__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GetOrganization"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/organizations/{org}/experimental_features": {
+ "put": {
+ "tags": [
+ "Organizations"
+ ],
+ "summary": "Update experimental features",
+ "description": "Enable/Disable beta features for an org.",
+ "operationId": "update_experimental_features_organizations__org__experimental_features_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/OrganizationUpdate"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successfully updated state of experimental features.",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/organizations/{org}/environments_notifications": {
+ "get": {
+ "tags": [
+ "Organizations"
+ ],
+ "summary": "List environment notifications",
+ "description": "List environments-notifications for an org.",
+ "operationId": "get_environment_notifications_organizations__org__environments_notifications_get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/EnvNotificationsResponse"
+ },
+ "title": "Response 200 Get Environment Notifications Organizations Org Environments Notifications Get"
+ }
+ }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Organizations"
+ ],
+ "summary": "Create or update environment notification",
+ "description": "Create or Update an environments-notification for an org.",
+ "operationId": "put_environment_notifications_organizations__org__environments_notifications_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EnvActionPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successfully created environments notification.",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "200": {
+ "description": "Successfully updated environments notification."
+ },
+ "400": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__12"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/organizations/{org}/environments_notifications/{notification_number}": {
+ "get": {
+ "tags": [
+ "Organizations"
+ ],
+ "summary": "Get environment notification",
+ "description": "Get a specific environments-notification for an org.",
+ "operationId": "get_environment_notification_organizations__org__environments_notifications__notification_number__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "notification_number",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "Notification Number"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EnvNotificationsResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Notification Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__31"
+ }
+ }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "Organizations"
+ ],
+ "summary": "Update environment notification",
+ "description": "Update a specific environments-notification for an org.",
+ "operationId": "update_environment_notification_organizations__org__environments_notifications__notification_number__put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "notification_number",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "Notification Number"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EnvActionPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successfully updated environments notification.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Update Environment Notification Organizations Org Environments Notifications Notification Number Put"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Notification Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__32"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Organizations"
+ ],
+ "summary": "Delete environment notification",
+ "description": "Delete a specific environments-notification for an org.",
+ "operationId": "delete_environment_notification_organizations__org__environments_notifications__notification_number__delete",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "notification_number",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "Notification Number"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successfully deleted environments notification.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "title": "Response Delete Environment Notification Organizations Org Environments Notifications Notification Number Delete"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Notification Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__33"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/tags/{org}/{resource_type}/{resource_id}": {
+ "patch": {
+ "tags": [
+ "Tags"
+ ],
+ "summary": "Update tags",
+ "description": "Patch tags for resource.",
+ "operationId": "patch_tags_tags__org___resource_type___resource_id__patch",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "resource_type",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Resource Type"
+ }
+ },
+ {
+ "name": "resource_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Resource Id"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/TagPatchInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "404": {
+ "description": "Resource Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__34"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid Resource Type",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__BadRequestResponse___locals___BadRequestResponseModel__2"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/snapshots/{org}/{env_name}/{snapshot_expression}": {
+ "get": {
+ "tags": [
+ "Snapshots"
+ ],
+ "summary": "Get snapshot",
+ "description": "Get a snapshot for an environment.\n\n`snapshot_expression` can be specified as follows:\n- `N`: the Nth snapshot, counting from 1. Negative values count from the latest snapshot i.e. -1 is the latest snapshot.\n example: 42\n- `~N`: the Nth snapshot behind the latest, at the time of the request\n example: ~5\n- `@{YYYY-MM-DDTHH:MM:SS}`: the snapshot at specific moment in time in UTC\n example: @{2023-10-02T12:00:00}\n- `@{N..ago}`: the snapshot at a time relative to the time of the request. N is a positive integer.\n example: @{2.hours.ago}\n- `@{now}`: the snapshot at the time of the request\n example: @{now}",
+ "operationId": "get_snapshot_snapshots__org___env_name___snapshot_expression__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "snapshot_expression",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Snapshot Expression"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GetSnapshotResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/snapshots/{org}/{env_name}": {
+ "get": {
+ "tags": [
+ "Snapshots"
+ ],
+ "summary": "List snapshots",
+ "description": "Get list of snapshots for an environment.",
+ "operationId": "get_snapshot_snapshots__org___env_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "env_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Env Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The page number of response",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "The page number of response"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "integer",
+ "minimum": 1
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "How many results to return per page of response",
+ "default": 15,
+ "title": "Per Page"
+ },
+ "description": "How many results to return per page of response"
+ },
+ {
+ "name": "interval",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Expression to specify the interval of snapshots to query.\nMust be two snapshot expressions separated by '..'\nie: '5..10', or '~5..NOW",
+ "default": "1..NOW",
+ "title": "Interval"
+ },
+ "description": "Expression to specify the interval of snapshots to query.\nMust be two snapshot expressions separated by '..'\nie: '5..10', or '~5..NOW"
+ },
+ {
+ "name": "reverse",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Return results in reverse order. Expected values: True or False. Defaults to False.",
+ "default": false,
+ "title": "Reverse"
+ },
+ "description": "Return results in reverse order. Expected values: True or False. Defaults to False."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/GetSnapshotListItem"
+ },
+ "title": "Response 200 Get Snapshot Snapshots Org Env Name Get"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Flow Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__35"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/repos/{org}": {
+ "get": {
+ "tags": [
+ "Repos"
+ ],
+ "summary": "List repos",
+ "description": "List repos for an organization.\n\nRepos are paginated.\n- The response includes pagination information and the list of repos.\n- The list of repos is sorted by the repo name.\n- Optional filters: name (exact match), provider (VCS provider), and repo_id (external repo ID).\n- repo_id is the stronger identifier as names of repos can change. So if repo_id is provided, name is ignored.\n\nRepos are captured when attestations include a reference to a repo.\nThis happens automatically when using Kosli CLI v2.11.35 or higher.",
+ "operationId": "list_repos_repos__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "Page number",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "Page number"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "maximum": 50,
+ "minimum": 1,
+ "description": "Number of repos per page",
+ "default": 15,
+ "title": "Per Page"
+ },
+ "description": "Number of repos per page"
+ },
+ {
+ "name": "name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter by repo name (exact match). This is ignored if repo_id is provided. Returns empty list if no match.",
+ "title": "Name"
+ },
+ "description": "Filter by repo name (exact match). This is ignored if repo_id is provided. Returns empty list if no match."
+ },
+ {
+ "name": "provider",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "enum": [
+ "github",
+ "gitlab",
+ "bitbucket",
+ "azure-devops",
+ "circleci"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter by VCS provider (e.g. github, gitlab, bitbucket, azure-devops, circleci).",
+ "title": "Provider"
+ },
+ "description": "Filter by VCS provider (e.g. github, gitlab, bitbucket, azure-devops, circleci)."
+ },
+ {
+ "name": "repo_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter by external repo ID (exact match). Returns empty list if no match.",
+ "title": "Repo Id"
+ },
+ "description": "Filter by external repo ID (exact match). Returns empty list if no match."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RepoListResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Resource Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__36"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/repos/{org}/live-artifacts/{repo_name}": {
+ "get": {
+ "tags": [
+ "Repos"
+ ],
+ "summary": "Get live artifacts for a repo",
+ "description": "Get the live status of artifacts from a repository across all environments.\n\nReturns a `RepoLiveStatusResponse` object that includes:\n- `_embedded.environments`: environments that currently have running artifacts from this repo\n- `_embedded.artifacts`: the corresponding artifacts for those environments\n- `live_artifacts`: a flattened view of currently running artifacts, including each artifact's\n compliance status, fingerprint, commit SHA, and start timestamp.\n\nIf multiple repos share the same name across different VCS providers, use the `provider`\nparameter to disambiguate. Without it, the most recently created matching repo is returned.",
+ "operationId": "get_repo_live_artifacts_repos__org__live_artifacts__repo_name__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "repo_name",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Repo Name"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "provider",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "enum": [
+ "github",
+ "gitlab",
+ "bitbucket",
+ "azure-devops",
+ "circleci"
+ ],
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "VCS provider (e.g. github, gitlab, bitbucket, azure-devops, circleci). Required when multiple repos share the same name across providers.",
+ "title": "Provider"
+ },
+ "description": "VCS provider (e.g. github, gitlab, bitbucket, azure-devops, circleci). Required when multiple repos share the same name across providers."
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/RepoLiveStatusResponse"
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Resource Not Found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__37"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/actions/{org}/{action_number}": {
+ "get": {
+ "tags": [
+ "Actions"
+ ],
+ "summary": "Get action",
+ "description": "Get a specific action for an org.",
+ "operationId": "get_action_actions__org___action_number__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "action_number",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "Action Number"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ActionResponse"
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "Actions"
+ ],
+ "summary": "Delete an action",
+ "description": "Delete a specific action for an org.",
+ "operationId": "delete_action_actions__org___action_number__delete",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "action_number",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer",
+ "title": "Action Number"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Action deleted successfully",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/actions/{org}": {
+ "get": {
+ "tags": [
+ "Actions"
+ ],
+ "summary": "List actions",
+ "description": "List actions for an org.",
+ "operationId": "list_actions_actions__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ActionResponse"
+ },
+ "title": "Response 200 List Actions Actions Org Get"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/actions/{org}/environments": {
+ "put": {
+ "tags": [
+ "Actions"
+ ],
+ "summary": "Create or update environment action",
+ "description": "Create or Update an environment action for an org.",
+ "operationId": "create_or_update_env_action_actions__org__environments_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EnvActionPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "200": {
+ "description": "Update Success"
+ },
+ "400": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__13"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/actions/{org}/flows": {
+ "put": {
+ "tags": [
+ "Actions"
+ ],
+ "summary": "Create or update flow action",
+ "description": "Create or Update a flow action for an org.",
+ "operationId": "create_or_update_flow_action_actions__org__flows_put",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/FlowActionPutInput"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Creation Success",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ },
+ "200": {
+ "description": "Update Success"
+ },
+ "400": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__14"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/builds/{org}": {
+ "get": {
+ "tags": [
+ "Builds"
+ ],
+ "summary": "List Builds",
+ "description": "List builds for an organization.\n\n- end-ts defaults to now.\n- start-ts defaults to 28 days before end-ts.",
+ "operationId": "list_builds_builds__org__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "minimum": 1,
+ "description": "Page number",
+ "default": 1,
+ "title": "Page"
+ },
+ "description": "Page number"
+ },
+ {
+ "name": "per_page",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "integer",
+ "maximum": 50,
+ "minimum": 0,
+ "description": "Number of builds per page",
+ "default": 15,
+ "title": "Per Page"
+ },
+ "description": "Number of builds per page"
+ },
+ {
+ "name": "repo_id",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter by external VCS repo ID",
+ "title": "Repo Id"
+ },
+ "description": "Filter by external VCS repo ID"
+ },
+ {
+ "name": "repo_name",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Filter by repo name (e.g. 'cyber-dojo/differ')",
+ "title": "Repo Name"
+ },
+ "description": "Filter by repo name (e.g. 'cyber-dojo/differ')"
+ },
+ {
+ "name": "start-ts",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Include builds created at or after this timestamp. Defaults to 28 days before end-ts",
+ "title": "Start-Ts"
+ },
+ "description": "Include builds created at or after this timestamp. Defaults to 28 days before end-ts"
+ },
+ {
+ "name": "end-ts",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Include builds created at or before this timestamp. Defaults to now",
+ "title": "End-Ts"
+ },
+ "description": "Include builds created at or before this timestamp. Defaults to now"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BuildListResponse"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/search/{org}/sha/{search_value}": {
+ "get": {
+ "tags": [
+ "Search"
+ ],
+ "summary": "Search artifacts by SHA or fingerprint",
+ "description": "Get artifacts that match fingerprint or commit-sha.",
+ "operationId": "get_search_search__org__sha__search_value__get",
+ "security": [
+ {
+ "HTTPBearer": []
+ },
+ {
+ "HTTPBasic": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "search_value",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Search Value"
+ }
+ },
+ {
+ "name": "org",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Org"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Artifacts matching the search value.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SearchResultGetResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Invalid input: non-hex characters or value too short."
+ },
+ "404": {
+ "description": "Search results are too ambiguous. For example: no matches for the provided value.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__38"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/webhooks/launch-darkly/{hook_uid}": {
+ "post": {
+ "tags": [
+ "Webhooks"
+ ],
+ "summary": "Launch Darkly Webhook",
+ "description": "Receive and process LaunchDarkly webhook events.",
+ "operationId": "launch_darkly_webhook_webhooks_launch_darkly__hook_uid__post",
+ "parameters": [
+ {
+ "name": "hook_uid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Hook Uid"
+ }
+ },
+ {
+ "name": "x-ld-signature",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Ld-Signature"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "additionalProperties": true,
+ "title": "Payload"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ },
+ "/webhooks/sonar/{hook_uid}": {
+ "post": {
+ "tags": [
+ "Webhooks"
+ ],
+ "summary": "Sonar Qube Webhook",
+ "description": "Receive and process sonar qube webhook events.",
+ "operationId": "sonar_qube_webhook_webhooks_sonar__hook_uid__post",
+ "parameters": [
+ {
+ "name": "hook_uid",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "title": "Hook Uid"
+ }
+ },
+ {
+ "name": "X-Sonar-Webhook-HMAC-SHA256",
+ "in": "header",
+ "required": false,
+ "schema": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "X-Sonar-Webhook-Hmac-Sha256"
+ }
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "additionalProperties": true,
+ "title": "Payload"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+ "schema": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "ActionResponse": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "The name of the action"
+ },
+ "type": {
+ "type": "string",
+ "title": "Type",
+ "description": "The type of the action"
+ },
+ "number": {
+ "type": "integer",
+ "title": "Number",
+ "description": "The ID number of the action"
+ },
+ "targets": {
+ "items": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "type": "array",
+ "title": "Targets",
+ "description": "The targets of the action"
+ },
+ "triggers": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Triggers",
+ "description": "The triggers of the action"
+ },
+ "created_by": {
+ "type": "string",
+ "title": "Created By",
+ "description": "The user who created the action"
+ },
+ "is_created_from_slack_app": {
+ "type": "boolean",
+ "title": "Is Created From Slack App",
+ "description": "Whether or not the action was created from a slack app"
+ },
+ "is_failing": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Failing",
+ "description": "Whether the action is currently failing to send notifications or not"
+ },
+ "last_success_timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success Timestamp",
+ "description": "The last timestamp when the action successfully sent a notification"
+ },
+ "last_failure_timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure Timestamp",
+ "description": "The last timestamp when the action failed to send notification"
+ },
+ "created_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Created At",
+ "description": "The time the action was created"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At",
+ "description": "The time the action was last modified"
+ },
+ "flows": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Flows",
+ "description": "The flows the action is for"
+ },
+ "environments": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Environments",
+ "description": "The environments the action is for"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "type",
+ "number",
+ "targets",
+ "triggers",
+ "created_by",
+ "is_created_from_slack_app",
+ "last_modified_at"
+ ],
+ "title": "ActionResponse"
+ },
+ "AllowlistInformation": {
+ "properties": {
+ "allowlist_id": {
+ "type": "string",
+ "title": "Allowlist Id"
+ },
+ "allowed_by_user_id": {
+ "type": "string",
+ "title": "Allowed By User Id"
+ },
+ "timestamp": {
+ "type": "number",
+ "title": "Timestamp"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ }
+ },
+ "type": "object",
+ "required": [
+ "allowlist_id",
+ "allowed_by_user_id",
+ "timestamp",
+ "description"
+ ],
+ "title": "AllowlistInformation",
+ "description": "represents information about the allowlisting of an artifact"
+ },
+ "AllowlistPutInput": {
+ "properties": {
+ "artifact_name": {
+ "type": "string",
+ "title": "Artifact Name",
+ "description": "The name of the artifact that is allowed"
+ },
+ "artifact_fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Artifact Fingerprint",
+ "description": "The sha256 fingerprint of the artifact that is allowed"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "The reason for allow listing this artifact"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifact_name",
+ "artifact_fingerprint",
+ "description"
+ ],
+ "title": "AllowlistPutInput",
+ "description": "Input model for an allowlist record",
+ "examples": [
+ {
+ "artifact_fingerprint": "fffd6d98c2da601a514797f0db9cc380ffe29a4312bebec5430d6fcb31d5bf4c",
+ "artifact_name": "linus-git",
+ "description": "Allowlist for linus-git"
+ }
+ ]
+ },
+ "AllowlistResponse": {
+ "properties": {
+ "artifact_name": {
+ "type": "string",
+ "title": "Artifact Name",
+ "description": "the name of the artifact that is allowed"
+ },
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint",
+ "description": "the sha256 fingerprint of the artifact that is allowed"
+ },
+ "environment_name": {
+ "type": "string",
+ "title": "Environment Name",
+ "description": "the name of the environment for which the artifact is allowed"
+ },
+ "timestamp": {
+ "type": "number",
+ "title": "Timestamp",
+ "description": "the timestamp when the artifact was allowed"
+ },
+ "user_name": {
+ "type": "string",
+ "title": "User Name",
+ "description": "the name of the user who allowed the artifact"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "the reason for allow listing this artifact"
+ }
+ },
+ "type": "object",
+ "required": [
+ "artifact_name",
+ "fingerprint",
+ "environment_name",
+ "timestamp",
+ "user_name",
+ "description"
+ ],
+ "title": "AllowlistResponse",
+ "description": "Response model for an allowlist record",
+ "examples": [
+ {
+ "artifact_name": "linus-git",
+ "description": "Allowlist for linus-git",
+ "environment_name": "production",
+ "fingerprint": "fffd6d98c2da601a514797f0db9cc380ffe29a4312bebec5430d6fcb31d5bf4c",
+ "timestamp": 1633123456.0,
+ "user_name": "John Doe"
+ }
+ ]
+ },
+ "Approval": {
+ "properties": {
+ "state": {
+ "type": "string",
+ "enum": [
+ "APPROVED",
+ "UNAPPROVED"
+ ],
+ "title": "State"
+ },
+ "comment": {
+ "type": "string",
+ "title": "Comment",
+ "description": "Comment for approval"
+ },
+ "approved_by": {
+ "type": "string",
+ "title": "Approved By",
+ "description": "The user who approved it"
+ },
+ "approval_url": {
+ "type": "string",
+ "title": "Approval Url",
+ "description": "URL to the source of the approval"
+ }
+ },
+ "type": "object",
+ "required": [
+ "state",
+ "comment",
+ "approved_by",
+ "approval_url"
+ ],
+ "title": "Approval"
+ },
+ "ApprovalPostInput": {
+ "properties": {
+ "artifact_fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Artifact Fingerprint",
+ "description": "The sha256 fingerprint of the artifact that is approved"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "Description for the approval"
+ },
+ "environment": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Environment",
+ "description": "Environment the approval is valid for"
+ },
+ "src_commit_list": {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ "type": "array",
+ "title": "Src Commit List"
+ },
+ "oldest_commit": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Oldest Commit",
+ "description": "The oldest commit"
+ },
+ "approvals": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/Approval"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Approvals",
+ "description": "List of approvals"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifact_fingerprint",
+ "description",
+ "src_commit_list"
+ ],
+ "title": "ApprovalPostInput",
+ "description": "Create approval for an artifact.",
+ "examples": [
+ {
+ "approvals": [
+ {
+ "approval_url": "https://example.com",
+ "approved_by": "bob",
+ "comment": "I like this",
+ "state": "APPROVED"
+ }
+ ],
+ "artifact_fingerprint": "73d75bf7cac2f24845deeb51e05babd2514e91eb4fdd2352fbc2fcf267ff21fb",
+ "description": "Approved since it is good",
+ "environment": "production",
+ "oldest_commit": "7e8a2cc65e4679bb7bea3605f9245f2214aad585",
+ "src_commit_list": [
+ "602ed54b6dec955d348201fa411faa3f92dc8bc7",
+ "af2705a9da720cbf1b166c668d5ed17fa371af0d"
+ ]
+ }
+ ]
+ },
+ "ApprovalResponse": {
+ "properties": {
+ "release_number": {
+ "type": "integer",
+ "title": "Release Number",
+ "description": "The approval number"
+ },
+ "base_artifact": {
+ "type": "string",
+ "title": "Base Artifact",
+ "description": "The base artifact fingerprint"
+ },
+ "artifact_name": {
+ "type": "string",
+ "title": "Artifact Name",
+ "description": "The name/identifier of the artifact"
+ },
+ "target_artifact": {
+ "type": "string",
+ "title": "Target Artifact",
+ "description": "The target artifact fingerprint"
+ },
+ "environment": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Environment",
+ "description": "Environment the approval is valid for"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "Description for the approval"
+ },
+ "src_commit_list": {
+ "items": {
+ "$ref": "#/components/schemas/CommitInfo"
+ },
+ "type": "array",
+ "title": "Src Commit List",
+ "description": "List of commits with their artifact fingerprints"
+ },
+ "created_at": {
+ "type": "number",
+ "title": "Created At",
+ "description": "Timestamp when the approval was created"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At",
+ "description": "Timestamp when the approval was last modified"
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "APPROVED",
+ "UNAPPROVED",
+ "PENDING"
+ ],
+ "title": "State",
+ "description": "Overall approval state"
+ },
+ "approvals": {
+ "items": {
+ "$ref": "#/components/schemas/ApprovalWithTimestamp"
+ },
+ "type": "array",
+ "title": "Approvals",
+ "description": "List of individual approvals"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data",
+ "description": "Additional user data"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "release_number",
+ "base_artifact",
+ "artifact_name",
+ "target_artifact",
+ "description",
+ "src_commit_list",
+ "created_at",
+ "last_modified_at",
+ "state",
+ "approvals"
+ ],
+ "title": "ApprovalResponse",
+ "description": "Get approval response.",
+ "examples": [
+ {
+ "approvals": [
+ {
+ "approval_url": "undefined",
+ "approved_by": "external://External",
+ "comment": "",
+ "state": "APPROVED",
+ "timestamp": 1756281574.9707942
+ }
+ ],
+ "artifact_name": "a.really.long/name/mimicing/docker@sha256:0fcd25440a99c80ac8df15ca3c5df095a791e7b01fbcb2ac60e9994f1c1e8f4d",
+ "base_artifact": "5e2ec37f5b16b662e197a7de71173aac545437f5dab6d0ce452f71dd472a77b2",
+ "created_at": 1756281574.9707942,
+ "description": "",
+ "environment": "staging",
+ "last_modified_at": 1756281574.9707942,
+ "release_number": 1,
+ "src_commit_list": [
+ {
+ "artifact_fingerprints": [
+ "37bb572099c4e464b18ad5262620f2ebb257db68bd076dd28d2de4a5905a875e",
+ "b82d50a10366965e923fb348c684d8fc7dfa65c104b594ba5613df1efe012c30"
+ ],
+ "commit_sha": "8a0075843a3f94226938bb87c81785c2be0e9d48"
+ }
+ ],
+ "state": "APPROVED",
+ "target_artifact": "5e2ec37f5b16b662e197a7de71173aac545437f5dab6d0ce452f71dd472a77b2",
+ "user_data": {}
+ }
+ ]
+ },
+ "ApprovalResponseSHA1": {
+ "properties": {
+ "release_number": {
+ "type": "integer",
+ "title": "Release Number",
+ "description": "The approval number"
+ },
+ "base_artifact": {
+ "type": "string",
+ "title": "Base Artifact",
+ "description": "The base artifact fingerprint"
+ },
+ "artifact_name": {
+ "type": "string",
+ "title": "Artifact Name",
+ "description": "The name/identifier of the artifact"
+ },
+ "target_artifact": {
+ "type": "string",
+ "title": "Target Artifact",
+ "description": "The target artifact fingerprint"
+ },
+ "environment": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Environment",
+ "description": "Environment the approval is valid for"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "Description for the approval"
+ },
+ "src_commit_list": {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ "type": "array",
+ "title": "Src Commit List",
+ "description": "List of commits with their artifact fingerprints"
+ },
+ "created_at": {
+ "type": "number",
+ "title": "Created At",
+ "description": "Timestamp when the approval was created"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At",
+ "description": "Timestamp when the approval was last modified"
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "APPROVED",
+ "UNAPPROVED",
+ "PENDING"
+ ],
+ "title": "State",
+ "description": "Overall approval state"
+ },
+ "approvals": {
+ "items": {
+ "$ref": "#/components/schemas/ApprovalWithTimestamp"
+ },
+ "type": "array",
+ "title": "Approvals",
+ "description": "List of individual approvals"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data",
+ "description": "Additional user data"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "release_number",
+ "base_artifact",
+ "artifact_name",
+ "target_artifact",
+ "description",
+ "src_commit_list",
+ "created_at",
+ "last_modified_at",
+ "state",
+ "approvals"
+ ],
+ "title": "ApprovalResponseSHA1",
+ "description": "Get approval list response.",
+ "examples": [
+ {
+ "approvals": [
+ {
+ "approval_url": "undefined",
+ "approved_by": "external://External",
+ "comment": "",
+ "state": "APPROVED",
+ "timestamp": 1756281574.9707942
+ }
+ ],
+ "artifact_name": "a.really.long/name/mimicing/docker@sha256:0fcd25440a99c80ac8df15ca3c5df095a791e7b01fbcb2ac60e9994f1c1e8f4d",
+ "base_artifact": "5e2ec37f5b16b662e197a7de71173aac545437f5dab6d0ce452f71dd472a77b2",
+ "created_at": 1756281574.9707942,
+ "description": "",
+ "environment": "staging",
+ "last_modified_at": 1756281574.9707942,
+ "release_number": 1,
+ "src_commit_list": [
+ "2d04c96662d0190af44f1cba91d3c6028d8392bc",
+ "e412ad6f7ea530ee9b83df964a0dde2b477be729"
+ ],
+ "state": "APPROVED",
+ "target_artifact": "5e2ec37f5b16b662e197a7de71173aac545437f5dab6d0ce452f71dd472a77b2",
+ "user_data": {}
+ }
+ ]
+ },
+ "ApprovalWithTimestamp": {
+ "properties": {
+ "state": {
+ "type": "string",
+ "enum": [
+ "APPROVED",
+ "UNAPPROVED"
+ ],
+ "title": "State"
+ },
+ "comment": {
+ "type": "string",
+ "title": "Comment",
+ "description": "Comment for approval"
+ },
+ "approved_by": {
+ "type": "string",
+ "title": "Approved By",
+ "description": "The user who approved it"
+ },
+ "approval_url": {
+ "type": "string",
+ "title": "Approval Url",
+ "description": "URL to the source of the approval"
+ },
+ "timestamp": {
+ "type": "number",
+ "title": "Timestamp",
+ "description": "Unix timestamp of the approval"
+ }
+ },
+ "type": "object",
+ "required": [
+ "state",
+ "comment",
+ "approved_by",
+ "approval_url",
+ "timestamp"
+ ],
+ "title": "ApprovalWithTimestamp"
+ },
+ "ArtifactComplianceResultResponse": {
+ "properties": {
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "status": {
+ "type": "string",
+ "title": "Status",
+ "default": ""
+ },
+ "is_compliant": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Compliant"
+ },
+ "attestations_statuses": {
+ "items": {
+ "$ref": "#/components/schemas/AttestationComplianceStatusResponse"
+ },
+ "type": "array",
+ "title": "Attestations Statuses"
+ },
+ "evaluated_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Evaluated At"
+ },
+ "unexpected": {
+ "type": "boolean",
+ "title": "Unexpected"
+ }
+ },
+ "type": "object",
+ "required": [
+ "unexpected"
+ ],
+ "title": "ArtifactComplianceResultResponse"
+ },
+ "ArtifactComplianceStatus": {
+ "properties": {
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint",
+ "description": "SHA-256 fingerprint of the artifact"
+ },
+ "artifact_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Id",
+ "description": "ID of the artifact"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "MISSING",
+ "INCOMPLETE",
+ "COMPLIANT",
+ "NON-COMPLIANT"
+ ],
+ "title": "Status",
+ "description": "Compliance status of the artifact"
+ },
+ "is_compliant": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Compliant",
+ "description": "Whether the artifact is compliant"
+ },
+ "attestations_statuses": {
+ "items": {
+ "$ref": "#/components/schemas/AttestationComplianceStatus"
+ },
+ "type": "array",
+ "title": "Attestations Statuses",
+ "description": "Compliance statuses of attestations"
+ },
+ "unexpected": {
+ "type": "boolean",
+ "title": "Unexpected",
+ "description": "Whether the artifact was unexpected",
+ "default": false
+ },
+ "evaluated_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Evaluated At",
+ "description": "Timestamp when compliance was evaluated"
+ },
+ "flow_template_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Flow Template Id",
+ "description": "ID of the flow template used for evaluation"
+ }
+ },
+ "type": "object",
+ "required": [
+ "status"
+ ],
+ "title": "ArtifactComplianceStatus",
+ "description": "Artifact compliance status within a trail."
+ },
+ "ArtifactEvidence": {
+ "properties": {
+ "evidence_type": {
+ "type": "string",
+ "title": "Evidence Type"
+ },
+ "is_compliant": {
+ "type": "boolean",
+ "title": "Is Compliant"
+ },
+ "build_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Build Url"
+ },
+ "evidence_archive_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Evidence Archive Fingerprint"
+ },
+ "user_data": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "created_at": {
+ "type": "string",
+ "title": "Created At"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "has_audit_package": {
+ "type": "boolean",
+ "title": "Has Audit Package"
+ },
+ "evidence_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Evidence Url"
+ },
+ "evidence_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Evidence Fingerprint"
+ },
+ "commit_sha": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Sha"
+ },
+ "snyk_results": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Snyk Results"
+ },
+ "junit_results": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Junit Results"
+ },
+ "jira_results": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Jira Results"
+ },
+ "git_provider": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Git Provider"
+ },
+ "pull_requests": {
+ "anyOf": [
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pull Requests"
+ }
+ },
+ "type": "object",
+ "required": [
+ "evidence_type",
+ "is_compliant",
+ "created_at",
+ "has_audit_package"
+ ],
+ "title": "ArtifactEvidence"
+ },
+ "ArtifactInfo": {
+ "properties": {
+ "fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "string",
+ "const": ""
+ }
+ ],
+ "title": "Fingerprint"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "most_recent_timestamp": {
+ "type": "integer",
+ "title": "Most Recent Timestamp"
+ },
+ "flow": {
+ "type": "string",
+ "title": "Flow"
+ },
+ "commit_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Url"
+ },
+ "instance_count": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Instance Count"
+ },
+ "s1_instance_count": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "S1 Instance Count"
+ },
+ "s2_instance_count": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "S2 Instance Count"
+ },
+ "pods": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pods"
+ }
+ },
+ "type": "object",
+ "required": [
+ "fingerprint",
+ "name",
+ "most_recent_timestamp",
+ "flow"
+ ],
+ "title": "ArtifactInfo"
+ },
+ "ArtifactListItemResponse": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Id"
+ },
+ "trail_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_.~]*$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trail Name"
+ },
+ "template_reference_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_]+$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template Reference Name"
+ },
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ },
+ "filename": {
+ "type": "string",
+ "title": "Filename"
+ },
+ "git_commit": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Git Commit"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoResponse"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "commit_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Url"
+ },
+ "build_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Build Url"
+ },
+ "repo_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Repo Url"
+ },
+ "html_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Html Url"
+ },
+ "api_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Api Url"
+ },
+ "created_at": {
+ "type": "string",
+ "title": "Created At"
+ },
+ "last_modified_at": {
+ "type": "string",
+ "title": "Last Modified At"
+ },
+ "user_data": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "state": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "COMPLIANT",
+ "NON-COMPLIANT",
+ "INCOMPLETE"
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "State"
+ },
+ "deployments": {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array",
+ "title": "Deployments",
+ "default": []
+ },
+ "evidence": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ArtifactEvidence"
+ },
+ "type": "object",
+ "title": "Evidence"
+ },
+ "releases": {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array",
+ "title": "Releases",
+ "default": []
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "fingerprint",
+ "filename",
+ "created_at",
+ "last_modified_at",
+ "evidence"
+ ],
+ "title": "ArtifactListItemResponse"
+ },
+ "ArtifactResponse": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Id"
+ },
+ "trail_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_.~]*$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trail Name"
+ },
+ "template_reference_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_]+$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template Reference Name"
+ },
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ },
+ "filename": {
+ "type": "string",
+ "title": "Filename"
+ },
+ "git_commit": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Git Commit"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoResponse"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "commit_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Url"
+ },
+ "build_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Build Url"
+ },
+ "repo_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Repo Url"
+ },
+ "html_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Html Url"
+ },
+ "api_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Api Url"
+ },
+ "created_at": {
+ "type": "string",
+ "title": "Created At"
+ },
+ "last_modified_at": {
+ "type": "string",
+ "title": "Last Modified At"
+ },
+ "user_data": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "state": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "COMPLIANT",
+ "NON-COMPLIANT",
+ "INCOMPLETE"
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "State"
+ },
+ "deployments": {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array",
+ "title": "Deployments",
+ "default": []
+ },
+ "evidence": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ArtifactEvidence"
+ },
+ "type": "object",
+ "title": "Evidence"
+ },
+ "template": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template"
+ },
+ "flow_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow Name"
+ },
+ "state_info": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "State Info"
+ },
+ "approvals": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Approvals"
+ },
+ "running": {
+ "anyOf": [
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Running"
+ },
+ "exited": {
+ "anyOf": [
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Exited"
+ },
+ "history": {
+ "anyOf": [
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "History"
+ },
+ "commit_lead_times": {
+ "additionalProperties": true,
+ "type": "object",
+ "title": "Commit Lead Times"
+ },
+ "build_lead_times": {
+ "additionalProperties": true,
+ "type": "object",
+ "title": "Build Lead Times"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "fingerprint",
+ "filename",
+ "created_at",
+ "last_modified_at",
+ "evidence",
+ "flow_name",
+ "commit_lead_times",
+ "build_lead_times"
+ ],
+ "title": "ArtifactResponse"
+ },
+ "AssertArtifactFlowResponse": {
+ "properties": {
+ "flow": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow",
+ "description": "The flow name of the artifact."
+ },
+ "trail": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_.~]*$",
+ "title": "Trail",
+ "description": "The trail name of the artifact."
+ },
+ "compliant": {
+ "type": "boolean",
+ "title": "Compliant",
+ "description": "Whether the the artifact is compliant in the trail"
+ },
+ "compliance_status": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ArtifactComplianceResultResponse"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The compliance status of the artifact."
+ },
+ "html_url": {
+ "type": "string",
+ "title": "Html Url",
+ "description": "URL to view the artifact details in the web UI"
+ }
+ },
+ "type": "object",
+ "required": [
+ "flow",
+ "trail",
+ "compliant",
+ "compliance_status",
+ "html_url"
+ ],
+ "title": "AssertArtifactFlowResponse"
+ },
+ "AssertArtifactResponse": {
+ "properties": {
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint",
+ "description": "Artifact fingerprint."
+ },
+ "flow": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Flow",
+ "description": "The flow name of the artifact."
+ },
+ "trail": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_.~]*$",
+ "title": "Trail",
+ "description": "The trail name of the artifact."
+ },
+ "compliant": {
+ "type": "boolean",
+ "title": "Compliant",
+ "description": "Whether the artifact complies with the defined policies for an environment, Or the artifact is compliant in the trail"
+ },
+ "compliance_status": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ArtifactComplianceResultResponse"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The compliance status of the artifact."
+ },
+ "html_url": {
+ "type": "string",
+ "title": "Html Url",
+ "description": "URL to view the artifact details in the web UI"
+ },
+ "flows": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/AssertArtifactFlowResponse"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The flows associated with the artifact."
+ },
+ "scope": {
+ "type": "string",
+ "enum": [
+ "flow",
+ "environment",
+ "policy"
+ ],
+ "title": "Scope",
+ "description": "The scope of the assertion (flow-level, environment-level or policy-level)"
+ },
+ "environment": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Environment",
+ "description": "The name of the environment (only present when scope is 'environment')"
+ },
+ "policy_evaluations": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/PolicyEvaluationResponse"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Policy Evaluations",
+ "description": "List of policy evaluation results (only present when scope is 'environment')"
+ },
+ "allow_listing": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/AllowlistInformation"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Allowlisting information if the artifact is allowlisted (only present when scope is 'environment')"
+ }
+ },
+ "type": "object",
+ "required": [
+ "fingerprint",
+ "flow",
+ "trail",
+ "compliant",
+ "compliance_status",
+ "html_url",
+ "scope"
+ ],
+ "title": "AssertArtifactResponse",
+ "description": "Response model for assertion results.\n\nRepresents compliance status of an artifact within a flow or environment scope.",
+ "examples": [
+ {
+ "compliance_status": {
+ "artifact_fingerprint": "19daf927d2e8709673b9948316b37bd52435434ad5c16d8bbec7dbcb287325c5",
+ "attestations_statuses": [
+ {
+ "attestation_name": "approval",
+ "attestation_type": "generic",
+ "expected": false,
+ "is_compliant": true,
+ "status": "COMPLETE"
+ }
+ ],
+ "evaluated_at": 1758259675.0286536,
+ "expected": false,
+ "is_compliant": true,
+ "status": "COMPLIANT"
+ },
+ "compliant": true,
+ "fingerprint": "19daf927d2e8709673b9948316b37bd52435434ad5c16d8bbec7dbcb287325c5",
+ "flow": "my-flow-name",
+ "html_url": "https://app.kosli.com/acme-org/flows/acme-flow/artifacts/089eeef9ef2ba07f142d93bb172eab3f23586b4cb40af75175ce140ab9a88c9a",
+ "scope": "flow",
+ "trail": "my-trail-name"
+ },
+ {
+ "compliance_status": {
+ "artifact_fingerprint": "e41a0b51a083b3a692e3cf7588b9eb0d83913f292a226ee2e5b4a7ecf06cdbf7",
+ "attestations_statuses": [
+ {
+ "attestation_name": "junit",
+ "attestation_type": "*",
+ "expected": true,
+ "status": "MISSING"
+ }
+ ],
+ "evaluated_at": 1759224787.307779,
+ "expected": true,
+ "is_compliant": false,
+ "status": "INCOMPLETE"
+ },
+ "compliant": false,
+ "environment": "policy-env",
+ "fingerprint": "e41a0b51a083b3a692e3cf7588b9eb0d83913f292a226ee2e5b4a7ecf06cdbf7",
+ "flow": "v1-flow",
+ "html_url": "http://app.kosli.com/use-cases/flows/v1-flow/artifacts/e41a0b51a083b3a692e3cf7588b9eb0d83913f292a226ee2e5b4a7ecf06cdbf7?artifact_id=76a80a75-d5c6-4a00-a8f9-7e3449dd",
+ "policy_evaluations": [
+ {
+ "policy_name": "attestation-policy",
+ "policy_version": 1,
+ "rule_evaluations": [
+ {
+ "ignored": false,
+ "resolutions": [
+ {
+ "context": {
+ "flow_name": "v1-flow",
+ "trail_name": "21fad3d3c2929a5b0d99e734f41298c5f2a91dd1"
+ },
+ "type": "rule_satisfied"
+ }
+ ],
+ "rule": {
+ "definition": {
+ "exceptions": [],
+ "required": true
+ },
+ "type": "provenance"
+ },
+ "satisfied": true
+ },
+ {
+ "ignored": false,
+ "resolutions": [
+ {
+ "context": {
+ "artifact_status": "INCOMPLETE",
+ "flow_name": "v1-flow",
+ "trail_name": "21fad3d3c2929a5b0d99e734f41298c5f2a91dd1"
+ },
+ "type": "non_compliant_in_trail"
+ }
+ ],
+ "rule": {
+ "definition": {
+ "exceptions": [],
+ "required": true
+ },
+ "type": "trail-compliance"
+ },
+ "satisfied": false
+ },
+ {
+ "ignored": false,
+ "resolutions": [
+ {
+ "context": {
+ "flow_name": "v1-flow",
+ "trail_name": "21fad3d3c2929a5b0d99e734f41298c5f2a91dd1"
+ },
+ "type": "missing_attestation"
+ }
+ ],
+ "rule": {
+ "definition": {
+ "must_be_compliant": true,
+ "name": "*",
+ "type": "snyk"
+ },
+ "type": "attestation"
+ },
+ "satisfied": false
+ },
+ {
+ "ignored": false,
+ "resolutions": [
+ {
+ "context": {
+ "flow_name": "v1-flow",
+ "trail_name": "21fad3d3c2929a5b0d99e734f41298c5f2a91dd1"
+ },
+ "type": "missing_attestation"
+ }
+ ],
+ "rule": {
+ "definition": {
+ "must_be_compliant": true,
+ "name": "unit-tests",
+ "type": "*"
+ },
+ "type": "attestation"
+ },
+ "satisfied": false
+ },
+ {
+ "ignored": false,
+ "resolutions": [
+ {
+ "context": {
+ "flow_name": "v1-flow",
+ "trail_name": "21fad3d3c2929a5b0d99e734f41298c5f2a91dd1"
+ },
+ "type": "missing_attestation"
+ }
+ ],
+ "rule": {
+ "definition": {
+ "must_be_compliant": true,
+ "name": "person",
+ "type": "custom:typed-person-with-evaluation"
+ },
+ "type": "attestation"
+ },
+ "satisfied": false
+ }
+ ],
+ "status": "NON-COMPLIANT"
+ }
+ ],
+ "scope": "environment",
+ "trail": "21fad3d3c2929a5b0d99e734f41298c5f2a91dd1"
+ }
+ ]
+ },
+ "AttachPoliciesPutInput": {
+ "properties": {
+ "policy_names": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Policy Names",
+ "description": "List of policy names to attach/detach"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "policy_names"
+ ],
+ "title": "AttachPoliciesPutInput"
+ },
+ "AttestationComplianceStatus": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "title": "Attestation Name",
+ "description": "Name of the attestation"
+ },
+ "attestation_type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attestation Type",
+ "description": "Type of the attestation"
+ },
+ "attestation_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attestation Id",
+ "description": "ID of the attestation"
+ },
+ "overridden_attestation_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Overridden Attestation Id",
+ "description": "ID of the override attestation if overridden"
+ },
+ "status": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "MISSING",
+ "COMPLETE"
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Status",
+ "description": "Status of the attestation"
+ },
+ "is_compliant": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Compliant",
+ "description": "Whether the attestation is compliant"
+ },
+ "unexpected": {
+ "type": "boolean",
+ "title": "Unexpected",
+ "description": "Whether the attestation was unexpected",
+ "default": false
+ }
+ },
+ "type": "object",
+ "required": [
+ "attestation_name"
+ ],
+ "title": "AttestationComplianceStatus",
+ "description": "Attestation compliance status in a trail."
+ },
+ "AttestationComplianceStatusResponse": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "title": "Attestation Name"
+ },
+ "attestation_type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attestation Type"
+ },
+ "status": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Status"
+ },
+ "is_compliant": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Compliant"
+ },
+ "unexpected": {
+ "type": "boolean",
+ "title": "Unexpected"
+ }
+ },
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "unexpected"
+ ],
+ "title": "AttestationComplianceStatusResponse"
+ },
+ "AttestationResponse": {
+ "items": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "type": "array",
+ "title": "AttestationResponse",
+ "examples": [
+ [
+ {
+ "attestation_id": "1234567890",
+ "attestation_name": "generic-evidence",
+ "attestation_type": "generic",
+ "created_at": 1754551048.2005377,
+ "description": "generic attestation",
+ "has_audit_package": false,
+ "html_url": "http://localhost/b2cebc00v2-shared/flows/flow.b2cebc00-template/trails/trail-b2cebc00?attestation_id=cd5b2c7f-8e4d-45a4-949c-8a71cbdb",
+ "is_compliant": true,
+ "origin_url": "https://github.com/merkely-development/merkely/actions/runs/1049309666",
+ "reported_by": "b2cebc00v2",
+ "schema_version": 1,
+ "user_data": {
+ "foo.bar": "this should work"
+ }
+ }
+ ]
+ ]
+ },
+ "AttestationsListForCommitsResponse": {
+ "patternProperties": {
+ "^[a-f0-9]{40}$": {
+ "items": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object",
+ "title": "AttestationsListForCommitsResponse",
+ "description": "Response model for listing attestations by commit.\n\nThis model represents a dictionary mapping commit SHAs to lists of attestations.\nEach attestation can be of different types (generic, junit, snyk, pull_request, jira, sonar, custom).",
+ "examples": [
+ {
+ "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6": [
+ {
+ "annotations": {
+ "key": "value"
+ },
+ "artifact_fingerprint": "089eeef9ef2ba07f142d93bb172eab3f23586b4cb40af75175ce140ab9a88c9a",
+ "attestation_id": "1234567890",
+ "attestation_name": "manual-test",
+ "attestation_type": "generic",
+ "created_at": 1750923680.0,
+ "description": "this is a glorious attestation",
+ "evidence_archive_fingerprint": "960421eb617fc0ff3183cdc406f4bbc6340f10bc12ac2a83cb9a203dc3be3fc1",
+ "evidence_archive_path": "/path/to/evidence.tar.gz",
+ "external_urls": {
+ "github": "https://github.com/org/repo/actions/123"
+ },
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "has_audit_package": true,
+ "html_url": "https://app.kosli.com/org/flow/trail/attestation",
+ "is_compliant": true,
+ "origin_url": "https://github.com/actions/123",
+ "reported_by": "Jon Smith",
+ "target_artifacts": [
+ "backend"
+ ],
+ "user_data": {
+ "test_result": "passed"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "AttestationsPaginatedResponse": {
+ "properties": {
+ "data": {
+ "$ref": "#/components/schemas/AttestationResponse"
+ },
+ "pagination": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PaginationInfo"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "required": [
+ "data"
+ ],
+ "title": "AttestationsPaginatedResponse"
+ },
+ "AzureAppsArtifact": {
+ "properties": {
+ "digests": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "string",
+ "const": ""
+ }
+ ]
+ },
+ "type": "object",
+ "title": "Digests",
+ "description": "Image name to sha256 fingerprint mapping"
+ },
+ "digests_source": {
+ "type": "string",
+ "enum": [
+ "acr",
+ "logs",
+ "kosli-cli"
+ ],
+ "title": "Digests Source",
+ "description": "Source of the digests. Valid values are ['acr', 'logs', 'kosli-cli']"
+ },
+ "app_name": {
+ "type": "string",
+ "title": "App Name",
+ "description": "Azure Web/Function app name"
+ },
+ "app_kind": {
+ "type": "string",
+ "title": "App Kind",
+ "description": "Azure app kind"
+ },
+ "creationTimestamp": {
+ "type": "integer",
+ "title": "Creationtimestamp",
+ "description": "Creation time stamp for the Web app in UTC"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "digests",
+ "digests_source",
+ "app_name",
+ "app_kind",
+ "creationTimestamp"
+ ],
+ "title": "AzureAppsArtifact",
+ "description": "Individual artifact in an Azure Web/Function Apps report"
+ },
+ "AzureAppsReport": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "azure-apps",
+ "title": "Type",
+ "description": "Environment type",
+ "default": "azure-apps"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/AzureAppsArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "all artifacts in the report"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "AzureAppsReport",
+ "description": "Azure Web and Function Apps report containing artifacts",
+ "examples": [
+ {
+ "artifacts": [
+ {
+ "app_kind": "app",
+ "app_name": "my-azure-web-app",
+ "creationTimestamp": 1632122962,
+ "digests": {
+ "acme/myapp:1.0.0": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
+ },
+ "digests_source": "acr"
+ }
+ ]
+ }
+ ]
+ },
+ "Body_create_flow_with_template_flows__org__template_file_put": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/CreateFlow",
+ "description": "Flow metadata in JSON format"
+ },
+ "template_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template File",
+ "description": "The flow template file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_create_flow_with_template_flows__org__template_file_put"
+ },
+ "Body_create_trail_trails__org___flow_name__put": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/CreateTrail",
+ "description": "Trail metadata in JSON format"
+ },
+ "template_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template File",
+ "description": "Optional flow template file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_create_trail_trails__org___flow_name__put"
+ },
+ "Body_post_custom_attestation_attestations__org___flow_name__trail__trail_name__custom_post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/CustomAttestationPostInput",
+ "description": "Attestation data in JSON format"
+ },
+ "attachment_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attachment File",
+ "description": "Optional attachment file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_custom_attestation_attestations__org___flow_name__trail__trail_name__custom_post"
+ },
+ "Body_post_custom_attestation_type_custom_attestation_types__org__post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/CustomAttestationTypePostInput",
+ "description": "Custom attestation description in JSON format"
+ },
+ "type_schema": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Type Schema",
+ "description": "Optional attestation schema file"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_custom_attestation_type_custom_attestation_types__org__post"
+ },
+ "Body_post_generic_attestation_attestations__org___flow_name__trail__trail_name__generic_post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/GenericAttestationPostInput",
+ "description": "Attestation data in JSON format"
+ },
+ "attachment_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attachment File",
+ "description": "Optional attachment file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_generic_attestation_attestations__org___flow_name__trail__trail_name__generic_post"
+ },
+ "Body_post_jira_attestation_attestations__org___flow_name__trail__trail_name__jira_post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/JiraAttestationPostInput",
+ "description": "Attestation data in JSON format"
+ },
+ "attachment_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attachment File",
+ "description": "Optional attachment file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_jira_attestation_attestations__org___flow_name__trail__trail_name__jira_post"
+ },
+ "Body_post_junit_attestation_attestations__org___flow_name__trail__trail_name__junit_post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/JUnitAttestationPostInput",
+ "description": "Attestation data in JSON format"
+ },
+ "attachment_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attachment File",
+ "description": "Optional attachment file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_junit_attestation_attestations__org___flow_name__trail__trail_name__junit_post"
+ },
+ "Body_post_pull_request_attestation_attestations__org___flow_name__trail__trail_name__pull_request_post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/PullRequestAttestationPostInput",
+ "description": "Attestation data in JSON format"
+ },
+ "attachment_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attachment File",
+ "description": "Optional attachment file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_pull_request_attestation_attestations__org___flow_name__trail__trail_name__pull_request_post"
+ },
+ "Body_post_snyk_attestation_attestations__org___flow_name__trail__trail_name__snyk_post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/SnykAttestationPostInput",
+ "description": "Attestation data in JSON format"
+ },
+ "attachment_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attachment File",
+ "description": "Optional attachment file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_snyk_attestation_attestations__org___flow_name__trail__trail_name__snyk_post"
+ },
+ "Body_post_sonar_attestation_attestations__org___flow_name__trail__trail_name__sonar_post": {
+ "properties": {
+ "data_json": {
+ "$ref": "#/components/schemas/SonarAttestationPostInput",
+ "description": "Attestation data in JSON format"
+ },
+ "attachment_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Attachment File",
+ "description": "Optional attachment file (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data_json"
+ ],
+ "title": "Body_post_sonar_attestation_attestations__org___flow_name__trail__trail_name__sonar_post"
+ },
+ "Body_put_policy_policies__org__put": {
+ "properties": {
+ "payload": {
+ "$ref": "#/components/schemas/PolicyPutInput",
+ "description": "Policy metadata in JSON format"
+ },
+ "policy_file": {
+ "anyOf": [
+ {
+ "type": "string",
+ "contentMediaType": "application/octet-stream"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Policy File",
+ "description": "The YAML policy file to upload (max size: 10MB)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "payload"
+ ],
+ "title": "Body_put_policy_policies__org__put"
+ },
+ "BooleanRule": {
+ "properties": {
+ "required": {
+ "type": "boolean",
+ "title": "Required",
+ "default": false
+ },
+ "exceptions": {
+ "items": {
+ "$ref": "#/components/schemas/ConditionalRule"
+ },
+ "type": "array",
+ "title": "Exceptions",
+ "default": []
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "BooleanRule"
+ },
+ "BuildItemResponse": {
+ "properties": {
+ "created_at": {
+ "type": "number",
+ "title": "Created At"
+ },
+ "fingerprint": {
+ "type": "string",
+ "title": "Fingerprint"
+ },
+ "flow_name": {
+ "type": "string",
+ "title": "Flow Name"
+ },
+ "trail_name": {
+ "type": "string",
+ "title": "Trail Name"
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/BuildRepoInfo"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "created_at",
+ "fingerprint",
+ "flow_name",
+ "trail_name"
+ ],
+ "title": "BuildItemResponse"
+ },
+ "BuildListResponse": {
+ "properties": {
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ },
+ "page": {
+ "type": "integer",
+ "title": "Page"
+ },
+ "per_page": {
+ "type": "integer",
+ "title": "Per Page"
+ },
+ "total_pages": {
+ "type": "integer",
+ "title": "Total Pages"
+ },
+ "total_count": {
+ "type": "integer",
+ "title": "Total Count"
+ },
+ "builds": {
+ "items": {
+ "$ref": "#/components/schemas/BuildItemResponse"
+ },
+ "type": "array",
+ "title": "Builds"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "page",
+ "per_page",
+ "total_pages",
+ "total_count",
+ "builds"
+ ],
+ "title": "BuildListResponse"
+ },
+ "BuildRepoInfo": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "repo_id": {
+ "type": "string",
+ "title": "Repo Id"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "repo_id"
+ ],
+ "title": "BuildRepoInfo"
+ },
+ "CommitInfo": {
+ "properties": {
+ "commit_sha": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$",
+ "title": "Commit Sha",
+ "description": "The SHA of the commit"
+ },
+ "artifact_fingerprints": {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ "type": "array",
+ "title": "Artifact Fingerprints",
+ "description": "List of artifact fingerprints associated with this commit"
+ }
+ },
+ "type": "object",
+ "required": [
+ "commit_sha",
+ "artifact_fingerprints"
+ ],
+ "title": "CommitInfo",
+ "description": "Information about a commit and its associated artifact fingerprints."
+ },
+ "CommitResponse": {
+ "properties": {
+ "commit_sha": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Sha"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "commit_sha"
+ ],
+ "title": "CommitResponse",
+ "example": {
+ "commit_sha": "1b1ee2cb55ab20cd4ec441d8f2f91d9e7297c6c5"
+ }
+ },
+ "ConditionalRule": {
+ "properties": {
+ "if": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PolicyExpression"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "ConditionalRule"
+ },
+ "ContextResponse": {
+ "properties": {
+ "flow_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Flow Name"
+ },
+ "trail_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trail Name"
+ },
+ "artifact_status": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Status"
+ }
+ },
+ "type": "object",
+ "title": "ContextResponse"
+ },
+ "CreateArtifact": {
+ "properties": {
+ "trail_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_.~]*$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trail Name"
+ },
+ "template_reference_name": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_]+$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template Reference Name"
+ },
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ },
+ "filename": {
+ "type": "string",
+ "title": "Filename"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "git_commit": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Git Commit"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "commits_list": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commits List"
+ },
+ "repo_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "string",
+ "const": ""
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Repo Url"
+ },
+ "is_compliant": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Compliant"
+ },
+ "build_url": {
+ "type": "string",
+ "title": "Build Url"
+ },
+ "commit_url": {
+ "type": "string",
+ "title": "Commit Url"
+ },
+ "template": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template"
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ }
+ },
+ "type": "object",
+ "required": [
+ "fingerprint",
+ "filename",
+ "build_url",
+ "commit_url"
+ ],
+ "title": "CreateArtifact"
+ },
+ "CreateEnvironmentPutInput": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\.\\-_~]*$",
+ "title": "Name"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "K8S",
+ "ECS",
+ "S3",
+ "lambda",
+ "server",
+ "docker",
+ "azure-apps",
+ "logical"
+ ],
+ "title": "Type"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "include_scaling": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Include Scaling"
+ },
+ "require_provenance": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Require Provenance",
+ "description": "This field is deprecated and will be removed in a future version. Use policies instead.",
+ "deprecated": true
+ },
+ "included_environments": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Included Environments"
+ },
+ "policies": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Policies"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name",
+ "type",
+ "description"
+ ],
+ "title": "CreateEnvironmentPutInput"
+ },
+ "CreateFlow": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ],
+ "title": "Visibility"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "description",
+ "visibility"
+ ],
+ "title": "CreateFlow"
+ },
+ "CreateTrail": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "title": "CreateTrail"
+ },
+ "CustomAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "type_name": {
+ "type": "string",
+ "title": "Type Name"
+ },
+ "attestation_data": {
+ "type": "string",
+ "contentMediaType": "application/json",
+ "contentSchema": {},
+ "title": "Attestation Data"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "type_name",
+ "attestation_data"
+ ],
+ "title": "CustomAttestationPostInput",
+ "examples": [
+ {
+ "attestation_data": {
+ "key": "value"
+ },
+ "attestation_name": "custom",
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "type_name": "custom_type",
+ "user_data": {}
+ }
+ ]
+ },
+ "CustomAttestationTypePostInput": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_~]*$",
+ "title": "Name",
+ "examples": [
+ "my-type",
+ "source_code_review",
+ "CCF-00320-No_Passwords_In_Code"
+ ]
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "evaluator": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/JQEvaluator"
+ },
+ {
+ "$ref": "#/components/schemas/DefaultEvaluator"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Evaluator",
+ "default": {
+ "content_type": "default"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "title": "CustomAttestationTypePostInput",
+ "examples": [
+ {
+ "description": "A person that is over 21 year",
+ "evaluator": {
+ "content_type": "jq",
+ "rules": [
+ ".age > 21"
+ ]
+ },
+ "name": "person-over-21"
+ }
+ ]
+ },
+ "DefaultEvaluator": {
+ "properties": {
+ "content_type": {
+ "type": "string",
+ "const": "default",
+ "title": "Content Type",
+ "default": "default"
+ }
+ },
+ "type": "object",
+ "title": "DefaultEvaluator"
+ },
+ "DiffItem": {
+ "properties": {
+ "snapshot_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Snapshot Id"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/ArtifactInfo"
+ },
+ "type": "array",
+ "title": "Artifacts"
+ }
+ },
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "DiffItem"
+ },
+ "DockerArtifact": {
+ "properties": {
+ "digests": {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ "type": "object",
+ "title": "Digests",
+ "description": "Image name to sha256 fingerprint mapping"
+ },
+ "creationTimestamp": {
+ "type": "integer",
+ "title": "Creationtimestamp",
+ "description": "Creation time stamp for the container in UTC"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "digests",
+ "creationTimestamp"
+ ],
+ "title": "DockerArtifact",
+ "description": "Individual artifact in a Docker report"
+ },
+ "DockerReport": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "docker",
+ "title": "Type",
+ "description": "Environment type",
+ "default": "docker"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/DockerArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "all artifacts in the report"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "DockerReport",
+ "description": "Docker report containing artifacts",
+ "examples": [
+ {
+ "artifacts": [
+ {
+ "creationTimestamp": 1632122962,
+ "digests": {
+ "acme/myimage:1.0.0": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "ECSArtifact": {
+ "properties": {
+ "digests": {
+ "additionalProperties": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "string",
+ "const": ""
+ }
+ ]
+ },
+ "type": "object",
+ "title": "Digests",
+ "description": "Image name to sha256 fingerprint mapping"
+ },
+ "taskArn": {
+ "type": "string",
+ "title": "Taskarn",
+ "description": "AWS ECS task ARN"
+ },
+ "cluster_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Cluster Name",
+ "description": "AWS ECS cluster name"
+ },
+ "service_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Service Name",
+ "description": "AWS ECS service name"
+ },
+ "creationTimestamp": {
+ "type": "integer",
+ "title": "Creationtimestamp",
+ "description": "Creation time stamp for the task in UTC"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "digests",
+ "taskArn",
+ "creationTimestamp"
+ ],
+ "title": "ECSArtifact",
+ "description": "Individual artifact in an ECS report"
+ },
+ "ECSReport": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "ECS",
+ "title": "Type",
+ "description": "Environment type",
+ "default": "ECS"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/ECSArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "all artifacts in the report"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "ECSReport",
+ "description": "ECS report containing artifacts",
+ "examples": [
+ {
+ "artifacts": [
+ {
+ "clusterName": "ecs-cluster",
+ "creationTimestamp": 1632122962,
+ "digests": {
+ "acme/hadroncollider:1.1.1": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
+ },
+ "serviceName": "ecs-service",
+ "taskArn": "arn:aws:ecs:eu-central-1:***:task/test/ef5609c25ad44aabb4bb518ac6573f8e"
+ }
+ ]
+ }
+ ]
+ },
+ "EmailActionTarget": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "EMAIL",
+ "title": "Type",
+ "default": "EMAIL"
+ },
+ "last_success_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success At"
+ },
+ "last_failure_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure At"
+ },
+ "emails": {
+ "items": {
+ "type": "string",
+ "format": "email"
+ },
+ "type": "array",
+ "title": "Emails"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "emails"
+ ],
+ "title": "EmailActionTarget"
+ },
+ "EmailTargetResponse": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "EMAIL",
+ "title": "Type"
+ },
+ "emails": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Emails"
+ },
+ "last_success_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success At"
+ },
+ "last_failure_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure At"
+ }
+ },
+ "type": "object",
+ "required": [
+ "type",
+ "emails"
+ ],
+ "title": "EmailTargetResponse"
+ },
+ "EmbeddedArtifactResponse": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Id"
+ },
+ "fingerprint": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$",
+ "title": "Fingerprint"
+ },
+ "commit_sha": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Sha"
+ },
+ "commit_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Url"
+ },
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "fingerprint"
+ ],
+ "title": "EmbeddedArtifactResponse"
+ },
+ "EmbeddedEnvironmentResponse": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Id"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "type": {
+ "type": "string",
+ "title": "Type"
+ },
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "name",
+ "type"
+ ],
+ "title": "EmbeddedEnvironmentResponse"
+ },
+ "EnvActionPutInput": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_\\.~/]*$",
+ "title": "Name",
+ "examples": [
+ "production-action"
+ ]
+ },
+ "targets": {
+ "items": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "$ref": "#/components/schemas/SlackActionTarget"
+ },
+ {
+ "$ref": "#/components/schemas/WebhookActionTarget"
+ },
+ {
+ "$ref": "#/components/schemas/EmailActionTarget"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Targets"
+ },
+ "type": {
+ "type": "string",
+ "const": "env",
+ "title": "Type",
+ "default": "env"
+ },
+ "environments": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Environments"
+ },
+ "triggers": {
+ "items": {
+ "type": "string",
+ "enum": [
+ "ON_STARTED_ARTIFACT",
+ "ON_EXITED_ARTIFACT",
+ "ON_SCALED_ARTIFACT",
+ "ON_ALLOWED_ARTIFACT",
+ "ON_NON_COMPLIANT_ENV",
+ "ON_COMPLIANT_ENV"
+ ]
+ },
+ "type": "array",
+ "title": "Triggers"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name",
+ "targets",
+ "environments",
+ "triggers"
+ ],
+ "title": "EnvActionPutInput"
+ },
+ "EnvNotificationsResponse": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "type": {
+ "type": "string",
+ "title": "Type"
+ },
+ "number": {
+ "type": "integer",
+ "title": "Number"
+ },
+ "environments": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Environments"
+ },
+ "triggers": {
+ "items": {
+ "type": "string",
+ "enum": [
+ "ON_STARTED_ARTIFACT",
+ "ON_EXITED_ARTIFACT",
+ "ON_SCALED_ARTIFACT",
+ "ON_ALLOWED_ARTIFACT",
+ "ON_NON_COMPLIANT_ENV",
+ "ON_COMPLIANT_ENV"
+ ]
+ },
+ "type": "array",
+ "title": "Triggers"
+ },
+ "targets": {
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SlackTargetResponse"
+ },
+ {
+ "$ref": "#/components/schemas/WebhookTargetResponse"
+ },
+ {
+ "$ref": "#/components/schemas/EmailTargetResponse"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Targets"
+ },
+ "created_by": {
+ "type": "string",
+ "title": "Created By"
+ },
+ "is_created_from_slack_app": {
+ "type": "boolean",
+ "title": "Is Created From Slack App"
+ },
+ "is_failing": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Failing"
+ },
+ "last_success_timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success Timestamp"
+ },
+ "last_failure_timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure Timestamp"
+ },
+ "created_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Created At"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "type",
+ "number",
+ "environments",
+ "triggers",
+ "targets",
+ "created_by",
+ "is_created_from_slack_app",
+ "last_modified_at"
+ ],
+ "title": "EnvNotificationsResponse",
+ "examples": [
+ {
+ "created_at": 1633123456.0,
+ "created_by": "user@example.com",
+ "environments": [
+ "production"
+ ],
+ "is_created_from_slack_app": false,
+ "is_failing": false,
+ "last_modified_at": 1633123456.0,
+ "last_success_timestamp": 1633123456.0,
+ "name": "production-notification",
+ "number": 1,
+ "targets": [
+ {
+ "payload_version": "1.0",
+ "type": "WEBHOOK",
+ "webhook": "https://example.com/webhook"
+ }
+ ],
+ "triggers": [
+ "ON_STARTED_ARTIFACT"
+ ],
+ "type": "env"
+ }
+ ]
+ },
+ "EnvironmentDiffResponse": {
+ "properties": {
+ "snappish1": {
+ "$ref": "#/components/schemas/DiffItem"
+ },
+ "snappish2": {
+ "$ref": "#/components/schemas/DiffItem"
+ },
+ "changed": {
+ "$ref": "#/components/schemas/DiffItem"
+ },
+ "not-changed": {
+ "$ref": "#/components/schemas/DiffItem"
+ }
+ },
+ "type": "object",
+ "required": [
+ "snappish1",
+ "snappish2",
+ "changed",
+ "not-changed"
+ ],
+ "title": "EnvironmentDiffResponse"
+ },
+ "ExternalAttachmentUrl": {
+ "properties": {
+ "href": {
+ "type": "string",
+ "title": "Href"
+ },
+ "fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Fingerprint"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "href"
+ ],
+ "title": "ExternalAttachmentUrl"
+ },
+ "ExternalUrl": {
+ "properties": {
+ "href": {
+ "type": "string",
+ "title": "Href",
+ "description": "The URL"
+ },
+ "fingerprint": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Fingerprint",
+ "description": "Optional fingerprint associated with the URL"
+ }
+ },
+ "type": "object",
+ "required": [
+ "href"
+ ],
+ "title": "ExternalUrl",
+ "description": "External URL with optional fingerprint for GetTrail response."
+ },
+ "FlowActionPutInput": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_\\.~/]*$",
+ "title": "Name",
+ "examples": [
+ "release-action"
+ ]
+ },
+ "targets": {
+ "items": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "$ref": "#/components/schemas/SlackActionTarget"
+ },
+ {
+ "$ref": "#/components/schemas/WebhookActionTarget"
+ },
+ {
+ "$ref": "#/components/schemas/EmailActionTarget"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Targets"
+ },
+ "type": {
+ "type": "string",
+ "const": "flow",
+ "title": "Type",
+ "default": "flow"
+ },
+ "flows": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Flows"
+ },
+ "triggers": {
+ "items": {
+ "type": "string",
+ "enum": [
+ "ON_STARTED_TRAIL",
+ "ON_ATTESTED_PROVENANCE",
+ "ON_ATTESTATION",
+ "ON_APPROVAL",
+ "ON_RELEASE"
+ ]
+ },
+ "type": "array",
+ "title": "Triggers"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name",
+ "targets",
+ "flows",
+ "triggers"
+ ],
+ "title": "FlowActionPutInput"
+ },
+ "FlowGet": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ],
+ "title": "Visibility"
+ },
+ "org": {
+ "type": "string",
+ "title": "Org"
+ },
+ "template": {
+ "title": "Template"
+ },
+ "repo_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "string",
+ "const": ""
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Repo Url"
+ },
+ "tags": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Tags"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "description",
+ "visibility",
+ "org",
+ "template"
+ ],
+ "title": "FlowGet"
+ },
+ "FlowInfo": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the flow"
+ },
+ "tags": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object",
+ "title": "Tags",
+ "description": "Tags associated with the flow"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "title": "FlowInfo",
+ "description": "Flow information in trail response."
+ },
+ "FlowList": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ],
+ "title": "Visibility"
+ },
+ "org": {
+ "type": "string",
+ "title": "Org"
+ },
+ "template": {
+ "title": "Template"
+ },
+ "repo_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "string",
+ "const": ""
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Repo Url"
+ },
+ "tags": {
+ "anyOf": [
+ {},
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Tags"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "description",
+ "visibility",
+ "org",
+ "template"
+ ],
+ "title": "FlowList"
+ },
+ "FoundIssue": {
+ "properties": {
+ "id": {
+ "type": "string",
+ "title": "Id"
+ },
+ "message": {
+ "type": "string",
+ "title": "Message"
+ },
+ "locations": {
+ "items": {
+ "$ref": "#/components/schemas/IssueLocation"
+ },
+ "type": "array",
+ "title": "Locations",
+ "default": []
+ },
+ "priority_score": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Priority Score"
+ }
+ },
+ "type": "object",
+ "required": [
+ "id",
+ "message"
+ ],
+ "title": "FoundIssue"
+ },
+ "FoundPullRequestV1": {
+ "properties": {
+ "url": {
+ "type": "string",
+ "title": "Url"
+ },
+ "state": {
+ "type": "string",
+ "title": "State"
+ },
+ "merge_commit": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ {
+ "type": "string",
+ "const": ""
+ }
+ ],
+ "title": "Merge Commit"
+ },
+ "approvers": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Approvers"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "url",
+ "state",
+ "merge_commit"
+ ],
+ "title": "FoundPullRequestV1"
+ },
+ "FoundPullRequestV2": {
+ "properties": {
+ "url": {
+ "type": "string",
+ "title": "Url"
+ },
+ "state": {
+ "type": "string",
+ "title": "State"
+ },
+ "author": {
+ "type": "string",
+ "title": "Author"
+ },
+ "title": {
+ "type": "string",
+ "title": "Title"
+ },
+ "created_at": {
+ "type": "number",
+ "title": "Created At"
+ },
+ "merged_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Merged At"
+ },
+ "head_ref": {
+ "type": "string",
+ "title": "Head Ref"
+ },
+ "merge_commit": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{40}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Merge Commit"
+ },
+ "approvers": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/PullRequestApprover"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Approvers"
+ },
+ "commits": {
+ "items": {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ "type": "array",
+ "title": "Commits"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "url",
+ "state",
+ "author",
+ "title",
+ "created_at",
+ "head_ref",
+ "commits"
+ ],
+ "title": "FoundPullRequestV2"
+ },
+ "GenericAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "is_compliant": {
+ "type": "boolean",
+ "title": "Is Compliant"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "is_compliant"
+ ],
+ "title": "GenericAttestationPostInput",
+ "examples": [
+ {
+ "annotations": {
+ "key": "value"
+ },
+ "artifact_fingerprint": "089eeef9ef2ba07f142d93bb172eab3f23586b4cb40af75175ce140ab9a88c9a",
+ "attestation_name": "manual-test",
+ "description": "this is a glorious attestation",
+ "external_urls": {
+ "github": "https://github.com/org/repo/actions/123"
+ },
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "is_compliant": true,
+ "origin_url": "https://github.com/actions/123",
+ "user_data": {}
+ }
+ ]
+ },
+ "GetEnvironmentEventFlow": {
+ "properties": {
+ "flow_name": {
+ "type": "string",
+ "title": "Flow Name",
+ "description": "The name of the flow to which the artifact belongs"
+ },
+ "deployments": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Deployments",
+ "description": "Deprecated: List of deployment ids for the artifact"
+ }
+ },
+ "type": "object",
+ "required": [
+ "flow_name"
+ ],
+ "title": "GetEnvironmentEventFlow"
+ },
+ "GetEnvironmentEventResponse": {
+ "properties": {
+ "environment_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Environment Name",
+ "description": "Name for the environment"
+ },
+ "snapshot_index": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Snapshot Index",
+ "description": "Snapshot index number"
+ },
+ "artifact_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Name",
+ "description": "Artifact name"
+ },
+ "sha256": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Sha256",
+ "description": "Artifact fingerprint"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description",
+ "description": "Event description"
+ },
+ "reported_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Reported At",
+ "description": "Event timestamp"
+ },
+ "pipeline": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Pipeline",
+ "description": "Deprecated: Pipeline name. Use flows instead."
+ },
+ "deployments": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Deployments",
+ "description": "Deprecated: List of deployment ids for the artifact"
+ },
+ "flows": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/GetEnvironmentEventFlow"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Flows",
+ "description": "The list of flows in which the artifact was reported"
+ },
+ "artifact_compliance": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Compliance",
+ "description": "Artifact compliance in the snapshot"
+ },
+ "snapshot_compliance": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Snapshot Compliance",
+ "description": "Environment snapshot compliance"
+ },
+ "type": {
+ "type": "string",
+ "title": "Type",
+ "description": "Event type"
+ },
+ "code_diff": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Code Diff",
+ "description": "Code diff URL"
+ },
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links",
+ "description": "Links to the environment, artifact, and snapshot"
+ }
+ },
+ "type": "object",
+ "required": [
+ "type"
+ ],
+ "title": "GetEnvironmentEventResponse"
+ },
+ "GetEnvironmentResponse": {
+ "properties": {
+ "org": {
+ "type": "string",
+ "title": "Org",
+ "description": "Organization which owns the environment"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name for the environment"
+ },
+ "type": {
+ "type": "string",
+ "title": "Type",
+ "description": "Type of the report source infrastructure"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "description": "Description for the environment"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At",
+ "description": "Last report modification timestamp"
+ },
+ "last_reported_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Reported At",
+ "description": "Last report received timestamp"
+ },
+ "state": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "State",
+ "description": "Compliance state of the environment"
+ },
+ "include_scaling": {
+ "type": "boolean",
+ "title": "Include Scaling",
+ "description": "If the environment record scaling events"
+ },
+ "tags": {
+ "additionalProperties": true,
+ "type": "object",
+ "title": "Tags",
+ "description": "User-defined tags for the environment"
+ },
+ "policies": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Policies",
+ "description": "List of attached policies to the environment"
+ },
+ "included_environments": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Included Environments",
+ "description": "List of included environments for logical environments"
+ }
+ },
+ "type": "object",
+ "required": [
+ "org",
+ "name",
+ "type",
+ "description",
+ "last_modified_at",
+ "include_scaling",
+ "tags"
+ ],
+ "title": "GetEnvironmentResponse"
+ },
+ "GetOrganization": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "kind": {
+ "type": "string",
+ "title": "Kind"
+ },
+ "experimental_features_enabled": {
+ "type": "boolean",
+ "title": "Experimental Features Enabled"
+ },
+ "created_at": {
+ "type": "number",
+ "title": "Created At"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "kind",
+ "experimental_features_enabled",
+ "created_at",
+ "last_modified_at"
+ ],
+ "title": "GetOrganization",
+ "examples": [
+ {
+ "created_at": 1633123456,
+ "experimental_features_enabled": true,
+ "kind": "shared",
+ "last_modified_at": 1633123456,
+ "name": "test-org"
+ }
+ ]
+ },
+ "GetSnapshotListItem": {
+ "properties": {
+ "index": {
+ "type": "integer",
+ "title": "Index"
+ },
+ "from": {
+ "type": "number",
+ "title": "From"
+ },
+ "to": {
+ "type": "number",
+ "title": "To"
+ },
+ "compliant": {
+ "type": "boolean",
+ "title": "Compliant"
+ },
+ "duration": {
+ "type": "number",
+ "title": "Duration"
+ }
+ },
+ "type": "object",
+ "required": [
+ "index",
+ "from",
+ "to",
+ "compliant",
+ "duration"
+ ],
+ "title": "GetSnapshotListItem"
+ },
+ "GetSnapshotResponse": {
+ "properties": {
+ "index": {
+ "type": "integer",
+ "title": "Index",
+ "description": "The index of the snapshot"
+ },
+ "is_latest": {
+ "type": "boolean",
+ "title": "Is Latest",
+ "description": "True if this snapshot is the most recent"
+ },
+ "next_snapshot_timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Next Snapshot Timestamp",
+ "description": "The creation timestamp of the next snapshot if one exists"
+ },
+ "artifact_compliance_count": {
+ "additionalProperties": {
+ "type": "integer"
+ },
+ "type": "object",
+ "title": "Artifact Compliance Count",
+ "description": "The number of compliant and non-compliant artifacts in the snapshot"
+ },
+ "timestamp": {
+ "type": "number",
+ "title": "Timestamp",
+ "description": "The timestamp of the snapshot creation"
+ },
+ "type": {
+ "type": "string",
+ "title": "Type",
+ "description": "The type of the environment"
+ },
+ "compliant": {
+ "type": "boolean",
+ "title": "Compliant",
+ "description": "Whether the snapshot is compliant"
+ },
+ "html_url": {
+ "type": "string",
+ "title": "Html Url",
+ "description": "The HTML URL to the snapshot"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/SnapshotArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "The list of artifacts in the snapshot"
+ },
+ "applied_policies": {
+ "items": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "type": "array",
+ "title": "Applied Policies",
+ "description": "The list of policies applied to this snapshot"
+ }
+ },
+ "type": "object",
+ "required": [
+ "index",
+ "is_latest",
+ "artifact_compliance_count",
+ "timestamp",
+ "type",
+ "compliant",
+ "html_url",
+ "artifacts",
+ "applied_policies"
+ ],
+ "title": "GetSnapshotResponse"
+ },
+ "GetTrail": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the trail"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description",
+ "description": "Description of the trail"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommitInfo"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Git commit information for the trail"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url",
+ "description": "Origin URL where the trail was reported from"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data",
+ "description": "User-defined data attached to the trail"
+ },
+ "repo_ids": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Repo Ids",
+ "description": "List of repository IDs associated with the trail"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At",
+ "description": "Timestamp when the trail was last modified"
+ },
+ "created_at": {
+ "type": "number",
+ "title": "Created At",
+ "description": "Timestamp when the trail was created"
+ },
+ "compliance_status": {
+ "$ref": "#/components/schemas/TrailComplianceStatus",
+ "description": "Compliance status of the trail"
+ },
+ "template": {
+ "$ref": "#/components/schemas/Template",
+ "description": "Flow template associated with the trail"
+ },
+ "compliance_state": {
+ "type": "string",
+ "enum": [
+ "INCOMPLETE",
+ "COMPLIANT",
+ "NON-COMPLIANT"
+ ],
+ "title": "Compliance State",
+ "description": "Overall compliance state of the trail"
+ },
+ "is_compliant": {
+ "type": "boolean",
+ "title": "Is Compliant",
+ "description": "Whether the trail is compliant"
+ },
+ "events": {
+ "items": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "type": "array",
+ "title": "Events",
+ "description": "List of events that occurred on the trail"
+ },
+ "created_by": {
+ "type": "string",
+ "title": "Created By",
+ "description": "Display name of the user who created the trail"
+ },
+ "flow": {
+ "$ref": "#/components/schemas/FlowInfo",
+ "description": "Information about the flow containing this trail"
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ExternalUrl"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls",
+ "description": "External URLs associated with the trail"
+ },
+ "html_url": {
+ "type": "string",
+ "title": "Html Url",
+ "description": "URL of the trail's web page"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "last_modified_at",
+ "created_at",
+ "compliance_status",
+ "template",
+ "compliance_state",
+ "is_compliant",
+ "created_by",
+ "flow",
+ "html_url"
+ ],
+ "title": "GetTrail",
+ "description": "Response model for getting a Trail.\n\nThis represents the full trail data returned by the get_trail endpoint."
+ },
+ "GitCommit": {
+ "properties": {
+ "sha1": {
+ "type": "string",
+ "title": "Sha1"
+ },
+ "message": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Message"
+ },
+ "author": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Author"
+ },
+ "author_username": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Author Username"
+ },
+ "branch": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Branch"
+ },
+ "timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Timestamp"
+ },
+ "url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Url"
+ },
+ "parents": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Parents"
+ }
+ },
+ "type": "object",
+ "required": [
+ "sha1"
+ ],
+ "title": "GitCommit"
+ },
+ "GitCommitInfo": {
+ "properties": {
+ "sha1": {
+ "type": "string",
+ "title": "Sha1",
+ "description": "The SHA-1 hash of the commit"
+ },
+ "message": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Message",
+ "description": "The commit message"
+ },
+ "author": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Author",
+ "description": "The commit author"
+ },
+ "branch": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Branch",
+ "description": "The branch name"
+ },
+ "timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Timestamp",
+ "description": "The commit timestamp"
+ }
+ },
+ "type": "object",
+ "required": [
+ "sha1"
+ ],
+ "title": "GitCommitInfo",
+ "description": "Git commit information response model.\n\nExcludes author_username, parents, and url from JSON when not present."
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "detail": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Detail"
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError"
+ },
+ "IssueLocation": {
+ "properties": {
+ "uri": {
+ "type": "string",
+ "title": "Uri"
+ },
+ "lines": {
+ "type": "string",
+ "title": "Lines"
+ }
+ },
+ "type": "object",
+ "required": [
+ "uri",
+ "lines"
+ ],
+ "title": "IssueLocation"
+ },
+ "JQEvaluator": {
+ "properties": {
+ "content_type": {
+ "type": "string",
+ "const": "jq",
+ "title": "Content Type",
+ "default": "jq"
+ },
+ "rules": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Rules"
+ }
+ },
+ "type": "object",
+ "required": [
+ "rules"
+ ],
+ "title": "JQEvaluator"
+ },
+ "JUnitAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "junit_results": {
+ "items": {
+ "$ref": "#/components/schemas/JUnitResult"
+ },
+ "type": "array",
+ "title": "Junit Results"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "junit_results"
+ ],
+ "title": "JUnitAttestationPostInput",
+ "examples": [
+ {
+ "attestation_name": "junit",
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "junit_results": [
+ {
+ "duration": 2.5,
+ "errors": 0,
+ "failures": 0,
+ "name": "test suite",
+ "skipped": 1,
+ "total": 5
+ }
+ ],
+ "user_data": {}
+ }
+ ]
+ },
+ "JUnitResult": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "failures": {
+ "type": "integer",
+ "title": "Failures"
+ },
+ "errors": {
+ "type": "integer",
+ "title": "Errors"
+ },
+ "skipped": {
+ "type": "integer",
+ "title": "Skipped"
+ },
+ "total": {
+ "type": "integer",
+ "title": "Total"
+ },
+ "duration": {
+ "type": "number",
+ "title": "Duration"
+ },
+ "timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Timestamp"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name",
+ "failures",
+ "errors",
+ "skipped",
+ "total",
+ "duration"
+ ],
+ "title": "JUnitResult"
+ },
+ "JiraAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "jira_results": {
+ "items": {
+ "$ref": "#/components/schemas/JiraItem"
+ },
+ "type": "array",
+ "title": "Jira Results"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "jira_results"
+ ],
+ "title": "JiraAttestationPostInput",
+ "examples": [
+ {
+ "attestation_name": "jira",
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "jira_results": [
+ {
+ "issue_exists": true,
+ "issue_id": "ML-50",
+ "issue_url": "https://your-org.atlassian.net/browse/ML-50"
+ }
+ ],
+ "user_data": {}
+ }
+ ]
+ },
+ "JiraItem": {
+ "properties": {
+ "issue_id": {
+ "type": "string",
+ "title": "Issue Id"
+ },
+ "issue_url": {
+ "type": "string",
+ "title": "Issue Url"
+ },
+ "issue_exists": {
+ "type": "boolean",
+ "title": "Issue Exists"
+ },
+ "issue_fields": {
+ "additionalProperties": true,
+ "type": "object",
+ "title": "Issue Fields"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "issue_id",
+ "issue_url",
+ "issue_exists"
+ ],
+ "title": "JiraItem"
+ },
+ "JoinPhysicalToLogicalPutInput": {
+ "properties": {
+ "physical_env_name": {
+ "type": "string",
+ "title": "Physical Env Name",
+ "description": "Physical environment name"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "physical_env_name"
+ ],
+ "title": "JoinPhysicalToLogicalPutInput"
+ },
+ "K8SArtifact": {
+ "properties": {
+ "podName": {
+ "type": "string",
+ "title": "Podname",
+ "description": "Name of pod"
+ },
+ "namespace": {
+ "type": "string",
+ "title": "Namespace",
+ "description": "Namespace of cluster"
+ },
+ "digests": {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ "type": "object",
+ "title": "Digests",
+ "description": "Image name to sha256 fingerprint mapping"
+ },
+ "creationTimestamp": {
+ "type": "integer",
+ "title": "Creationtimestamp",
+ "description": "Creation time stamp for the pod in UTC"
+ },
+ "owners": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/K8SOwner"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Owners",
+ "description": "Owner references for the pod"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "podName",
+ "namespace",
+ "digests",
+ "creationTimestamp"
+ ],
+ "title": "K8SArtifact",
+ "description": "Individual artifact (pod) in a K8S report"
+ },
+ "K8SOwner": {
+ "properties": {
+ "apiVersion": {
+ "type": "string",
+ "title": "Apiversion",
+ "description": "API version of the owner"
+ },
+ "kind": {
+ "type": "string",
+ "title": "Kind",
+ "description": "Kind of the owner"
+ },
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the owner"
+ },
+ "uid": {
+ "type": "string",
+ "title": "Uid",
+ "description": "UID of the owner"
+ },
+ "controller": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Controller",
+ "description": "Whether the owner is a controller"
+ },
+ "blockOwnerDeletion": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Blockownerdeletion",
+ "description": "Whether to block owner deletion"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "apiVersion",
+ "kind",
+ "name",
+ "uid"
+ ],
+ "title": "K8SOwner",
+ "description": "Owner reference for a K8S pod"
+ },
+ "K8SReport": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "K8S",
+ "title": "Type",
+ "description": "Environment type",
+ "default": "K8S"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/K8SArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "all artifacts in the report"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "K8SReport",
+ "description": "K8S report containing pod artifacts",
+ "examples": [
+ {
+ "artifacts": [
+ {
+ "creationTimestamp": 1632122962,
+ "digests": {
+ "acme/hadroncollider:1.1.1": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
+ },
+ "namespace": "default",
+ "podName": "my-pod-abc123"
+ }
+ ]
+ }
+ ]
+ },
+ "LambdaArtifact": {
+ "properties": {
+ "digests": {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ "type": "object",
+ "title": "Digests",
+ "description": "Function name to sha256 fingerprint mapping"
+ },
+ "creationTimestamp": {
+ "type": "integer",
+ "title": "Creationtimestamp",
+ "description": "Creation time stamp for the function in UTC"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "digests",
+ "creationTimestamp"
+ ],
+ "title": "LambdaArtifact",
+ "description": "Individual artifact in a Lambda report"
+ },
+ "LambdaReport": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "lambda",
+ "title": "Type",
+ "description": "Environment type",
+ "default": "lambda"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/LambdaArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "all artifacts in the report"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "LambdaReport",
+ "description": "Lambda report containing artifacts",
+ "examples": [
+ {
+ "artifacts": [
+ {
+ "creationTimestamp": 1632122962,
+ "digests": {
+ "my-lambda-function": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "LatestCommitResponse": {
+ "properties": {
+ "latest_commit": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Latest Commit"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "latest_commit"
+ ],
+ "title": "LatestCommitResponse",
+ "example": {
+ "latest_commit": "c8f476a48dee6f98e0aac8a6e418e2207900827f"
+ }
+ },
+ "LegacyCreateFlow": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "public",
+ "private"
+ ],
+ "title": "Visibility"
+ },
+ "template": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Template"
+ },
+ "repo_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Repo Url"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "description",
+ "visibility",
+ "template"
+ ],
+ "title": "LegacyCreateFlow"
+ },
+ "ListTrailItem": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the trail"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description",
+ "description": "Description of the trail"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommitInfo"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Git commit information for the trail"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url",
+ "description": "Origin URL where the trail was reported from"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data",
+ "description": "User-defined data attached to the trail"
+ },
+ "repo_ids": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Repo Ids",
+ "description": "List of repository IDs associated with the trail"
+ },
+ "last_modified_at": {
+ "type": "number",
+ "title": "Last Modified At",
+ "description": "Timestamp when the trail was last modified"
+ },
+ "created_at": {
+ "type": "number",
+ "title": "Created At",
+ "description": "Timestamp when the trail was created"
+ },
+ "compliance_status": {
+ "$ref": "#/components/schemas/TrailComplianceStatus",
+ "description": "Compliance status of the trail"
+ },
+ "template": {
+ "$ref": "#/components/schemas/Template",
+ "description": "Flow template associated with the trail"
+ },
+ "compliance_state": {
+ "type": "string",
+ "enum": [
+ "INCOMPLETE",
+ "COMPLIANT",
+ "NON-COMPLIANT"
+ ],
+ "title": "Compliance State",
+ "description": "Overall compliance state of the trail"
+ },
+ "is_compliant": {
+ "type": "boolean",
+ "title": "Is Compliant",
+ "description": "Whether the trail is compliant"
+ },
+ "events": {
+ "items": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "type": "array",
+ "title": "Events",
+ "description": "List of events that occurred on the trail"
+ },
+ "created_by": {
+ "type": "string",
+ "title": "Created By",
+ "description": "Display name of the user who created the trail"
+ },
+ "flow": {
+ "$ref": "#/components/schemas/FlowInfo",
+ "description": "Information about the flow containing this trail"
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ExternalUrl"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls",
+ "description": "External URLs associated with the trail"
+ },
+ "html_url": {
+ "type": "string",
+ "title": "Html Url",
+ "description": "URL of the trail's web page"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "last_modified_at",
+ "created_at",
+ "compliance_status",
+ "template",
+ "compliance_state",
+ "is_compliant",
+ "created_by",
+ "flow",
+ "html_url"
+ ],
+ "title": "ListTrailItem",
+ "description": "A trail item in the list trails response."
+ },
+ "ListTrails": {
+ "properties": {
+ "data": {
+ "items": {
+ "$ref": "#/components/schemas/ListTrailItem"
+ },
+ "type": "array",
+ "title": "Data",
+ "description": "List of trails"
+ },
+ "pagination": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ListTrailsPagination"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Pagination info (only present when there are multiple pages)"
+ }
+ },
+ "type": "object",
+ "required": [
+ "data"
+ ],
+ "title": "ListTrails",
+ "description": "Response model for listing Trails with pagination.\n\nWhen pagination is not requested, returns a list of trails directly.\nWhen pagination is requested, returns data with optional pagination info."
+ },
+ "ListTrailsPagination": {
+ "properties": {
+ "total": {
+ "type": "integer",
+ "title": "Total",
+ "description": "Total number of trails"
+ },
+ "page": {
+ "type": "integer",
+ "title": "Page",
+ "description": "Current page number"
+ },
+ "per_page": {
+ "type": "integer",
+ "title": "Per Page",
+ "description": "Number of items per page"
+ },
+ "page_count": {
+ "type": "integer",
+ "title": "Page Count",
+ "description": "Total number of pages"
+ }
+ },
+ "type": "object",
+ "required": [
+ "total",
+ "page",
+ "per_page",
+ "page_count"
+ ],
+ "title": "ListTrailsPagination",
+ "description": "Pagination info for list trails response."
+ },
+ "LiveArtifactEntryResponse": {
+ "properties": {
+ "environment_id": {
+ "type": "string",
+ "title": "Environment Id"
+ },
+ "artifact_id": {
+ "type": "string",
+ "title": "Artifact Id"
+ },
+ "artifact_name": {
+ "type": "string",
+ "title": "Artifact Name"
+ },
+ "snapshot_index": {
+ "type": "integer",
+ "title": "Snapshot Index"
+ },
+ "compliance": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Compliance"
+ },
+ "started_at": {
+ "type": "number",
+ "title": "Started At"
+ },
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "environment_id",
+ "artifact_id",
+ "artifact_name",
+ "snapshot_index",
+ "started_at"
+ ],
+ "title": "LiveArtifactEntryResponse"
+ },
+ "OrganizationUpdate": {
+ "properties": {
+ "experimental_features_enabled": {
+ "type": "boolean",
+ "title": "Experimental Features Enabled"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "experimental_features_enabled"
+ ],
+ "title": "OrganizationUpdate",
+ "examples": [
+ {
+ "experimental_features_enabled": true
+ }
+ ]
+ },
+ "OverrideAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "reason": {
+ "type": "string",
+ "title": "Reason"
+ },
+ "new_compliance_status": {
+ "type": "boolean",
+ "title": "New Compliance Status"
+ },
+ "original_attestation_type": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "generic",
+ "junit",
+ "snyk",
+ "pull_request",
+ "jira",
+ "sonar"
+ ]
+ },
+ {
+ "type": "string",
+ "pattern": "^custom:.*$"
+ }
+ ],
+ "title": "Original Attestation Type"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "reason",
+ "new_compliance_status",
+ "original_attestation_type"
+ ],
+ "title": "OverrideAttestationPostInput"
+ },
+ "PaginationInfo": {
+ "properties": {
+ "total": {
+ "type": "integer",
+ "title": "Total"
+ },
+ "page": {
+ "type": "integer",
+ "title": "Page"
+ },
+ "per_page": {
+ "type": "integer",
+ "title": "Per Page"
+ },
+ "page_count": {
+ "type": "integer",
+ "title": "Page Count"
+ }
+ },
+ "type": "object",
+ "required": [
+ "total",
+ "page",
+ "per_page",
+ "page_count"
+ ],
+ "title": "PaginationInfo"
+ },
+ "PolicyArtifacts": {
+ "properties": {
+ "provenance": {
+ "$ref": "#/components/schemas/BooleanRule",
+ "default": {
+ "required": false,
+ "exceptions": []
+ }
+ },
+ "trail-compliance": {
+ "$ref": "#/components/schemas/BooleanRule",
+ "default": {
+ "required": false,
+ "exceptions": []
+ }
+ },
+ "attestations": {
+ "items": {
+ "$ref": "#/components/schemas/RequiredAttestationRule"
+ },
+ "type": "array",
+ "title": "Attestations",
+ "default": []
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "PolicyArtifacts"
+ },
+ "PolicyEvaluationResponse": {
+ "properties": {
+ "policy_version": {
+ "type": "integer",
+ "title": "Policy Version"
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "COMPLIANT",
+ "NON-COMPLIANT"
+ ],
+ "title": "Status"
+ },
+ "rule_evaluations": {
+ "items": {
+ "$ref": "#/components/schemas/RuleEvaluationResponse"
+ },
+ "type": "array",
+ "title": "Rule Evaluations",
+ "default": []
+ },
+ "policy_name": {
+ "type": "string",
+ "title": "Policy Name",
+ "readOnly": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "policy_version",
+ "status",
+ "policy_name"
+ ],
+ "title": "PolicyEvaluationResponse",
+ "description": "represents the result of evaluating one artifact against one policy"
+ },
+ "PolicyEvent": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "creation",
+ "metadata_update",
+ "new_version",
+ "renaming",
+ "archiving"
+ ],
+ "title": "Type"
+ },
+ "timestamp": {
+ "type": "number",
+ "title": "Timestamp"
+ },
+ "user": {
+ "type": "string",
+ "title": "User"
+ },
+ "data": {
+ "additionalProperties": true,
+ "type": "object",
+ "title": "Data"
+ }
+ },
+ "type": "object",
+ "required": [
+ "type",
+ "timestamp",
+ "user"
+ ],
+ "title": "PolicyEvent"
+ },
+ "PolicyExpression": {
+ "properties": {
+ "text": {
+ "type": "string",
+ "title": "Text"
+ }
+ },
+ "type": "object",
+ "required": [
+ "text"
+ ],
+ "title": "PolicyExpression"
+ },
+ "PolicyPutInput": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-_\\.~]*$",
+ "title": "Name",
+ "examples": [
+ "production-policy"
+ ]
+ },
+ "description": {
+ "type": "string",
+ "title": "Description",
+ "default": "",
+ "examples": [
+ "some description"
+ ]
+ },
+ "type": {
+ "type": "string",
+ "const": "env",
+ "title": "Type",
+ "default": "env"
+ },
+ "comment": {
+ "type": "string",
+ "title": "Comment",
+ "default": "",
+ "examples": [
+ "describe what you changed"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "title": "PolicyPutInput",
+ "examples": [
+ {
+ "comment": "Initial version",
+ "description": "Production environment policy",
+ "name": "production-policy",
+ "type": "env"
+ }
+ ]
+ },
+ "PolicyResponse": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "description": {
+ "type": "string",
+ "title": "Description"
+ },
+ "created_by": {
+ "type": "string",
+ "title": "Created By"
+ },
+ "created_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Created At"
+ },
+ "last_modified_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Modified At"
+ },
+ "archived": {
+ "type": "boolean",
+ "title": "Archived",
+ "default": false
+ },
+ "versions": {
+ "items": {
+ "$ref": "#/components/schemas/VersionedPolicy"
+ },
+ "type": "array",
+ "title": "Versions",
+ "default": []
+ },
+ "events": {
+ "items": {
+ "$ref": "#/components/schemas/PolicyEvent"
+ },
+ "type": "array",
+ "title": "Events",
+ "default": []
+ },
+ "consuming_envs": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Consuming Envs",
+ "default": []
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "description",
+ "created_by"
+ ],
+ "title": "PolicyResponse",
+ "description": "Response model for a policy\n\nThis represents the response structure when retrieving, creating or updating a policy.",
+ "examples": [
+ {
+ "archived": false,
+ "consuming_envs": [
+ "production"
+ ],
+ "created_at": 1633123456.0,
+ "created_by": "John Doe",
+ "description": "Production environment policy",
+ "events": [
+ {
+ "data": {
+ "version": 1
+ },
+ "timestamp": 1633123456.0,
+ "type": "policy_created",
+ "user": "John Doe"
+ }
+ ],
+ "last_modified_at": 1633123456.0,
+ "name": "production-policy",
+ "versions": [
+ {
+ "comment": "Initial version",
+ "created_by": "John Doe",
+ "policy_yaml": "_schema: https://kosli.com/schemas/policy/environment/v1\n\nartifacts:\n provenance:\n required: false",
+ "timestamp": 1633123456.0,
+ "version": 1
+ }
+ ]
+ }
+ ]
+ },
+ "PolicyRuleDefinition": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "provenance",
+ "trail-compliance",
+ "attestation"
+ ],
+ "title": "Type"
+ },
+ "definition": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RequiredAttestationRule"
+ },
+ {
+ "$ref": "#/components/schemas/BooleanRule"
+ }
+ ],
+ "title": "Definition"
+ }
+ },
+ "type": "object",
+ "required": [
+ "type",
+ "definition"
+ ],
+ "title": "PolicyRuleDefinition"
+ },
+ "PolicyV1": {
+ "properties": {
+ "schema_version": {
+ "type": "string",
+ "const": "1",
+ "title": "Schema Version"
+ },
+ "artifacts": {
+ "$ref": "#/components/schemas/PolicyArtifacts",
+ "default": {
+ "provenance": {
+ "exceptions": [],
+ "required": false
+ },
+ "trail-compliance": {
+ "exceptions": [],
+ "required": false
+ },
+ "attestations": []
+ }
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "schema_version"
+ ],
+ "title": "PolicyV1"
+ },
+ "ProjectScanResult": {
+ "properties": {
+ "low_count": {
+ "type": "integer",
+ "title": "Low Count"
+ },
+ "medium_count": {
+ "type": "integer",
+ "title": "Medium Count"
+ },
+ "high_count": {
+ "type": "integer",
+ "title": "High Count"
+ },
+ "low": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/FoundIssue"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Low"
+ },
+ "medium": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/FoundIssue"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Medium"
+ },
+ "high": {
+ "anyOf": [
+ {
+ "items": {
+ "$ref": "#/components/schemas/FoundIssue"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "High"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "low_count",
+ "medium_count",
+ "high_count"
+ ],
+ "title": "ProjectScanResult"
+ },
+ "PullRequestApprover": {
+ "properties": {
+ "username": {
+ "type": "string",
+ "title": "Username"
+ },
+ "state": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "State"
+ },
+ "timestamp": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Timestamp"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "username"
+ ],
+ "title": "PullRequestApprover"
+ },
+ "PullRequestAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "git_provider": {
+ "type": "string",
+ "enum": [
+ "github",
+ "gitlab",
+ "bitbucket",
+ "azure"
+ ],
+ "title": "Git Provider"
+ },
+ "pull_requests": {
+ "items": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/FoundPullRequestV1"
+ },
+ {
+ "$ref": "#/components/schemas/FoundPullRequestV2"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Pull Requests"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "git_provider",
+ "pull_requests"
+ ],
+ "title": "PullRequestAttestationPostInput",
+ "examples": [
+ {
+ "attestation_name": "pr",
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "git_provider": "github",
+ "pull_requests": [
+ {
+ "approvers": [
+ {
+ "author": "Jon Doe",
+ "state": "APPROVED",
+ "timestamp": 1750923266
+ }
+ ],
+ "author": "JonSmith",
+ "commits": [
+ {
+ "author": "Jon Smith ",
+ "author_username": "JonSmith",
+ "branch": "glorious-branch",
+ "message": "Add glorious feature",
+ "sha": "f387a894992f7991489680696abf8b72bf7875f1",
+ "timestamp": 1750851568,
+ "url": "https://github.com/org/repo/commit/f387a894992f7991489680696abf8b72bf7875f1"
+ },
+ {
+ "author": "Jon Smith ",
+ "author_username": "JonSmith",
+ "branch": "glorious-branch",
+ "message": "Update glorious feature",
+ "sha": "2d48854228633cca94f7f4a587b2172ebb01cf85",
+ "timestamp": 1750922905
+ }
+ ],
+ "created_at": 1750851601,
+ "head_ref": "glorious-branch",
+ "merge_commit": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "merged_at": 1750923680,
+ "state": "MERGED",
+ "title": "Add glorious commit",
+ "url": "https://github.com/org/repo/pull/3497"
+ }
+ ],
+ "user_data": {}
+ }
+ ]
+ },
+ "QualityGate": {
+ "properties": {
+ "name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Name"
+ },
+ "status": {
+ "type": "string",
+ "title": "Status"
+ },
+ "conditions": {
+ "items": {
+ "$ref": "#/components/schemas/QualityGateCondition"
+ },
+ "type": "array",
+ "title": "Conditions"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "status",
+ "conditions"
+ ],
+ "title": "QualityGate"
+ },
+ "QualityGateCondition": {
+ "properties": {
+ "metric": {
+ "type": "string",
+ "title": "Metric"
+ },
+ "errorThreshold": {
+ "type": "string",
+ "title": "Errorthreshold"
+ },
+ "operator": {
+ "type": "string",
+ "title": "Operator"
+ },
+ "status": {
+ "type": "string",
+ "title": "Status"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Value"
+ },
+ "onLeakPeriod": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Onleakperiod"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "metric",
+ "errorThreshold",
+ "operator",
+ "status"
+ ],
+ "title": "QualityGateCondition"
+ },
+ "RenameEnvironmentPutInput": {
+ "properties": {
+ "new_name": {
+ "type": "string",
+ "title": "New Name",
+ "description": "New environment name"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "new_name"
+ ],
+ "title": "RenameEnvironmentPutInput"
+ },
+ "RenameFlow": {
+ "properties": {
+ "new_name": {
+ "type": "string",
+ "title": "New Name"
+ }
+ },
+ "type": "object",
+ "required": [
+ "new_name"
+ ],
+ "title": "RenameFlow"
+ },
+ "RepoInfoPostInput": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Id"
+ },
+ "url": {
+ "type": "string",
+ "title": "Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "provider": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "github",
+ "gitlab",
+ "bitbucket",
+ "azure-devops",
+ "circleci"
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Provider"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "url"
+ ],
+ "title": "RepoInfoPostInput"
+ },
+ "RepoInfoResponse": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Id"
+ },
+ "url": {
+ "type": "string",
+ "title": "Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "provider": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "github",
+ "gitlab",
+ "bitbucket",
+ "azure-devops",
+ "circleci"
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Provider"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "url"
+ ],
+ "title": "RepoInfoResponse"
+ },
+ "RepoListResponse": {
+ "properties": {
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ },
+ "page": {
+ "type": "integer",
+ "title": "Page"
+ },
+ "per_page": {
+ "type": "integer",
+ "title": "Per Page"
+ },
+ "total_pages": {
+ "type": "integer",
+ "title": "Total Pages"
+ },
+ "total_count": {
+ "type": "integer",
+ "title": "Total Count"
+ },
+ "repos": {
+ "items": {
+ "$ref": "#/components/schemas/RepoResponse"
+ },
+ "type": "array",
+ "title": "Repos"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "page",
+ "per_page",
+ "total_pages",
+ "total_count",
+ "repos"
+ ],
+ "title": "RepoListResponse"
+ },
+ "RepoLiveStatusEmbedded": {
+ "properties": {
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/EmbeddedArtifactResponse"
+ },
+ "type": "array",
+ "title": "Artifacts"
+ },
+ "environments": {
+ "items": {
+ "$ref": "#/components/schemas/EmbeddedEnvironmentResponse"
+ },
+ "type": "array",
+ "title": "Environments"
+ }
+ },
+ "type": "object",
+ "required": [
+ "artifacts",
+ "environments"
+ ],
+ "title": "RepoLiveStatusEmbedded"
+ },
+ "RepoLiveStatusResponse": {
+ "properties": {
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ },
+ "_embedded": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoLiveStatusEmbedded"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "live_artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/LiveArtifactEntryResponse"
+ },
+ "type": "array",
+ "title": "Live Artifacts"
+ }
+ },
+ "type": "object",
+ "required": [
+ "live_artifacts"
+ ],
+ "title": "RepoLiveStatusResponse"
+ },
+ "RepoResponse": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "url": {
+ "type": "string",
+ "title": "Url"
+ },
+ "provider": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "github",
+ "gitlab",
+ "bitbucket",
+ "azure-devops",
+ "circleci"
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Provider"
+ },
+ "repo_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Repo Id"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "latest_activity": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Latest Activity"
+ },
+ "_links": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Links"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name",
+ "url"
+ ],
+ "title": "RepoResponse"
+ },
+ "RequestEntityTooLargeResponseModel": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "RequestEntityTooLargeResponseModel",
+ "examples": [
+ {
+ "message": "File size exceeds 10MB limit"
+ }
+ ]
+ },
+ "RequiredAttestationRule": {
+ "properties": {
+ "if": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/PolicyExpression"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "default": "*"
+ },
+ "type": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "generic",
+ "junit",
+ "snyk",
+ "pull_request",
+ "jira",
+ "sonar"
+ ]
+ },
+ {
+ "type": "string",
+ "pattern": "^custom:.*$"
+ },
+ {
+ "type": "string",
+ "const": "*"
+ }
+ ],
+ "title": "Type"
+ },
+ "must_be_compliant": {
+ "type": "boolean",
+ "title": "Must Be Compliant",
+ "default": true
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "type"
+ ],
+ "title": "RequiredAttestationRule"
+ },
+ "RuleEvaluationResponse": {
+ "properties": {
+ "rule": {
+ "$ref": "#/components/schemas/PolicyRuleDefinition"
+ },
+ "satisfied": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Satisfied"
+ },
+ "ignored": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Ignored",
+ "default": false
+ },
+ "resolutions": {
+ "items": {
+ "$ref": "#/components/schemas/RuleResolutionResponse"
+ },
+ "type": "array",
+ "title": "Resolutions",
+ "default": []
+ }
+ },
+ "type": "object",
+ "required": [
+ "rule"
+ ],
+ "title": "RuleEvaluationResponse",
+ "description": "represents one policy rule evaluation result"
+ },
+ "RuleResolutionResponse": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "missing_attestation",
+ "non_compliant_attestation",
+ "non_compliant_in_trail",
+ "no_provenance",
+ "missing_provenance",
+ "legacy_flow",
+ "rule_satisfied",
+ "rule_not_applicable"
+ ],
+ "title": "Type"
+ },
+ "context": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/ContextResponse"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "required": [
+ "type"
+ ],
+ "title": "RuleResolutionResponse"
+ },
+ "S3Artifact": {
+ "properties": {
+ "digests": {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ "type": "object",
+ "title": "Digests",
+ "description": "Object name to sha256 fingerprint mapping"
+ },
+ "creationTimestamp": {
+ "type": "integer",
+ "title": "Creationtimestamp",
+ "description": "Creation time stamp for the object in UTC"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "digests",
+ "creationTimestamp"
+ ],
+ "title": "S3Artifact",
+ "description": "Individual artifact in an S3 report"
+ },
+ "S3Report": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "S3",
+ "title": "Type",
+ "description": "Environment type",
+ "default": "S3"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/S3Artifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "all artifacts in the report"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "S3Report",
+ "description": "S3 report containing artifacts",
+ "examples": [
+ {
+ "artifacts": [
+ {
+ "creationTimestamp": 1632122962,
+ "digests": {
+ "my-bucket/my-object.zip": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "SearchFoundArtifactModel": {
+ "properties": {
+ "fingerprint": {
+ "type": "string",
+ "title": "Fingerprint",
+ "description": "Fingerprint of found artifact.",
+ "examples": [
+ "1084c799cd551dd1d8d5c5f9a5d593b2e931f5e36122ee5c793c1d08a19839cc"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of found artifact.",
+ "examples": [
+ "my-artifact.exe"
+ ]
+ },
+ "has_provenance": {
+ "type": "boolean",
+ "title": "Has Provenance",
+ "description": "Whether the artifact has provenance.",
+ "examples": [
+ true
+ ]
+ },
+ "git_commit": {
+ "type": "string",
+ "title": "Git Commit",
+ "description": "Git commit of found artifact.",
+ "examples": [
+ "e0ad84e1a2464a9486e777c1ecde162edff930a9"
+ ]
+ },
+ "pipeline": {
+ "type": "string",
+ "title": "Pipeline",
+ "description": "This field is legacy, use flow instead.",
+ "examples": [
+ "my-flow"
+ ]
+ },
+ "flow": {
+ "type": "string",
+ "title": "Flow",
+ "description": "Flow name of found artifact.",
+ "examples": [
+ "my-flow"
+ ]
+ },
+ "trail": {
+ "type": "string",
+ "title": "Trail",
+ "description": "Trail of found artifact.",
+ "examples": [
+ "my-trail"
+ ]
+ },
+ "template_reference_name": {
+ "type": "string",
+ "title": "Template Reference Name",
+ "description": "Name of the artifact in the trail template.",
+ "examples": [
+ "backend"
+ ]
+ },
+ "build_url": {
+ "type": "string",
+ "title": "Build Url",
+ "description": "Build url of found artifact.",
+ "examples": [
+ "https://my.build.service/1234"
+ ]
+ },
+ "commit_url": {
+ "type": "string",
+ "title": "Commit Url",
+ "description": "Commit url of found artifact.",
+ "examples": [
+ "https://my.commit.service/1234"
+ ]
+ },
+ "compliance_state": {
+ "type": "string",
+ "title": "Compliance State",
+ "description": "Compliance state of found artifact.",
+ "examples": [
+ "COMPLIANT"
+ ]
+ },
+ "running_in": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Running In",
+ "description": "Environments where the artifact is running.",
+ "examples": [
+ [
+ "staging",
+ "prod"
+ ]
+ ]
+ },
+ "exited_from": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array",
+ "title": "Exited From",
+ "description": "Environments where the artifact exited.",
+ "examples": [
+ [
+ "dev"
+ ]
+ ]
+ },
+ "html_url": {
+ "type": "string",
+ "title": "Html Url",
+ "description": "URL to web UI for found artifact.",
+ "examples": [
+ "https://app.kosli.com/my-flow/artifacts/1084c799cd551dd1d8d5c5f9a5d593b2e931f5e36122ee5c793c1d08a19839cc"
+ ]
+ },
+ "api_url": {
+ "type": "string",
+ "title": "Api Url",
+ "description": "URL to API for found artifact.",
+ "examples": [
+ "https://app.kosli.com/api/v2/artifacts/1084c799cd551dd1d8d5c5f9a5d593b2e931f5e36122ee5c793c1d08a19839cc"
+ ]
+ },
+ "history": {
+ "items": {},
+ "type": "array",
+ "title": "History",
+ "description": "History of found artifact."
+ }
+ },
+ "type": "object",
+ "required": [
+ "fingerprint",
+ "name",
+ "has_provenance",
+ "git_commit",
+ "pipeline",
+ "flow",
+ "trail",
+ "template_reference_name",
+ "build_url",
+ "commit_url",
+ "compliance_state",
+ "running_in",
+ "exited_from",
+ "html_url",
+ "api_url",
+ "history"
+ ],
+ "title": "SearchFoundArtifactModel"
+ },
+ "SearchResolvedCommitsModel": {
+ "properties": {
+ "type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Type",
+ "description": "Type of found results."
+ },
+ "count": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Count",
+ "description": "Count of commits that matched the search value."
+ },
+ "matches": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Matches",
+ "description": "Commits that matched the search value.",
+ "examples": [
+ [
+ "e0ad84e1a2464a9486e777c1ecde162edff930a9"
+ ]
+ ]
+ }
+ },
+ "type": "object",
+ "title": "SearchResolvedCommitsModel"
+ },
+ "SearchResolvedFingerprintsModel": {
+ "properties": {
+ "type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Type",
+ "description": "Type of found results."
+ },
+ "count": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Count",
+ "description": "Count of fingerprints that matched the search value."
+ },
+ "matches": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Matches",
+ "description": "Fingerprints that matched the search value.",
+ "examples": [
+ [
+ "1084c799cd551dd1d8d5c5f9a5d593b2e931f5e36122ee5c793c1d08a19839cc"
+ ]
+ ]
+ }
+ },
+ "type": "object",
+ "title": "SearchResolvedFingerprintsModel"
+ },
+ "SearchResolvedModel": {
+ "properties": {
+ "type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Type",
+ "description": "Type of found results. Either 'fingerprint', 'commit' or 'multiple'."
+ },
+ "full_match": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Full Match",
+ "description": "Full match of search value if unique; otherwise arbitrary match from results."
+ },
+ "fingerprints": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SearchResolvedFingerprintsModel"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "commits": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SearchResolvedCommitsModel"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "title": "SearchResolvedModel"
+ },
+ "SearchResultGetResponse": {
+ "properties": {
+ "resolved_to": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SearchResolvedModel"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/SearchFoundArtifactModel"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "Artifacts that matched the search value."
+ }
+ },
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "SearchResultGetResponse"
+ },
+ "ServerArtifact": {
+ "properties": {
+ "digests": {
+ "additionalProperties": {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ "type": "object",
+ "title": "Digests",
+ "description": "Artifact name to sha256 fingerprint mapping"
+ },
+ "creationTimestamp": {
+ "type": "integer",
+ "title": "Creationtimestamp",
+ "description": "Creation time stamp for the artifact in UTC"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "digests",
+ "creationTimestamp"
+ ],
+ "title": "ServerArtifact",
+ "description": "Individual artifact in a Server report"
+ },
+ "ServerReport": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "server",
+ "title": "Type",
+ "description": "Environment type",
+ "default": "server"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/ServerArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "all artifacts in the report"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "artifacts"
+ ],
+ "title": "ServerReport",
+ "description": "Server report containing artifacts",
+ "examples": [
+ {
+ "artifacts": [
+ {
+ "creationTimestamp": 1632122962,
+ "digests": {
+ "my-service:1.0.0": "c84295fa0722ab01c7e6e6472fbe6369cf40b1b302cf04bb06d97c820ce621a7"
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "SlackActionTarget": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "SLACK",
+ "title": "Type",
+ "default": "SLACK"
+ },
+ "last_success_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success At"
+ },
+ "last_failure_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure At"
+ },
+ "webhook": {
+ "type": "string",
+ "title": "Webhook"
+ },
+ "context": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SlackAppContext"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "webhook"
+ ],
+ "title": "SlackActionTarget"
+ },
+ "SlackAppContext": {
+ "properties": {
+ "channel_id": {
+ "type": "string",
+ "title": "Channel Id"
+ },
+ "channel_name": {
+ "type": "string",
+ "title": "Channel Name"
+ },
+ "team_id": {
+ "type": "string",
+ "title": "Team Id"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "channel_id",
+ "channel_name",
+ "team_id"
+ ],
+ "title": "SlackAppContext"
+ },
+ "SlackAppContextResponse": {
+ "properties": {
+ "channel_id": {
+ "type": "string",
+ "title": "Channel Id"
+ },
+ "channel_name": {
+ "type": "string",
+ "title": "Channel Name"
+ },
+ "team_id": {
+ "type": "string",
+ "title": "Team Id"
+ }
+ },
+ "type": "object",
+ "required": [
+ "channel_id",
+ "channel_name",
+ "team_id"
+ ],
+ "title": "SlackAppContextResponse"
+ },
+ "SlackTargetResponse": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "SLACK",
+ "title": "Type"
+ },
+ "webhook": {
+ "type": "string",
+ "title": "Webhook"
+ },
+ "last_success_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success At"
+ },
+ "last_failure_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure At"
+ },
+ "context": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/SlackAppContextResponse"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object",
+ "required": [
+ "type",
+ "webhook"
+ ],
+ "title": "SlackTargetResponse"
+ },
+ "SnapshotArtifact": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "SnapshotArtifactECSContext": {
+ "properties": {
+ "task_arn": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Task Arn",
+ "description": "The ARN of the ECS task"
+ },
+ "cluster_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Cluster Name",
+ "description": "The name of the ECS cluster. Only available for ECS environments"
+ },
+ "service_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Service Name",
+ "description": "The name of the ECS service. Only available for ECS environments"
+ }
+ },
+ "type": "object",
+ "title": "SnapshotArtifactECSContext"
+ },
+ "SnapshotArtifactFlow": {
+ "properties": {
+ "flow_name": {
+ "type": "string",
+ "title": "Flow Name",
+ "description": "The name of the flow to which the artifact belongs"
+ },
+ "trail_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Trail Name",
+ "description": "The name of the trail to which the artifact belongs"
+ },
+ "template_reference_name": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Template Reference Name",
+ "description": "The template_reference_name this artifact was reported with"
+ },
+ "git_commit": {
+ "type": "string",
+ "title": "Git Commit",
+ "description": "The git commit of the artifact"
+ },
+ "commit_url": {
+ "type": "string",
+ "title": "Commit Url",
+ "description": "The URL to the git commit of the artifact"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Git Commit Info",
+ "description": "The git commit info of the artifact"
+ },
+ "html_url": {
+ "type": "string",
+ "title": "Html Url",
+ "description": "The HTML URL to the artifact"
+ },
+ "flow_html_url": {
+ "type": "string",
+ "title": "Flow Html Url",
+ "description": "The HTML URL to the flow to which the artifact belongs"
+ },
+ "deployment_diff": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Deployment Diff",
+ "description": "The diff with previous deployed artifact with the same name, including URL to commit diff"
+ },
+ "commit_lead_time": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Commit Lead Time",
+ "description": "The lead time of the commit; the diff between the commit timestamp and the time the artifact started running"
+ },
+ "artifact_compliance_in_flow": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Compliance In Flow",
+ "description": "Whether the artifact is compliant in the flow"
+ },
+ "flow_reasons_for_non_compliance": {
+ "anyOf": [
+ {
+ "items": {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Flow Reasons For Non Compliance",
+ "description": "The list of reasons for non-compliance of an artifact in the flow"
+ }
+ },
+ "type": "object",
+ "required": [
+ "flow_name",
+ "git_commit",
+ "commit_url",
+ "html_url",
+ "flow_html_url"
+ ],
+ "title": "SnapshotArtifactFlow"
+ },
+ "SnykAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "snyk_results": {
+ "$ref": "#/components/schemas/SnykResultsSummary"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "snyk_results"
+ ],
+ "title": "SnykAttestationPostInput",
+ "examples": [
+ {
+ "attestation_name": "snyk",
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "snyk_results": {
+ "results": [
+ {
+ "high": [],
+ "high_count": 0,
+ "low": [],
+ "low_count": 0,
+ "medium": [],
+ "medium_count": 0
+ }
+ ],
+ "schema_version": 1,
+ "tool": {
+ "name": "SnykCode",
+ "version": "1.0.0"
+ }
+ },
+ "user_data": {}
+ }
+ ]
+ },
+ "SnykResultsSummary": {
+ "properties": {
+ "schema_version": {
+ "type": "integer",
+ "title": "Schema Version",
+ "default": 1
+ },
+ "tool": {
+ "$ref": "#/components/schemas/SnykTool"
+ },
+ "results": {
+ "items": {
+ "$ref": "#/components/schemas/ProjectScanResult"
+ },
+ "type": "array",
+ "title": "Results"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "tool",
+ "results"
+ ],
+ "title": "SnykResultsSummary"
+ },
+ "SnykTool": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name"
+ },
+ "version": {
+ "type": "string",
+ "title": "Version"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name",
+ "version"
+ ],
+ "title": "SnykTool"
+ },
+ "SonarAttestationPostInput": {
+ "properties": {
+ "attestation_name": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$",
+ "title": "Attestation Name"
+ },
+ "origin_url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Origin Url"
+ },
+ "description": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Description"
+ },
+ "artifact_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string",
+ "pattern": "^[a-f0-9]{64}$"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Artifact Fingerprint"
+ },
+ "target_artifacts": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9\\-_,]+$"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Target Artifacts"
+ },
+ "git_commit_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/GitCommit"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "repo_info": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/RepoInfoPostInput"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "external_urls": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[^=.]+$": {
+ "$ref": "#/components/schemas/ExternalAttachmentUrl"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "External Urls"
+ },
+ "annotations": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[A-Za-z0-9_-]+$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Annotations"
+ },
+ "user_data": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "type": "object"
+ },
+ {
+ "items": {},
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "User Data"
+ },
+ "sonar_results": {
+ "$ref": "#/components/schemas/SonarResults"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "attestation_name",
+ "sonar_results"
+ ],
+ "title": "SonarAttestationPostInput",
+ "examples": [
+ {
+ "attestation_name": "sonar",
+ "git_commit_info": {
+ "author": "Jon Smith ",
+ "branch": "main",
+ "message": "adding glorious commit",
+ "sha1": "ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6",
+ "timestamp": 1750923680,
+ "url": "https://github.com/org/repo/commit/ae08fc6a5c963ae8dfaa0c27d8e5de9980d433b6"
+ },
+ "sonar_results": {
+ "analysedAt": "1724052982",
+ "project": {
+ "key": "xxx",
+ "name": "",
+ "url": "https://foo.com"
+ },
+ "qualityGate": {
+ "conditions": [
+ {
+ "errorThreshold": "xx",
+ "metric": "xx",
+ "operator": "xx",
+ "status": "OK"
+ }
+ ],
+ "name": "gate-1",
+ "status": "OK"
+ },
+ "revision": "649a645f2c138b7c626f2d9a33b4f3baaad1e213"
+ },
+ "user_data": {}
+ }
+ ]
+ },
+ "SonarProject": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "default": ""
+ },
+ "key": {
+ "type": "string",
+ "title": "Key"
+ },
+ "url": {
+ "type": "string",
+ "title": "Url"
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "key",
+ "url"
+ ],
+ "title": "SonarProject"
+ },
+ "SonarResults": {
+ "properties": {
+ "serverUrl": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Serverurl"
+ },
+ "taskId": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Taskid"
+ },
+ "status": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Status"
+ },
+ "analysedAt": {
+ "type": "string",
+ "title": "Analysedat"
+ },
+ "revision": {
+ "type": "string",
+ "title": "Revision"
+ },
+ "changedAt": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Changedat"
+ },
+ "project": {
+ "$ref": "#/components/schemas/SonarProject"
+ },
+ "qualityGate": {
+ "anyOf": [
+ {
+ "$ref": "#/components/schemas/QualityGate"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "additionalProperties": true,
+ "type": "object",
+ "required": [
+ "analysedAt",
+ "revision",
+ "project"
+ ],
+ "title": "SonarResults"
+ },
+ "TagPatchInput": {
+ "properties": {
+ "set_tags": {
+ "anyOf": [
+ {
+ "patternProperties": {
+ "^[a-zA-Z0-9][a-zA-Z0-9\\-_\\.~]*$": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Set Tags",
+ "description": "Dictionary of key-value tags to be added or updated"
+ },
+ "remove_tags": {
+ "anyOf": [
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Remove Tags",
+ "description": "List of tag keys to be removed"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "TagPatchInput",
+ "examples": [
+ {
+ "remove_tags": [
+ "key_to_delete"
+ ],
+ "set_tags": {
+ "key1": "value1"
+ }
+ }
+ ]
+ },
+ "Template": {
+ "properties": {
+ "version": {
+ "type": "integer",
+ "const": 1,
+ "title": "Version",
+ "description": "Template version",
+ "default": 1
+ },
+ "trail": {
+ "$ref": "#/components/schemas/TemplateTrailDefinition",
+ "description": "Trail definition in the template"
+ },
+ "content": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Content",
+ "description": "Raw YAML content of the template"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "trail"
+ ],
+ "title": "Template",
+ "description": "Flow template response model."
+ },
+ "TemplateArtifact": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the artifact"
+ },
+ "attestations": {
+ "items": {
+ "$ref": "#/components/schemas/TemplateAttestation"
+ },
+ "type": "array",
+ "title": "Attestations",
+ "description": "List of attestations for this artifact"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "title": "TemplateArtifact",
+ "description": "Artifact definition in a template."
+ },
+ "TemplateAttestation": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "title": "Name",
+ "description": "Name of the attestation"
+ },
+ "type": {
+ "type": "string",
+ "title": "Type",
+ "description": "Type of the attestation"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "name",
+ "type"
+ ],
+ "title": "TemplateAttestation",
+ "description": "Attestation definition in a template."
+ },
+ "TemplateTrailDefinition": {
+ "properties": {
+ "attestations": {
+ "items": {
+ "$ref": "#/components/schemas/TemplateAttestation"
+ },
+ "type": "array",
+ "title": "Attestations",
+ "description": "Trail-level attestations"
+ },
+ "artifacts": {
+ "items": {
+ "$ref": "#/components/schemas/TemplateArtifact"
+ },
+ "type": "array",
+ "title": "Artifacts",
+ "description": "Artifacts defined in the template"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "title": "TemplateTrailDefinition",
+ "description": "Trail definition within a template."
+ },
+ "TrailComplianceStatus": {
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": [
+ "INCOMPLETE",
+ "COMPLIANT",
+ "NON-COMPLIANT"
+ ],
+ "title": "Status",
+ "description": "Overall compliance status of the trail"
+ },
+ "is_compliant": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Is Compliant",
+ "description": "Whether the trail is compliant"
+ },
+ "attestations_statuses": {
+ "items": {
+ "$ref": "#/components/schemas/AttestationComplianceStatus"
+ },
+ "type": "array",
+ "title": "Attestations Statuses",
+ "description": "Trail-level attestation statuses"
+ },
+ "artifacts_statuses": {
+ "additionalProperties": {
+ "$ref": "#/components/schemas/ArtifactComplianceStatus"
+ },
+ "type": "object",
+ "title": "Artifacts Statuses",
+ "description": "Artifact compliance statuses keyed by artifact name"
+ },
+ "evaluated_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Evaluated At",
+ "description": "Timestamp when compliance was evaluated"
+ },
+ "flow_template_id": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Flow Template Id",
+ "description": "ID of the flow template used for evaluation"
+ }
+ },
+ "type": "object",
+ "required": [
+ "status"
+ ],
+ "title": "TrailComplianceStatus",
+ "description": "Trail compliance status response model."
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "integer"
+ }
+ ]
+ },
+ "type": "array",
+ "title": "Location"
+ },
+ "msg": {
+ "type": "string",
+ "title": "Message"
+ },
+ "type": {
+ "type": "string",
+ "title": "Error Type"
+ },
+ "input": {
+ "title": "Input"
+ },
+ "ctx": {
+ "type": "object",
+ "title": "Context"
+ }
+ },
+ "type": "object",
+ "required": [
+ "loc",
+ "msg",
+ "type"
+ ],
+ "title": "ValidationError"
+ },
+ "VersionedPolicy": {
+ "properties": {
+ "version": {
+ "type": "integer",
+ "title": "Version"
+ },
+ "comment": {
+ "type": "string",
+ "title": "Comment",
+ "default": ""
+ },
+ "timestamp": {
+ "type": "number",
+ "title": "Timestamp"
+ },
+ "created_by": {
+ "type": "string",
+ "title": "Created By"
+ },
+ "policy_yaml": {
+ "type": "string",
+ "title": "Policy Yaml"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "version",
+ "timestamp",
+ "created_by",
+ "policy_yaml"
+ ],
+ "title": "VersionedPolicy"
+ },
+ "WebhookActionTarget": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "WEBHOOK",
+ "title": "Type",
+ "default": "WEBHOOK"
+ },
+ "last_success_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success At"
+ },
+ "last_failure_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure At"
+ },
+ "webhook": {
+ "type": "string",
+ "title": "Webhook"
+ },
+ "payload_version": {
+ "type": "string",
+ "const": "1.0",
+ "title": "Payload Version",
+ "default": "1.0"
+ }
+ },
+ "additionalProperties": false,
+ "type": "object",
+ "required": [
+ "webhook"
+ ],
+ "title": "WebhookActionTarget"
+ },
+ "WebhookTargetResponse": {
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "WEBHOOK",
+ "title": "Type"
+ },
+ "webhook": {
+ "type": "string",
+ "title": "Webhook"
+ },
+ "payload_version": {
+ "type": "string",
+ "title": "Payload Version",
+ "default": "1.0"
+ },
+ "last_success_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Success At"
+ },
+ "last_failure_at": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Last Failure At"
+ }
+ },
+ "type": "object",
+ "required": [
+ "type",
+ "webhook"
+ ],
+ "title": "WebhookTargetResponse"
+ },
+ "fastapi_app__errors__BadRequestResponse___locals___BadRequestResponseModel__1": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "BadRequestResponseModel",
+ "description": "Can only add physical environments to logical environments",
+ "examples": [
+ {
+ "message": "Can only add physical environments to logical environments"
+ }
+ ]
+ },
+ "fastapi_app__errors__BadRequestResponse___locals___BadRequestResponseModel__2": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "BadRequestResponseModel",
+ "examples": [
+ {
+ "message": "Input payload validation failed"
+ }
+ ]
+ },
+ "fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__1": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ForbiddenResponseModel",
+ "examples": [
+ {
+ "message": "You don't have permission to access this resource"
+ }
+ ]
+ },
+ "fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__2": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ForbiddenResponseModel",
+ "description": "User does not have permission to archive environment",
+ "examples": [
+ {
+ "message": "User does not have permission to archive environment"
+ }
+ ]
+ },
+ "fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__3": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ForbiddenResponseModel",
+ "description": "User does not have permission to detach policy",
+ "examples": [
+ {
+ "message": "User does not have permission to detach policy"
+ }
+ ]
+ },
+ "fastapi_app__errors__ForbiddenResponse___locals___ForbiddenResponseModel__4": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ForbiddenResponseModel",
+ "examples": [
+ {
+ "message": "You don't have permission to access this resource"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__1": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__10": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__11": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Organization not found",
+ "examples": [
+ {
+ "message": "Organization not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__12": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__13": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__14": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__15": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__16": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__17": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__18": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__19": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__2": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__20": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__21": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__22": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__23": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__24": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__25": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__26": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__27": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment not found",
+ "examples": [
+ {
+ "message": "Environment not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__28": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Environment or policy not found",
+ "examples": [
+ {
+ "message": "Environment or policy not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__29": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Artifact not found",
+ "examples": [
+ {
+ "message": "Artifact not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__3": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "This attestation has no evidence file attached.",
+ "examples": [
+ {
+ "message": "This attestation has no evidence file attached."
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__30": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Policy not found",
+ "examples": [
+ {
+ "message": "Policy not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__31": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Action not found",
+ "examples": [
+ {
+ "message": "Action not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__32": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Action not found",
+ "examples": [
+ {
+ "message": "Action not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__33": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Action not found",
+ "examples": [
+ {
+ "message": "Action not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__34": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Resource not found",
+ "examples": [
+ {
+ "message": "Resource not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__35": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__36": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Organization not found",
+ "examples": [
+ {
+ "message": "Organization not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__37": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Repo not found",
+ "examples": [
+ {
+ "message": "Repo not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__38": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Search results are too ambiguous. For example: no matches for the provided value.",
+ "examples": [
+ {
+ "message": "Search results are too ambiguous. For example: no matches for the provided value."
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__4": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__5": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__6": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__7": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow not found",
+ "examples": [
+ {
+ "message": "Flow not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__8": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow or trail not found",
+ "examples": [
+ {
+ "message": "Flow or trail not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__NotFoundResponse___locals___NotFoundResponseModel__9": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "NotFoundResponseModel",
+ "description": "Flow or trail not found",
+ "examples": [
+ {
+ "message": "Flow or trail not found"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__1": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Input payload validation failed"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__10": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Input payload validation failed"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__11": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Input payload validation failed"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__12": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid notification payload",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid notification payload"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__13": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Input payload validation failed"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__14": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Input payload validation failed"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__2": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Input payload validation failed"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__3": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid report data",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid report data"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__4": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid report data",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid report data"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__5": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid report data",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid report data"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__6": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid report data",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid report data"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__7": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid report data",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid report data"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__8": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid report data",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid report data"
+ }
+ ]
+ },
+ "fastapi_app__errors__ValidationErrorResponse___locals___ValidationErrorResponseModel__9": {
+ "properties": {
+ "message": {
+ "type": "string",
+ "title": "Message",
+ "description": "Error message"
+ },
+ "errors": {
+ "anyOf": [
+ {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "title": "Errors",
+ "description": "Validation errors by field"
+ }
+ },
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "title": "ValidationErrorResponseModel",
+ "description": "Invalid report data",
+ "examples": [
+ {
+ "errors": {
+ "email": "Field must be a valid email address",
+ "name": "Field cannot be empty"
+ },
+ "message": "Invalid report data"
+ }
+ ]
+ }
+ },
+ "securitySchemes": {
+ "HTTPBearer": {
+ "type": "http",
+ "scheme": "bearer"
+ }
+ }
+ },
+ "security": [
+ {
+ "HTTPBearer": []
+ }
+ ],
+ "servers": [
+ {
+ "url": "https://app.kosli.com/api/v2/",
+ "description": "EU (default)"
+ },
+ {
+ "url": "https://app.us.kosli.com/api/v2/",
+ "description": "US"
+ }
+ ],
+ "tags": [
+ {
+ "name": "Actions"
+ },
+ {
+ "name": "Allowlists"
+ },
+ {
+ "name": "Approval"
+ },
+ {
+ "name": "Artifacts"
+ },
+ {
+ "name": "Asserts"
+ },
+ {
+ "name": "Attestation"
+ },
+ {
+ "name": "Builds"
+ },
+ {
+ "name": "Custom Attestation Types"
+ },
+ {
+ "name": "EnvDiff"
+ },
+ {
+ "name": "Environments"
+ },
+ {
+ "name": "Flows"
+ },
+ {
+ "name": "Organizations"
+ },
+ {
+ "name": "Policies"
+ },
+ {
+ "name": "Repos"
+ },
+ {
+ "name": "Search"
+ },
+ {
+ "name": "Snapshots"
+ },
+ {
+ "name": "Tags"
+ },
+ {
+ "name": "Trails"
+ },
+ {
+ "name": "User"
+ },
+ {
+ "name": "Webhooks"
}
- }
+ ]
}
\ No newline at end of file
diff --git a/config/navigation.json b/config/navigation.json
index 6c87960..51d3b82 100644
--- a/config/navigation.json
+++ b/config/navigation.json
@@ -402,12 +402,194 @@
{
"item": "API Reference",
"icon": "code",
+ "openapi": "api-reference/openapi.json",
"groups": [
+ {
+ "group": "Actions",
+ "pages": [
+ "GET /actions/{org}",
+ "GET /actions/{org}/{action_number}",
+ "PUT /actions/{org}/environments",
+ "PUT /actions/{org}/flows",
+ "DELETE /actions/{org}/{action_number}"
+ ]
+ },
+ {
+ "group": "Allowlists",
+ "pages": [
+ "GET /allowlists/{org}",
+ "PUT /allowlists/{org}/{env_name}"
+ ]
+ },
+ {
+ "group": "Approvals",
+ "pages": [
+ "GET /approvals/{org}/{flow_name}",
+ "GET /approvals/{org}/{flow_name}/{approval_number}",
+ "GET /approvals/{org}/{flow_name}/artifact-commit/{env_name}",
+ "POST /approvals/{org}/{flow_name}"
+ ]
+ },
+ {
+ "group": "Artifacts",
+ "pages": [
+ "GET /artifacts/{org}",
+ "GET /artifacts/{org}/{flow_name}",
+ "GET /artifacts/{org}/{flow_name}/commit_sha/{commit_sha}",
+ "GET /artifacts/{org}/{flow_name}/fingerprint/{fingerprint}",
+ "GET /artifacts/{org}/{flow_name}/{fingerprint}/approvals",
+ "GET /artifacts/{org}/{flow_name}/{fingerprint}/audit_package",
+ "GET /artifacts/{org}/{flow_name}/{fingerprint}/latest_commit",
+ "POST /artifacts/{org}/{flow_name}"
+ ]
+ },
+ {
+ "group": "Asserts",
+ "pages": [
+ "GET /asserts/{org}/fingerprint/{fingerprint}"
+ ]
+ },
+ {
+ "group": "Attestations",
+ "pages": [
+ "GET /attestations/{org}",
+ "GET /attestations/{org}/list_attestations_for_criteria",
+ "GET /attestations/{org}/{flow_name}",
+ "GET /attestations/{org}/{flow_name}/artifact/{fingerprint}/{attestation_name}",
+ "GET /attestations/{org}/{flow_name}/trail/{trail_name}/{attestation_name}",
+ "GET /attestations/{org}/{flow_name}/trail/{trail_name}/attestation/{attestation_id}/evidence",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/custom",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/generic",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/jira",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/junit",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/override",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/pull_request",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/snyk",
+ "POST /attestations/{org}/{flow_name}/trail/{trail_name}/sonar"
+ ]
+ },
+ {
+ "group": "Builds",
+ "pages": [
+ "GET /builds/{org}"
+ ]
+ },
+ {
+ "group": "Custom Attestation Types",
+ "pages": [
+ "GET /custom-attestation-types/{org}",
+ "GET /custom-attestation-types/{org}/{custom_attestation_type_name}",
+ "POST /custom-attestation-types/{org}",
+ "PUT /custom-attestation-types/{org}/{custom_attestation_type_name}/archive"
+ ]
+ },
+ {
+ "group": "Environment Diff",
+ "pages": [
+ "GET /env-diff/{org}"
+ ]
+ },
{
"group": "Environments",
"pages": [
- "api-reference/endpoint/list_environments",
- "api-reference/endpoint/put_environment"
+ "GET /environments/{org}",
+ "GET /environments/{org}/{env_name}",
+ "GET /environments/{org}/{env_name}/auditlog",
+ "GET /environments/{org}/{env_name}/events",
+ "PUT /environments/{org}",
+ "PUT /environments/{org}/{env_name}/archive",
+ "PUT /environments/{org}/{env_name}/join",
+ "PUT /environments/{org}/{env_name}/rename",
+ "PUT /environments/{org}/{env_name}/report/ECS",
+ "PUT /environments/{org}/{env_name}/report/K8S",
+ "PUT /environments/{org}/{env_name}/report/S3",
+ "PUT /environments/{org}/{env_name}/report/azure-apps",
+ "PUT /environments/{org}/{env_name}/report/docker",
+ "PUT /environments/{org}/{env_name}/report/lambda",
+ "PUT /environments/{org}/{env_name}/report/server",
+ "POST /environments/{org}/{env_name}/policies",
+ "DELETE /environments/{org}/{env_name}/policies"
+ ]
+ },
+ {
+ "group": "Flows",
+ "pages": [
+ "GET /flows/{org}",
+ "GET /flows/{org}/{flow_name}",
+ "PUT /flows/{org}",
+ "PUT /flows/{org}/template_file",
+ "PUT /flows/{org}/{flow_name}/archive",
+ "PUT /flows/{org}/{flow_name}/rename"
+ ]
+ },
+ {
+ "group": "Organizations",
+ "pages": [
+ "GET /organizations/{org}",
+ "GET /organizations/{org}/environments_notifications",
+ "GET /organizations/{org}/environments_notifications/{notification_number}",
+ "PUT /organizations/{org}/environments_notifications",
+ "PUT /organizations/{org}/environments_notifications/{notification_number}",
+ "DELETE /organizations/{org}/environments_notifications/{notification_number}",
+ "PUT /organizations/{org}/experimental_features"
+ ]
+ },
+ {
+ "group": "Policies",
+ "pages": [
+ "GET /policies/{org}",
+ "GET /policies/{org}/{policy_name}",
+ "PUT /policies/{org}"
+ ]
+ },
+ {
+ "group": "Repos",
+ "pages": [
+ "GET /repos/{org}",
+ "GET /repos/{org}/live-artifacts/{repo_name}"
+ ]
+ },
+ {
+ "group": "Search",
+ "pages": [
+ "GET /search/{org}/sha/{search_value}"
+ ]
+ },
+ {
+ "group": "Snapshots",
+ "pages": [
+ "GET /snapshots/{org}/{env_name}",
+ "GET /snapshots/{org}/{env_name}/{snapshot_expression}"
+ ]
+ },
+ {
+ "group": "Tags",
+ "pages": [
+ "PATCH /tags/{org}/{resource_type}/{resource_id}"
+ ]
+ },
+ {
+ "group": "Trails",
+ "pages": [
+ "GET /trails/{org}",
+ "GET /trails/{org}/{flow_name}",
+ "GET /trails/{org}/{flow_name}/{trail_name}",
+ "GET /trails/{org}/{flow_name}/{trail_name}/audit_package",
+ "GET /trails/{org}/{flow_name}/{trail_name}/audit_pdf",
+ "PUT /trails/{org}/{flow_name}"
+ ]
+ },
+ {
+ "group": "User",
+ "pages": [
+ "PUT /user/{org}"
+ ]
+ },
+ {
+ "group": "Webhooks",
+ "pages": [
+ "POST /webhooks/launch-darkly/{hook_uid}",
+ "POST /webhooks/sonar/{hook_uid}"
]
}
]
diff --git a/docs.json b/docs.json
index 70969fd..3cb76e6 100644
--- a/docs.json
+++ b/docs.json
@@ -11,11 +11,8 @@
"family": "IBM Plex Sans"
},
"api": {
- "mdx": {
- "server": "https://app.kosli.com/api/v2/",
- "auth": {
- "method": "bearer"
- }
+ "playground": {
+ "display": "interactive"
}
},
"styling": {