> For the complete documentation index, see [llms.txt](https://argos-ci.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://argos-ci.com/docs/api-reference/reference/tests.md).

# Tests

Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise.

## Ignore a test change

> Ignore a test change so its diffs no longer require review and are automatically approved on future builds. Use it to silence a change that has been identified as flaky.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"personalAccessToken":[]},{"oauth2":["reviews:write"]}],"components":{"securitySchemes":{"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"Change":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the change (a test + fingerprint pair). Use it with the ignore/unignore endpoints."},"ignored":{"type":"boolean","description":"Whether this change is currently ignored. Ignored changes no longer require review and are automatically approved."},"occurrences":{"type":"number","description":"Number of times this change has been seen over the metrics period. A high count for a recurring change is a strong flakiness signal."}},"required":["id","ignored","occurrences"],"additionalProperties":false,"description":"A test change: a specific visual difference (fingerprint) of a test that can be ignored to silence flaky changes."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/changes/{changeId}/ignore":{"post":{"operationId":"ignoreChange","summary":"Ignore a test change","description":"Ignore a test change so its diffs no longer require review and are automatically approved on future builds. Use it to silence a change that has been identified as flaky.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"changeId","schema":{"type":"string","description":"Identifier of the change to update, as returned in a diff's `change.id`."},"required":true,"description":"Identifier of the change to update, as returned in a diff's `change.id`."},{"in":"query","name":"metricsPeriod","schema":{"default":"LAST_7_DAYS","description":"Period over which the test flakiness metrics are computed.","type":"string","enum":["LAST_24_HOURS","LAST_3_DAYS","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS"]},"description":"Period over which the test flakiness metrics are computed."}],"responses":{"200":{"description":"Change ignored — returns the updated change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Change"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Unignore a test change

> Stop ignoring a test change so its diffs require review again on future builds.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"personalAccessToken":[]},{"oauth2":["reviews:write"]}],"components":{"securitySchemes":{"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"Change":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the change (a test + fingerprint pair). Use it with the ignore/unignore endpoints."},"ignored":{"type":"boolean","description":"Whether this change is currently ignored. Ignored changes no longer require review and are automatically approved."},"occurrences":{"type":"number","description":"Number of times this change has been seen over the metrics period. A high count for a recurring change is a strong flakiness signal."}},"required":["id","ignored","occurrences"],"additionalProperties":false,"description":"A test change: a specific visual difference (fingerprint) of a test that can be ignored to silence flaky changes."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/changes/{changeId}/unignore":{"post":{"operationId":"unignoreChange","summary":"Unignore a test change","description":"Stop ignoring a test change so its diffs require review again on future builds.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"changeId","schema":{"type":"string","description":"Identifier of the change to update, as returned in a diff's `change.id`."},"required":true,"description":"Identifier of the change to update, as returned in a diff's `change.id`."},{"in":"query","name":"metricsPeriod","schema":{"default":"LAST_7_DAYS","description":"Period over which the test flakiness metrics are computed.","type":"string","enum":["LAST_24_HOURS","LAST_3_DAYS","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS"]},"description":"Period over which the test flakiness metrics are computed."}],"responses":{"200":{"description":"Change unignored — returns the updated change","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Change"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Subscribe to a test

> Start receiving notifications about a test — new comments and the changes it produces. Clears a previous explicit unsubscription.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"personalAccessToken":[]},{"oauth2":["comments:write"]}],"components":{"securitySchemes":{"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"TestId":{"type":"string","description":"The test identifier, as returned in a diff's `test.id`"},"NotificationSubscription":{"type":"object","properties":{"subscribed":{"type":"boolean","description":"Whether the authenticated user now receives notifications for this resource."}},"required":["subscribed"],"additionalProperties":false,"description":"A notification subscription."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/tests/{testId}/subscription":{"post":{"operationId":"subscribeTest","summary":"Subscribe to a test","description":"Start receiving notifications about a test — new comments and the changes it produces. Clears a previous explicit unsubscription.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"testId","schema":{"$ref":"#/components/schemas/TestId"},"required":true,"description":"The test identifier, as returned in a diff's `test.id`"}],"responses":{"200":{"description":"Subscribed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSubscription"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Unsubscribe from a test

> Stop receiving notifications about a test. Recorded as an intentional unsubscription, so Argos will not auto-subscribe you to it again.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"personalAccessToken":[]},{"oauth2":["comments:write"]}],"components":{"securitySchemes":{"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"TestId":{"type":"string","description":"The test identifier, as returned in a diff's `test.id`"},"NotificationSubscription":{"type":"object","properties":{"subscribed":{"type":"boolean","description":"Whether the authenticated user now receives notifications for this resource."}},"required":["subscribed"],"additionalProperties":false,"description":"A notification subscription."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/tests/{testId}/subscription":{"delete":{"operationId":"unsubscribeTest","summary":"Unsubscribe from a test","description":"Stop receiving notifications about a test. Recorded as an intentional unsubscription, so Argos will not auto-subscribe you to it again.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"testId","schema":{"$ref":"#/components/schemas/TestId"},"required":true,"description":"The test identifier, as returned in a diff's `test.id`"}],"responses":{"200":{"description":"Unsubscribed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSubscription"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## List a project's tests

> List the tests currently running in a project, flakiest first. A test is listed when it appeared in the latest reference build of its build name — tests that were deleted, renamed or skipped drop out. Use it to find what to stabilise: the first page is the project's flakiness backlog.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"projectToken":[]},{"personalAccessToken":[]},{"oauth2":["projects:read"]}],"components":{"securitySchemes":{"projectToken":{"type":"http","scheme":"bearer","bearerFormat":"Project Token","description":"Authenticate as a **project** with a project token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <project-token>\n```\n\nYou can find your project token in your Argos project settings.\nProject tokens are used by CI and the SDK to create builds and\ndeployments."},"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"PageInfo":{"type":"object","properties":{"total":{"type":"number","description":"Total number of items"},"page":{"type":"number","description":"Current page number"},"perPage":{"type":"number","description":"Number of items per page"}},"required":["total","page","perPage"],"additionalProperties":false,"description":"Page information"},"TestSummary":{"description":"A test with its flakiness metrics over the requested period. Fetch the test itself for its history and the changes behind the score.","$ref":"#/components/schemas/Test"},"Test":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the test"},"name":{"type":"string","description":"Name of the test"},"buildName":{"type":"string","description":"Name of the build the test belongs to"},"metrics":{"$ref":"#/components/schemas/TestMetrics"}},"required":["id","name","buildName","metrics"],"additionalProperties":false,"description":"Test associated to a diff, with flakiness metrics to help decide whether a change is worth reviewing."},"TestMetrics":{"type":"object","properties":{"total":{"type":"number","description":"Number of builds in which this test ran over the metrics period."},"changes":{"type":"number","description":"Number of times the test changed (produced a diff) over the metrics period."},"uniqueChanges":{"type":"number","description":"Number of changes that were seen only once over the metrics period. A high ratio of unique changes is a strong flakiness signal."},"stability":{"type":"number","description":"Ratio of builds without a change, between 0 and 1. `1` means the test never changed."},"consistency":{"type":"number","description":"How consistent the changes are, between 0 and 1. `1` means changes repeat the same way; a low value means changes are erratic."},"flakiness":{"type":"number","description":"Overall flakiness score between 0 and 1, derived from stability and consistency. `0` means stable, `1` means highly flaky."}},"required":["total","changes","uniqueChanges","stability","consistency","flakiness"],"additionalProperties":false,"description":"Flakiness metrics of a test over the requested period."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/tests":{"get":{"operationId":"listTests","summary":"List a project's tests","description":"List the tests currently running in a project, flakiest first. A test is listed when it appeared in the latest reference build of its build name — tests that were deleted, renamed or skipped drop out. Use it to find what to stabilise: the first page is the project's flakiness backlog.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"perPage","schema":{"description":"Number of items per page (max 100)","type":"string"},"description":"Number of items per page (max 100)"},{"in":"query","name":"page","schema":{"description":"Page number","type":"string"},"description":"Page number"},{"in":"query","name":"metricsPeriod","schema":{"default":"LAST_7_DAYS","description":"Period over which the test flakiness metrics are computed.","type":"string","enum":["LAST_24_HOURS","LAST_3_DAYS","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS"]},"description":"Period over which the test flakiness metrics are computed."},{"in":"query","name":"buildName","schema":{"description":"Restrict to the tests of a single build name.","type":"string"},"description":"Restrict to the tests of a single build name."},{"in":"query","name":"search","schema":{"description":"Match tests on their name.","type":"string"},"description":"Match tests on their name."}],"responses":{"200":{"description":"List of the project's tests, flakiest first","content":{"application/json":{"schema":{"type":"object","properties":{"pageInfo":{"$ref":"#/components/schemas/PageInfo"},"results":{"type":"array","items":{"$ref":"#/components/schemas/TestSummary"}}},"required":["pageInfo","results"],"additionalProperties":false}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## List a project's ignored changes

> List the changes currently ignored in a project, most recently ignored first. Use it to audit what has been silenced and to unignore anything that should be reviewed again.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"projectToken":[]},{"personalAccessToken":[]},{"oauth2":["projects:read"]}],"components":{"securitySchemes":{"projectToken":{"type":"http","scheme":"bearer","bearerFormat":"Project Token","description":"Authenticate as a **project** with a project token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <project-token>\n```\n\nYou can find your project token in your Argos project settings.\nProject tokens are used by CI and the SDK to create builds and\ndeployments."},"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"PageInfo":{"type":"object","properties":{"total":{"type":"number","description":"Total number of items"},"page":{"type":"number","description":"Current page number"},"perPage":{"type":"number","description":"Number of items per page"}},"required":["total","page","perPage"],"additionalProperties":false,"description":"Page information"},"IgnoredChange":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the ignored change, accepted by the unignore endpoint."},"test":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"buildName":{"type":"string"}},"required":["id","name","buildName"],"additionalProperties":false,"description":"The test the ignored change belongs to."}},"required":["id","test"],"additionalProperties":false,"description":"A change currently ignored in a project: it no longer requires review and is approved automatically."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/ignored-changes":{"get":{"operationId":"listIgnoredChanges","summary":"List a project's ignored changes","description":"List the changes currently ignored in a project, most recently ignored first. Use it to audit what has been silenced and to unignore anything that should be reviewed again.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"query","name":"perPage","schema":{"description":"Number of items per page (max 100)","type":"string"},"description":"Number of items per page (max 100)"},{"in":"query","name":"page","schema":{"description":"Page number","type":"string"},"description":"Page number"}],"responses":{"200":{"description":"List of the project's ignored changes","content":{"application/json":{"schema":{"type":"object","properties":{"pageInfo":{"$ref":"#/components/schemas/PageInfo"},"results":{"type":"array","items":{"$ref":"#/components/schemas/IgnoredChange"}}},"required":["pageInfo","results"],"additionalProperties":false}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## Get a test and its flakiness metrics

> Get a test with its flakiness metrics over a period: how many builds ran it, how many times it changed, and how stable and consistent those changes were. The metrics also come bucketed over time, so you can tell a test that has always been flaky from one that started recently. Pair it with \`listTestChanges\` to see what actually keeps changing.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"projectToken":[]},{"personalAccessToken":[]},{"oauth2":["projects:read"]}],"components":{"securitySchemes":{"projectToken":{"type":"http","scheme":"bearer","bearerFormat":"Project Token","description":"Authenticate as a **project** with a project token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <project-token>\n```\n\nYou can find your project token in your Argos project settings.\nProject tokens are used by CI and the SDK to create builds and\ndeployments."},"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"TestId":{"type":"string","description":"The test identifier, as returned in a diff's `test.id`"},"TestDetails":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the test"},"name":{"type":"string","description":"Name of the test"},"buildName":{"type":"string","description":"Name of the build the test belongs to"},"metrics":{"$ref":"#/components/schemas/TestMetrics"},"status":{"$ref":"#/components/schemas/TestStatus"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When Argos first saw this test."},"url":{"type":"string","format":"uri","description":"URL of the test in Argos."},"series":{"type":"array","items":{"$ref":"#/components/schemas/TestMetricsDataPoint"},"description":"The test's metrics bucketed over the requested period, oldest first. Use it to tell a test that has always been flaky from one that only started recently."},"firstSeenChange":{"anyOf":[{"$ref":"#/components/schemas/TestChangeOccurrence"},{"type":"null"}],"description":"The first time this test ever changed, whatever the period. Null when it never changed."},"lastSeenChange":{"anyOf":[{"$ref":"#/components/schemas/TestChangeOccurrence"},{"type":"null"}],"description":"The last time this test changed, whatever the period. Null when it never changed."}},"required":["id","name","buildName","metrics","status","createdAt","url","series","firstSeenChange","lastSeenChange"],"additionalProperties":false,"description":"A test with its flakiness metrics, both aggregated and over time, and when it first and last changed."},"TestMetrics":{"type":"object","properties":{"total":{"type":"number","description":"Number of builds in which this test ran over the metrics period."},"changes":{"type":"number","description":"Number of times the test changed (produced a diff) over the metrics period."},"uniqueChanges":{"type":"number","description":"Number of changes that were seen only once over the metrics period. A high ratio of unique changes is a strong flakiness signal."},"stability":{"type":"number","description":"Ratio of builds without a change, between 0 and 1. `1` means the test never changed."},"consistency":{"type":"number","description":"How consistent the changes are, between 0 and 1. `1` means changes repeat the same way; a low value means changes are erratic."},"flakiness":{"type":"number","description":"Overall flakiness score between 0 and 1, derived from stability and consistency. `0` means stable, `1` means highly flaky."}},"required":["total","changes","uniqueChanges","stability","consistency","flakiness"],"additionalProperties":false,"description":"Flakiness metrics of a test over the requested period."},"TestStatus":{"type":"string","enum":["ongoing","removed"],"description":"`ongoing` when the test still runs — it showed up in the latest build of its build name. `removed` when it did not, so it was deleted, renamed or skipped."},"TestMetricsDataPoint":{"type":"object","properties":{"date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Start of the time bucket."},"total":{"type":"number","description":"Number of builds in which the test ran in this bucket."},"changes":{"type":"number","description":"Number of times the test changed in this bucket."},"uniqueChanges":{"type":"number","description":"Number of those changes that were seen only once."}},"required":["date","total","changes","uniqueChanges"],"additionalProperties":false,"description":"One bucket of a test's metrics over time. The bucket size is derived from the requested period."},"TestChangeOccurrence":{"type":"object","properties":{"date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When the diff was captured."},"url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Public URL of the diff image. Null when the image is no longer available."},"buildNumber":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of the build that captured the diff."},"buildUrl":{"type":"string","format":"uri","description":"URL of that build in Argos."}},"required":["date","url","buildNumber","buildUrl"],"additionalProperties":false,"description":"A single appearance of a change, in the build that saw it."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/tests/{testId}":{"get":{"operationId":"getTest","summary":"Get a test and its flakiness metrics","description":"Get a test with its flakiness metrics over a period: how many builds ran it, how many times it changed, and how stable and consistent those changes were. The metrics also come bucketed over time, so you can tell a test that has always been flaky from one that started recently. Pair it with `listTestChanges` to see what actually keeps changing.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"testId","schema":{"$ref":"#/components/schemas/TestId"},"required":true,"description":"The test identifier, as returned in a diff's `test.id`"},{"in":"query","name":"metricsPeriod","schema":{"default":"LAST_7_DAYS","description":"Period over which the test flakiness metrics are computed.","type":"string","enum":["LAST_24_HOURS","LAST_3_DAYS","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS"]},"description":"Period over which the test flakiness metrics are computed."}],"responses":{"200":{"description":"The test and its flakiness metrics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestDetails"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````

## List a test's changes

> List the distinct changes a test produced over a period, the ones that came back most often first. Each change is one exact visual difference, with how many times it reappeared, whether it is ignored, and the diff of its latest occurrence — so you can look at what moved. A change that keeps reappearing while nothing in the UI changed is a flaky one: fix what makes it unstable, or silence it with \`ignoreChange\`.

````json
{"openapi":"3.2.0","info":{"title":"Argos API","version":"2.0.0"},"tags":[{"name":"Tests","description":"Inspect a test's flakiness — how often it changed and how erratically — list the changes that keep coming back, and ignore the ones that are only noise."}],"servers":[{"url":"https://api.argos-ci.com/v2","description":"API Endpoint"}],"security":[{"projectToken":[]},{"personalAccessToken":[]},{"oauth2":["projects:read"]}],"components":{"securitySchemes":{"projectToken":{"type":"http","scheme":"bearer","bearerFormat":"Project Token","description":"Authenticate as a **project** with a project token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <project-token>\n```\n\nYou can find your project token in your Argos project settings.\nProject tokens are used by CI and the SDK to create builds and\ndeployments."},"personalAccessToken":{"type":"http","scheme":"bearer","bearerFormat":"Personal Access Token","description":"Authenticate as a **user** with a personal access token.\n\nSend it as a bearer token in the `Authorization` header:\n\n```http\nAuthorization: Bearer <personal-access-token>\n```\n\nPersonal access tokens act on behalf of the user that created them\nand are required by endpoints that perform user actions, such as\nreviewing builds and posting comments."},"oauth2":{"type":"oauth2","description":"Authenticate as a **user** via an OAuth 2.1 access token obtained\nthrough the authorization-code (+ PKCE) flow. Used by the CLI and by\nMCP clients/agents. The token acts on behalf of the authorizing user,\nlimited to the granted scopes and organizations.","flows":{"authorizationCode":{"authorizationUrl":"https://app.argos-ci.com/oauth/authorize","tokenUrl":"https://app.argos-ci.com/oauth/token","refreshUrl":"https://app.argos-ci.com/oauth/token","scopes":{"profile":"Read your Argos profile and the list of teams you belong to.","projects:read":"Read your projects, builds, screenshots, diffs, tests, and analytics.","projects:write":"Create and configure projects and their settings.","builds:write":"Create and upload builds and screenshots.","reviews:write":"Approve, reject, or dismiss build reviews and ignore changes.","comments:read":"Read build comments and threads.","comments:write":"Post, edit, and delete comments, add reactions, and manage subscriptions.","media:read":"Read the images and videos uploaded to your teams.","media:write":"Upload images and videos, and delete the ones already uploaded.","account:admin":"Manage organization settings and members."}}}}},"schemas":{"TestId":{"type":"string","description":"The test identifier, as returned in a diff's `test.id`"},"PageInfo":{"type":"object","properties":{"total":{"type":"number","description":"Total number of items"},"page":{"type":"number","description":"Current page number"},"perPage":{"type":"number","description":"Number of items per page"}},"required":["total","page","perPage"],"additionalProperties":false,"description":"Page information"},"TestChange":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the change (a test + fingerprint pair). Use it with the ignore/unignore endpoints."},"ignored":{"type":"boolean","description":"Whether this change is currently ignored. Ignored changes no longer require review and are automatically approved."},"occurrences":{"type":"number","description":"Number of times this change has been seen over the metrics period. A high count for a recurring change is a strong flakiness signal."},"firstSeen":{"description":"The first time this change was seen over the period.","$ref":"#/components/schemas/TestChangeOccurrence"},"lastSeen":{"description":"The last time this change was seen over the period.","$ref":"#/components/schemas/TestChangeOccurrence"},"diff":{"description":"The diff captured the last time the change was seen, with the baseline and the captured snapshot, so you can look at what moved.","$ref":"#/components/schemas/SnapshotDiff"}},"required":["id","ignored","occurrences","firstSeen","lastSeen","diff"],"additionalProperties":false,"description":"One distinct change of a test: an exact visual difference, with how often it came back over the period. A change that keeps reappearing while nothing in the UI changed is a flaky one."},"TestChangeOccurrence":{"type":"object","properties":{"date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When the diff was captured."},"url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Public URL of the diff image. Null when the image is no longer available."},"buildNumber":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of the build that captured the diff."},"buildUrl":{"type":"string","format":"uri","description":"URL of that build in Argos."}},"required":["date","url","buildNumber","buildUrl"],"additionalProperties":false,"description":"A single appearance of a change, in the build that saw it."},"SnapshotDiff":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the snapshot diff"},"name":{"type":"string","description":"Name of the snapshot diff"},"status":{"type":"string","enum":["pending","removed","failure","added","changed","unchanged","retryFailure","ignored"],"description":"Status of the snapshot diff"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Similarity score between snapshots"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Grouping key for the snapshot diff"},"parentName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Parent name of the snapshot (usually the story id)"},"url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"URL of the diff image"},"base":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the snapshot"},"name":{"type":"string","description":"Name of the snapshot"},"metadata":{"anyOf":[{"type":"object","properties":{"$schema":{"description":"Ignored. Can be set to get completions, validations and documentation in some editors.","type":"string"},"url":{"description":"The URL of the page that was screenshotted","anyOf":[{"type":"string"},{"type":"null"}]},"previewUrl":{"description":"An URL to an accessible preview of the screenshot","anyOf":[{"type":"string"},{"type":"null"}]},"viewport":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The width of the viewport"},"height":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The height of the viewport"}},"required":["width","height"],"additionalProperties":false,"description":"The viewport dimensions when the screenshot was taken"},{"type":"null"}]},"colorScheme":{"description":"The color scheme when the screenshot was taken","anyOf":[{"type":"string","enum":["light","dark"]},{"type":"null"}]},"mediaType":{"description":"The media type when the screenshot was taken","anyOf":[{"type":"string","enum":["screen","print"]},{"type":"null"}]},"test":{"anyOf":[{"type":"object","properties":{"id":{"description":"The unique identifier of the test","anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string","description":"The title of the test"},"titlePath":{"type":"array","items":{"type":"string"},"description":"The path of titles leading to the test"},"retries":{"description":"The number of retries for the test","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"retry":{"description":"The current retry count","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"repeat":{"description":"The repeat count for the test","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"location":{"description":"The location of the test in the source code","type":"object","properties":{"file":{"type":"string","description":"The located file"},"line":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The line number in the file"},"column":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The column number in the file"}},"required":["file","line","column"],"additionalProperties":false},"annotations":{"description":"Annotations associated to the test","type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of annotation"},"description":{"description":"The description of the annotation","type":"string"},"location":{"description":"The location of the annotation in the source code","type":"object","properties":{"file":{"type":"string","description":"The located file"},"line":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The line number in the file"},"column":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The column number in the file"}},"required":["file","line","column"],"additionalProperties":false}},"required":["type"],"additionalProperties":false,"description":"A test annotation"}},"tags":{"description":"Tags associated to the test","type":"array","items":{"type":"string"}}},"required":["title","titlePath"],"additionalProperties":false,"description":"The test that generated the screenshot"},{"type":"null"}]},"browser":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","description":"The name of the browser"},"version":{"type":"string","description":"The version of the browser"}},"required":["name","version"],"additionalProperties":false,"description":"The browser that generated the screenshot"},{"type":"null"}]},"automationLibrary":{"type":"object","properties":{"name":{"type":"string","description":"The name of the automation library"},"version":{"type":"string","description":"The version of the automation library"}},"required":["name","version"],"additionalProperties":false,"description":"The automation library that generated the screenshot"},"sdk":{"type":"object","properties":{"name":{"type":"string","description":"The name of the Argos SDK"},"version":{"type":"string","description":"The version of the Argos SDK"}},"required":["name","version"],"additionalProperties":false,"description":"The Argos SDK that generated the screenshot"},"story":{"description":"Storybook story metadata","anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique ID of the story"},"tags":{"description":"Tags attached to the story","type":"array","items":{"type":"string"}},"mode":{"description":"Story mode","type":"string"},"play":{"description":"True if the story has a play function","type":"boolean"}},"required":["id"],"additionalProperties":false,"description":"Storybook story metadata"},{"type":"null"}]},"tags":{"description":"Tags associated to the screenshot","type":"array","items":{"type":"string"}}},"required":["automationLibrary","sdk"],"additionalProperties":false,"description":"Metadata about a screenshot"},{"type":"null"}]},"width":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Width of the screenshot in pixels"},"height":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Height of the screenshot in pixels"},"url":{"type":"string","format":"uri","description":"Public URL of the snapshot"},"contentType":{"type":"string","description":"Content type of the snapshot file"}},"required":["id","name","metadata","width","height","url","contentType"],"additionalProperties":false,"description":"Snapshot associated to a diff"},{"type":"null"}]},"head":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the snapshot"},"name":{"type":"string","description":"Name of the snapshot"},"metadata":{"anyOf":[{"type":"object","properties":{"$schema":{"description":"Ignored. Can be set to get completions, validations and documentation in some editors.","type":"string"},"url":{"description":"The URL of the page that was screenshotted","anyOf":[{"type":"string"},{"type":"null"}]},"previewUrl":{"description":"An URL to an accessible preview of the screenshot","anyOf":[{"type":"string"},{"type":"null"}]},"viewport":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The width of the viewport"},"height":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The height of the viewport"}},"required":["width","height"],"additionalProperties":false,"description":"The viewport dimensions when the screenshot was taken"},{"type":"null"}]},"colorScheme":{"description":"The color scheme when the screenshot was taken","anyOf":[{"type":"string","enum":["light","dark"]},{"type":"null"}]},"mediaType":{"description":"The media type when the screenshot was taken","anyOf":[{"type":"string","enum":["screen","print"]},{"type":"null"}]},"test":{"anyOf":[{"type":"object","properties":{"id":{"description":"The unique identifier of the test","anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string","description":"The title of the test"},"titlePath":{"type":"array","items":{"type":"string"},"description":"The path of titles leading to the test"},"retries":{"description":"The number of retries for the test","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"retry":{"description":"The current retry count","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"repeat":{"description":"The repeat count for the test","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"location":{"description":"The location of the test in the source code","type":"object","properties":{"file":{"type":"string","description":"The located file"},"line":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The line number in the file"},"column":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The column number in the file"}},"required":["file","line","column"],"additionalProperties":false},"annotations":{"description":"Annotations associated to the test","type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of annotation"},"description":{"description":"The description of the annotation","type":"string"},"location":{"description":"The location of the annotation in the source code","type":"object","properties":{"file":{"type":"string","description":"The located file"},"line":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The line number in the file"},"column":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The column number in the file"}},"required":["file","line","column"],"additionalProperties":false}},"required":["type"],"additionalProperties":false,"description":"A test annotation"}},"tags":{"description":"Tags associated to the test","type":"array","items":{"type":"string"}}},"required":["title","titlePath"],"additionalProperties":false,"description":"The test that generated the screenshot"},{"type":"null"}]},"browser":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","description":"The name of the browser"},"version":{"type":"string","description":"The version of the browser"}},"required":["name","version"],"additionalProperties":false,"description":"The browser that generated the screenshot"},{"type":"null"}]},"automationLibrary":{"type":"object","properties":{"name":{"type":"string","description":"The name of the automation library"},"version":{"type":"string","description":"The version of the automation library"}},"required":["name","version"],"additionalProperties":false,"description":"The automation library that generated the screenshot"},"sdk":{"type":"object","properties":{"name":{"type":"string","description":"The name of the Argos SDK"},"version":{"type":"string","description":"The version of the Argos SDK"}},"required":["name","version"],"additionalProperties":false,"description":"The Argos SDK that generated the screenshot"},"story":{"description":"Storybook story metadata","anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique ID of the story"},"tags":{"description":"Tags attached to the story","type":"array","items":{"type":"string"}},"mode":{"description":"Story mode","type":"string"},"play":{"description":"True if the story has a play function","type":"boolean"}},"required":["id"],"additionalProperties":false,"description":"Storybook story metadata"},{"type":"null"}]},"tags":{"description":"Tags associated to the screenshot","type":"array","items":{"type":"string"}}},"required":["automationLibrary","sdk"],"additionalProperties":false,"description":"Metadata about a screenshot"},{"type":"null"}]},"width":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Width of the screenshot in pixels"},"height":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Height of the screenshot in pixels"},"url":{"type":"string","format":"uri","description":"Public URL of the snapshot"},"contentType":{"type":"string","description":"Content type of the snapshot file"}},"required":["id","name","metadata","width","height","url","contentType"],"additionalProperties":false,"description":"Snapshot associated to a diff"},{"type":"null"}]},"test":{"anyOf":[{"$ref":"#/components/schemas/Test"},{"type":"null"}]},"change":{"anyOf":[{"$ref":"#/components/schemas/Change"},{"type":"null"}]}},"required":["id","name","status","score","group","parentName","url","base","head","test","change"],"additionalProperties":false,"description":"Snapshot diff"},"Test":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the test"},"name":{"type":"string","description":"Name of the test"},"buildName":{"type":"string","description":"Name of the build the test belongs to"},"metrics":{"$ref":"#/components/schemas/TestMetrics"}},"required":["id","name","buildName","metrics"],"additionalProperties":false,"description":"Test associated to a diff, with flakiness metrics to help decide whether a change is worth reviewing."},"TestMetrics":{"type":"object","properties":{"total":{"type":"number","description":"Number of builds in which this test ran over the metrics period."},"changes":{"type":"number","description":"Number of times the test changed (produced a diff) over the metrics period."},"uniqueChanges":{"type":"number","description":"Number of changes that were seen only once over the metrics period. A high ratio of unique changes is a strong flakiness signal."},"stability":{"type":"number","description":"Ratio of builds without a change, between 0 and 1. `1` means the test never changed."},"consistency":{"type":"number","description":"How consistent the changes are, between 0 and 1. `1` means changes repeat the same way; a low value means changes are erratic."},"flakiness":{"type":"number","description":"Overall flakiness score between 0 and 1, derived from stability and consistency. `0` means stable, `1` means highly flaky."}},"required":["total","changes","uniqueChanges","stability","consistency","flakiness"],"additionalProperties":false,"description":"Flakiness metrics of a test over the requested period."},"Change":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the change (a test + fingerprint pair). Use it with the ignore/unignore endpoints."},"ignored":{"type":"boolean","description":"Whether this change is currently ignored. Ignored changes no longer require review and are automatically approved."},"occurrences":{"type":"number","description":"Number of times this change has been seen over the metrics period. A high count for a recurring change is a strong flakiness signal."}},"required":["id","ignored","occurrences"],"additionalProperties":false,"description":"A test change: a specific visual difference (fingerprint) of a test that can be ignored to silence flaky changes."},"Error":{"type":"object","properties":{"error":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["error"],"additionalProperties":false,"description":"Error response"}}},"paths":{"/projects/{owner}/{project}/tests/{testId}/changes":{"get":{"operationId":"listTestChanges","summary":"List a test's changes","description":"List the distinct changes a test produced over a period, the ones that came back most often first. Each change is one exact visual difference, with how many times it reappeared, whether it is ignored, and the diff of its latest occurrence — so you can look at what moved. A change that keeps reappearing while nothing in the UI changed is a flaky one: fix what makes it unstable, or silence it with `ignoreChange`.","tags":["Tests"],"parameters":[{"in":"path","name":"owner","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"project","schema":{"type":"string","minLength":1},"required":true},{"in":"path","name":"testId","schema":{"$ref":"#/components/schemas/TestId"},"required":true,"description":"The test identifier, as returned in a diff's `test.id`"},{"in":"query","name":"perPage","schema":{"description":"Number of items per page (max 100)","type":"string"},"description":"Number of items per page (max 100)"},{"in":"query","name":"page","schema":{"description":"Page number","type":"string"},"description":"Page number"},{"in":"query","name":"metricsPeriod","schema":{"default":"LAST_7_DAYS","description":"Period over which the test flakiness metrics are computed.","type":"string","enum":["LAST_24_HOURS","LAST_3_DAYS","LAST_7_DAYS","LAST_30_DAYS","LAST_90_DAYS"]},"description":"Period over which the test flakiness metrics are computed."},{"in":"query","name":"ignored","schema":{"description":"Restrict the changes to the ones currently ignored (`true`) or to the ones still under review (`false`). Omit it to get both.","type":"string","enum":["true","false"]},"description":"Restrict the changes to the ones currently ignored (`true`) or to the ones still under review (`false`). Omit it to get both."}],"responses":{"200":{"description":"List of the test's changes","content":{"application/json":{"schema":{"type":"object","properties":{"pageInfo":{"$ref":"#/components/schemas/PageInfo"},"results":{"type":"array","items":{"$ref":"#/components/schemas/TestChange"}}},"required":["pageInfo","results"],"additionalProperties":false}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
````


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://argos-ci.com/docs/api-reference/reference/tests.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
