Test Engine
Access data from Test Engine.
List the test runs of a commit #
/ci/{owner}/repositories/{repository}/tests/runs
Returns every name test results arrived under for the commit, with the runs received under it -- one per leg or shard -- how they were sent, and whether they arrived whole; and whether the repository accepts test results at all. Read from Test Engine's own data only: a CI job missing from the list sent nothing Mergify received.
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
head_sha
string
required
The full SHA of the commit whose test runs to list.
pattern: ^[0-9a-fA-F]{40}$
200 Successful Response
The commit the results were sent for.
Whether Mergify accepts test results for this repository: `not_enabled` when CI Insights is not enabled on it, so every upload is refused; `paused` when ingestion is paused for its organization.
enabled not_enabled pausedUploads to this repository still waiting to be ingested that arrived since this commit's first test run began, from this commit or another, counted up to 5000.
Example Response
{
"head_sha": "string",
"test_results_ingestion": "enabled",
"pending_uploads": 0,
"jobs": [
{
"pipeline_name": "string",
"job_name": "string",
"test_results": "results_received",
"test_runs": null
}
]
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/runs" \
-H "Authorization: Bearer <token>"
Search tests #
/ci/{owner}/repositories/{repository}/search/tests
Search tests in a repository.
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
test_name
string[]
Filter by test name. Pass multiple times to combine matches. Supports glob patterns (`*`, `?`). Omit to return all test identities.
test_name_exclude
string[]
The test name to exclude
pipeline_name
string[]
The pipeline name to filter on
pipeline_name_exclude
string[]
The pipeline name to exclude
job_name
string[]
The job name to filter on
job_name_exclude
string[]
The job name to exclude
health_status
("healthy" | "flaky" | "broken")[]
The health status to filter on
health_status_exclude
("healthy" | "flaky" | "broken")[]
The health status to exclude
failed_executions_impact
("low" | "medium" | "high")[]
The failed executions impact to filter on
failed_executions_impact_exclude
("low" | "medium" | "high")[]
The failed executions impact to exclude
state
TestStateValue[]
The states to filter on.
state_exclude
TestStateValue[]
The states to exclude.
is_quarantined
boolean
Deprecated: use `state=quarantined` or `state_exclude=quarantined` instead. Only return tests whose branch, pipeline and job a quarantine covers (`true`) or does not (`false`). Omit to return both.
cursor
string
The opaque cursor of the current page. Must be extracted from RFC 5988 pagination links to get the previous/next pages
per_page
integer
The number of items per page
min: 1 · max: 100
sort
"executions_count" | "test_name" | "pipeline_name" | "job_name" | "health_status" | "state" | "failed_executions_impact" | "failed_executions_ratio"
Sort field
direction
"asc" | "desc"
Sort direction
200 Successful Response
The number of items in this page
The number of items per page
Total number of test identities matching the search query, across all pages.
Example Response
{
"size": 0,
"per_page": 0,
"tests": [
{
"test_id": "string",
"test_name": "string",
"pipeline_name": "string",
"job_name": "string",
"state": "quarantined",
"health_status": "healthy",
"failed_executions_impact": "low"
}
],
"total": 0
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/search/tests" \
-H "Authorization: Bearer <token>"
Get detailed information about a test #
/ci/{owner}/repositories/{repository}/tests/{test_id}
Get detailed information about a test.
test_id
string <uuid5>
required
ID of the test
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
pipeline_name
string
Only read the test's executions in this pipeline. Omit to read them across every pipeline.
min length: 1 · max length: 255
job_name
string
Only read the test's executions in this job. Omit to read them across every job.
min length: 1 · max length: 255
200 Successful Response
Example Response
{
"repository": "string",
"test_name": "string",
"test_id": "string",
"health_status": "string",
"last_conclusion": "string",
"failure_ratio": 0,
"flakiness_ratio": 0,
"success_ratio": 0,
"flaky_detection_enabled": true,
"first_failure_at": "2024-01-15T09:00:00Z",
"first_failure_commit": "string",
"first_failure_pull": {
"id": 0,
"number": 0,
"title": "string",
"user": {
"id": 0,
"login": "string",
"avatar_url": "string"
}
},
"last_failure_at": "2024-01-15T09:00:00Z",
"last_success_at": "2024-01-15T09:00:00Z",
"test_framework": "string",
"test_framework_version": "string",
"test_programming_language": "string",
"test_filepath": "string",
"test_function_name": "string"
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/:test_id" \
-H "Authorization: Bearer <token>"
Get a single test stat as a time series #
/ci/{owner}/repositories/{repository}/tests/{test_id}/stats/{stat}
Return one of the test stats over the requested window, one point per UTC day, with a summary value over the full window.
test_id
string <uuid5>
required
ID of the test
stat
"success_count" | "failure_count" | "flaky_count" | "mean_duration"
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
window
"7d" | "30d"
Period to cover: the last 7 or 30 UTC days, today included. Plans without 30-day CI Insights retention always get the last 7 days.
pipeline_name
string
Only read the test's executions in this pipeline. Omit to read them across every pipeline.
min length: 1 · max length: 255
job_name
string
Only read the test's executions in this job. Omit to read them across every job.
min length: 1 · max length: 255
200 Successful Response
stat — 4 typesExample Response
{
"value": 0,
"value_over_time": [
{
"start": "2024-01-15T09:00:00Z",
"end": "2024-01-15T09:00:00Z",
"value": 0
}
],
"stat": "success_count"
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/:test_id/stats/:stat" \
-H "Authorization: Bearer <token>"
Get a test's health transitions over time #
/ci/{owner}/repositories/{repository}/tests/{test_id}/health-transitions
Return the moments a test's health (healthy/flaky/broken) changed over the requested window: the edges of the series, not the full series. The first point is the health where the window opens, at `first_activity_at`; each later one is the run at which the test turned flaky or broken, or recovered. Without a pipeline and job, the worst health across the test's jobs wins at each instant.
test_id
string <uuid5>
required
ID of the test
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
window
"7d" | "30d" | "90d"
Period to cover: the last 7, 30 or 90 UTC days, today included.
pipeline_name
string
Only read the test's executions in this pipeline. Omit to read them across every pipeline.
min length: 1 · max length: 255
job_name
string
Only read the test's executions in this job. Omit to read them across every job.
min length: 1 · max length: 255
200 Successful Response
The test's first run in the window, the window start when it also ran before, or null when it had no activity. A consumer can treat a `first_activity_at` well after the window start as the test's genuine origin, and one at the window edge as history that predates the retained window.
Example Response
{
"transitions": [
{
"at": "2024-01-15T09:00:00Z",
"health_status": "healthy",
"exception_type": "string",
"pull_request": {}
}
],
"first_activity_at": "2024-01-15T09:00:00Z"
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/:test_id/health-transitions" \
-H "Authorization: Bearer <token>"
Get test failures #
/ci/{owner}/repositories/{repository}/tests/{test_id}/failures
Get test failures.
test_id
string <uuid5>
required
ID of the test
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
pipeline_name
string
Only read the test's executions in this pipeline. Omit to read them across every pipeline.
min length: 1 · max length: 255
job_name
string
Only read the test's executions in this job. Omit to read them across every job.
min length: 1 · max length: 255
200 Successful Response
Example Response
{
"failures": [
{
"id": "string",
"exception_type": "string",
"exception_message": "string",
"failure_count": 0,
"first_failure_at": "2024-01-15T09:00:00Z",
"last_failure_at": "2024-01-15T09:00:00Z"
}
]
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/:test_id/failures" \
-H "Authorization: Bearer <token>"
Get test failure #
/ci/{owner}/repositories/{repository}/tests/{test_id}/failures/{failure_id}
Get test failure.
test_id
string <uuid5>
required
ID of the test
failure_id
string <uuid5>
required
ID of the failure
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
pipeline_name
string
Only read the test's executions in this pipeline. Omit to read them across every pipeline.
min length: 1 · max length: 255
job_name
string
Only read the test's executions in this job. Omit to read them across every job.
min length: 1 · max length: 255
200 Successful Response
Example Response
{
"id": "string",
"exception_type": "string",
"exception_message": "string",
"failure_count": 0,
"first_failure_at": "2024-01-15T09:00:00Z",
"last_failure_at": "2024-01-15T09:00:00Z",
"latest_events": [
{
"id": "string",
"failed_at": "2024-01-15T09:00:00Z",
"exception_stacktrace": "string",
"test_filepath": "string",
"test_programming_language": "string",
"job_url": "string"
}
]
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/:test_id/failures/:failure_id" \
-H "Authorization: Bearer <token>"
List a test's executions #
/ci/{owner}/repositories/{repository}/tests/{test_id}/executions
List the identities under which this test ran over the requested time window, ordered by total executions.
test_id
string <uuid5>
required
ID of the test
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
cursor
string
The opaque cursor of the current page. Must be extracted from RFC 5988 pagination links to get the previous/next pages
per_page
integer
The number of items per page
min: 1 · max: 100
sort
"executions_count" | "pipeline_name" | "job_name"
Sort field
direction
"asc" | "desc"
Sort direction
window
"7d" | "30d"
Period to cover: the last 7 or 30 UTC days, today included. Plans without 30-day CI Insights retention always get the last 7 days.
200 Successful Response
The number of items in this page
The number of items per page
Example Response
{
"size": 0,
"per_page": 0,
"executions": [
{
"test_id": "string",
"test_name": "string",
"pipeline_name": "string",
"job_name": "string",
"executions_count": 0
}
]
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/:test_id/executions" \
-H "Authorization: Bearer <token>"
List quarantined tests #
/ci/{owner}/repositories/{repository}/quarantines
Deprecated: use the test states API, `/ci/{owner}/repositories/{repository}/test-states`. List the tests currently quarantined in the repository, ordered by `sort` and `direction` (quarantine creation time ascending by default). A quarantine applies to a specific branch or to all branches when `branch` is `null`. Pass `per_page` (and optionally `cursor`) to receive a bounded page with RFC 5988 navigation links. Omitting `per_page` is deprecated: it returns the full list in a single response, flagged with a `Deprecation` header. A future release will return the first page of 10 quarantines instead.
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
branch
string
Deprecated: use `branch_name`.
min length: 1 · max length: 255
test_id
string <uuid>[]
The test identifier to filter on
source
("manual" | "auto")[]
The sources to filter on.
branch_name
string[]
The branch name to filter on. Quarantines applying to every branch always match.
branch_name_exclude
string[]
The branch name to exclude. Quarantines applying to every branch are kept.
pipeline_name
string[]
The pipeline name to filter on. Quarantines applying to every pipeline always match.
pipeline_name_exclude
string[]
The pipeline name to exclude. Quarantines applying to every pipeline are kept.
job_name
string[]
The job name to filter on. Quarantines applying to every job always match.
job_name_exclude
string[]
The job name to exclude. Quarantines applying to every job are kept.
test_name
string[]
The test name to filter on
test_name_exclude
string[]
The test name to exclude
health_status
("healthy" | "flaky" | "broken")[]
The health status to filter on. Tests with no recent runs are left out.
health_status_exclude
("healthy" | "flaky" | "broken")[]
The health status to exclude. Tests with no recent runs are kept.
cursor
string
The opaque cursor of the current page. Must be extracted from RFC 5988 pagination links to get the previous/next pages.
per_page
integer
The number of items per page, with RFC 5988 cursor pagination. Omitting it is deprecated: it returns the full list in a single response, and will default to 10 in a future release.
min: 1 · max: 100
sort
"created_at" | "test_name" | "pipeline_name" | "job_name" | "health_status" | "source"
Sort field. `test_name` orders by the first 255 characters of the name: names sharing them come back in a stable but arbitrary order.
direction
"asc" | "desc"
Sort direction. Ascending `created_at` is oldest first; ascending `health_status` is broken, flaky, healthy, then tests with no recent runs. `pipeline_name` and `job_name` put quarantines applying to every pipeline or job first.
200 Successful Response
The number of items in this page
The number of items per page, or `null` when the endpoint was called without `per_page` and returned the full list in a single response.
Total number of quarantines matching the filters, across all pages.
Example Response
{
"size": 0,
"per_page": 0,
"quarantined_tests": [
{
"id": "string",
"test_name": "string",
"test_id": "string",
"reason": "string",
"issue_url": "string",
"branch": "string",
"branch_name": "string",
"pipeline_name": "string",
"job_name": "string",
"created_at": "2024-01-15T09:00:00Z",
"source": "manual",
"health_status": "healthy",
"is_recovered": true,
"unquarantine_when_healthy": true
}
],
"total": 0
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/quarantines" \
-H "Authorization: Bearer <token>"
Mark a test as quarantined #
/ci/{owner}/repositories/{repository}/quarantines
Deprecated: use the test states API, `/ci/{owner}/repositories/{repository}/test-states`. Add a test to the CI Quarantine for a repository
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
The fully qualified name of the test that needs to be quarantined
Reason for the test being added to the quarantine
Link to where the fix of the test is tracked, such as an issue in your issue tracker. Must be an `http` or `https` URL.
Branch name on which the test should be quarantined. If not specified, it will be quarantined on all branches. `branch` is accepted as a deprecated alias.
Pipeline in which the test should be quarantined. If not specified, it will be quarantined in all pipelines.
Job in which the test should be quarantined. If not specified, it will be quarantined in all jobs.
Unquarantine the test once it recovers, when Mergify no longer detects it as flaky or broken.
Deprecated: use `branch_name`.
201 Successful Response
The ID of the created quarantine
Example Response
{
"id": "string"
}
400 `TEST_ALREADY_QUARANTINED`: The test already has a quarantine applying to some of the same runs.
CI_TRACES_UPLOAD_UNUSABLE CONFIGURATION_BRANCH_REFUSED CONFIGURATION_INVALID CONFIGURATION_REFUSED_BY_REPOSITORY_RULES CONFIGURATION_SIGNED_COMMITS_REQUIRED DEFAULT_BRANCH_NOT_FOUND GITHUB_ACCOUNT_SUSPENDED GITHUB_APP_ACCESS_LOST GITHUB_RATE_LIMITED GITHUB_UPSTREAM_REQUEST_FORBIDDEN GITHUB_UPSTREAM_REQUEST_REJECTED GITHUB_UPSTREAM_UNAVAILABLE IP_ALLOW_LIST_NOT_CONFIGURED NO_LOGIN_IN_PROGRESS ORGANIZATION_MEMBERS_ONLY PIPELINE_NAME_TAKEN PIPELINE_NOT_FOUND PIPELINE_RUN_NOT_FOUND PULL_REQUEST_NOT_QUEUED RETRY_RULE_NOT_FOUND SAML_ENFORCEMENT_NOT_AUTHORIZED SETTING_MANAGED_BY_ENV SETUP_ALREADY_DONE SETUP_TOKEN_MISMATCH SUBSCRIPTION_API_UNAVAILABLE SUBSCRIPTION_INACTIVE SUBSCRIPTION_TOKEN_INVALID TEST_ALREADY_QUARANTINED TEST_RETRY_NOT_CONFIGURED TEST_STATE_OVERLAPExample Response
{
"detail": "string",
"error_code": "CI_TRACES_UPLOAD_UNUSABLE",
"documentation_url": "string"
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X POST "https://api.mergify.com/v1/ci/:owner/repositories/:repository/quarantines" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"test_name": "string",
"reason": "string",
"issue_url": "string",
"branch_name": "string",
"pipeline_name": "string",
"job_name": "string",
"unquarantine_when_healthy": false,
"branch": "string"
}'
Get a quarantined test #
/ci/{owner}/repositories/{repository}/quarantines/{quarantine_id}
Deprecated: use the test states API, `/ci/{owner}/repositories/{repository}/test-states`. Retrieve a single quarantined test by its quarantine ID.
quarantine_id
string <uuid>
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
200 Successful Response
Unique identifier of the quarantine record.
Fully qualified name of the quarantined test.
Stable identifier of the test, derived from its name. Identical across every quarantine of the same test and matches the `test_id` filter on the list endpoint.
Free-form reason recorded when the test was quarantined.
Link to where the fix of the test is tracked, such as an issue. `null` when none was given.
Deprecated: use `branch_name`.
Branch this quarantine applies to. `null` means the test is quarantined on every branch.
Pipeline this quarantine applies to. `null` means the test is quarantined in every pipeline.
Job this quarantine applies to. `null` means the test is quarantined in every job.
UTC timestamp when the test was added to quarantine.
How the test got quarantined: `manual` (user action) or `auto` (auto-quarantined).
manual autoHealth of the test, or `null` when it has no recent runs.
True when recent runs of this test are healthy, suggesting the test could be unquarantined.
True when Mergify unquarantines this test once it recovers.
Example Response
{
"id": "string",
"test_name": "string",
"test_id": "string",
"reason": "string",
"issue_url": "string",
"branch": "string",
"branch_name": "string",
"pipeline_name": "string",
"job_name": "string",
"created_at": "2024-01-15T09:00:00Z",
"source": "manual",
"health_status": "healthy",
"is_recovered": true,
"unquarantine_when_healthy": true
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/quarantines/:quarantine_id" \
-H "Authorization: Bearer <token>"
Update a quarantined test #
/ci/{owner}/repositories/{repository}/quarantines/{quarantine_id}
Deprecated: use the test states API, `/ci/{owner}/repositories/{repository}/test-states`. Update the fields sent of a quarantined test; the others keep their value.
quarantine_id
string <uuid>
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
Link to where the fix of the test is tracked, such as an issue in your issue tracker. Must be an `http` or `https` URL. `null` removes the link.
204 No content
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X PATCH "https://api.mergify.com/v1/ci/:owner/repositories/:repository/quarantines/:quarantine_id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"issue_url": "string"
}'
Unquarantine a test #
/ci/{owner}/repositories/{repository}/quarantines/{quarantine_id}
Deprecated: use the test states API, `/ci/{owner}/repositories/{repository}/test-states`. Unquarantine a test with its quarantine id
quarantine_id
string <uuid>
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
200 Successful Response
204 No content
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X DELETE "https://api.mergify.com/v1/ci/:owner/repositories/:repository/quarantines/:quarantine_id" \
-H "Authorization: Bearer <token>"
List test states #
/ci/{owner}/repositories/{repository}/test-states
List the states the repository's tests are put in, ordered by `sort` and `direction` (creation time ascending by default). A state applies to the branch, pipeline and job it names, or to every one of them when `null`.
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
state
TestStateValue[]
The states to filter on.
test_id
string <uuid>[]
The test identifier to filter on
source
("manual" | "auto")[]
The sources to filter on.
branch_name
string[]
The branch name to filter on. Test states applying to every branch always match.
branch_name_exclude
string[]
The branch name to exclude. Test states applying to every branch are kept.
pipeline_name
string[]
The pipeline name to filter on. Test states applying to every pipeline always match.
pipeline_name_exclude
string[]
The pipeline name to exclude. Test states applying to every pipeline are kept.
job_name
string[]
The job name to filter on. Test states applying to every job always match.
job_name_exclude
string[]
The job name to exclude. Test states applying to every job are kept.
test_name
string[]
The test name to filter on
test_name_exclude
string[]
The test name to exclude
health_status
("healthy" | "flaky" | "broken")[]
The health status to filter on. Tests with no recent runs are left out.
health_status_exclude
("healthy" | "flaky" | "broken")[]
The health status to exclude. Tests with no recent runs are kept.
cursor
string
The opaque cursor of the current page. Must be extracted from RFC 5988 pagination links to get the previous/next pages
per_page
integer
The number of items per page
min: 1 · max: 100
sort
"created_at" | "test_name" | "pipeline_name" | "job_name" | "health_status" | "source"
Sort field
direction
"asc" | "desc"
Sort direction
200 Successful Response
The number of items in this page
The number of items per page
Total number of test states matching the filters, across all pages.
Example Response
{
"size": 0,
"per_page": 0,
"test_states": [
{
"id": "string",
"test_name": "string",
"test_id": "string",
"state": "quarantined",
"reason": "string",
"issue_url": "string",
"branch_name": "string",
"pipeline_name": "string",
"job_name": "string",
"created_at": "2024-01-15T09:00:00Z",
"source": "manual",
"health_status": "healthy",
"is_recovered": true,
"unquarantine_when_healthy": true
}
],
"total": 0
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/test-states" \
-H "Authorization: Bearer <token>"
Put a test in a state #
/ci/{owner}/repositories/{repository}/test-states
Put a test in a state for a branch, pipeline and job.
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
The state to put the test in.
The fully qualified name of the test.
Why the test is put in this state.
Link to where the fix of the test is tracked, such as an issue in your issue tracker. Must be an `http` or `https` URL.
Branch the state applies to. Every branch when not specified.
Pipeline the state applies to. Every pipeline when not specified.
Job the state applies to. Every job when not specified.
For the `quarantined` state: unquarantine the test once it recovers, when Mergify no longer detects it as flaky or broken.
201 Successful Response
The ID of the created test state.
Example Response
{
"id": "string"
}
403 Forbidden
404 Not found
409 `TEST_STATE_OVERLAP`: The test already has a state applying to some of the same runs.
CI_TRACES_UPLOAD_UNUSABLE CONFIGURATION_BRANCH_REFUSED CONFIGURATION_INVALID CONFIGURATION_REFUSED_BY_REPOSITORY_RULES CONFIGURATION_SIGNED_COMMITS_REQUIRED DEFAULT_BRANCH_NOT_FOUND GITHUB_ACCOUNT_SUSPENDED GITHUB_APP_ACCESS_LOST GITHUB_RATE_LIMITED GITHUB_UPSTREAM_REQUEST_FORBIDDEN GITHUB_UPSTREAM_REQUEST_REJECTED GITHUB_UPSTREAM_UNAVAILABLE IP_ALLOW_LIST_NOT_CONFIGURED NO_LOGIN_IN_PROGRESS ORGANIZATION_MEMBERS_ONLY PIPELINE_NAME_TAKEN PIPELINE_NOT_FOUND PIPELINE_RUN_NOT_FOUND PULL_REQUEST_NOT_QUEUED RETRY_RULE_NOT_FOUND SAML_ENFORCEMENT_NOT_AUTHORIZED SETTING_MANAGED_BY_ENV SETUP_ALREADY_DONE SETUP_TOKEN_MISMATCH SUBSCRIPTION_API_UNAVAILABLE SUBSCRIPTION_INACTIVE SUBSCRIPTION_TOKEN_INVALID TEST_ALREADY_QUARANTINED TEST_RETRY_NOT_CONFIGURED TEST_STATE_OVERLAPExample Response
{
"detail": "string",
"error_code": "CI_TRACES_UPLOAD_UNUSABLE",
"documentation_url": "string"
}
422 Unprocessable entity
Example Request
curl -X POST "https://api.mergify.com/v1/ci/:owner/repositories/:repository/test-states" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"state": "quarantined",
"test_name": "string",
"reason": "string",
"issue_url": "string",
"branch_name": "string",
"pipeline_name": "string",
"job_name": "string",
"unquarantine_when_healthy": false
}'
Get a test state #
/ci/{owner}/repositories/{repository}/test-states/{test_state_id}
Retrieve a single test state by its ID.
test_state_id
string <uuid>
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
200 Successful Response
Unique identifier of the test state.
Fully qualified name of the test.
Stable identifier of the test, derived from its name. Identical across every state of the same test and matches the `test_id` filter on the list endpoint.
The state the test is in for this scope.
Free-form reason recorded when the test was put in this state.
Link to where the fix of the test is tracked, such as an issue. `null` when none was given.
Branch this state applies to. `null` means every branch.
Pipeline this state applies to. `null` means every pipeline.
Job this state applies to. `null` means every job.
UTC timestamp when the test was put in this state.
How the test got this state: `manual` (user action) or `auto` (set by Mergify).
manual autoHealth of the test, or `null` when it has no recent runs.
True when recent runs of this test are healthy.
For the `quarantined` state: true when Mergify unquarantines the test once it recovers.
Example Response
{
"id": "string",
"test_name": "string",
"test_id": "string",
"state": "quarantined",
"reason": "string",
"issue_url": "string",
"branch_name": "string",
"pipeline_name": "string",
"job_name": "string",
"created_at": "2024-01-15T09:00:00Z",
"source": "manual",
"health_status": "healthy",
"is_recovered": true,
"unquarantine_when_healthy": true
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/test-states/:test_state_id" \
-H "Authorization: Bearer <token>"
Update a test state #
/ci/{owner}/repositories/{repository}/test-states/{test_state_id}
Update the fields sent of a test state; the others keep their value.
test_state_id
string <uuid>
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
Link to where the fix of the test is tracked, such as an issue in your issue tracker. Must be an `http` or `https` URL. `null` removes the link.
204 No content
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X PATCH "https://api.mergify.com/v1/ci/:owner/repositories/:repository/test-states/:test_state_id" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"issue_url": "string"
}'
Remove a test state #
/ci/{owner}/repositories/{repository}/test-states/{test_state_id}
Take a test out of a state, by the test state's ID.
test_state_id
string <uuid>
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
204 No content
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X DELETE "https://api.mergify.com/v1/ci/:owner/repositories/:repository/test-states/:test_state_id" \
-H "Authorization: Bearer <token>"
Get a single test stat as a time series #
/ci/{owner}/repositories/{repository}/tests/stats/{stat}
Return one test stat with a window summary `value` and a per-day `value_over_time` series of failed executions.
stat
"total_tests" | "healthy_tests" | "broken_tests" | "flaky_tests" | "failed_executions" | "median_test_run_duration"
required
repository
string
required
The name of the repository
min length: 1 · max length: 100 · pattern: ^[\w\-\.]+$
owner
string
required
The owner of the repository
min length: 1 · max length: 40 · pattern: ^[a-zA-Z0-9\-]+$
test_name
string[]
The test name to filter on
test_name_exclude
string[]
The test name to exclude
job_name
string[]
The job name to filter on
job_name_exclude
string[]
The job name to exclude
pipeline_name
string[]
The pipeline name to filter on
pipeline_name_exclude
string[]
The pipeline name to exclude
failed_executions_impact
("low" | "medium" | "high")[]
The failed executions impact to filter on
failed_executions_impact_exclude
("low" | "medium" | "high")[]
The failed executions impact to exclude
200 Successful Response
total_tests healthy_tests broken_tests flaky_tests failed_executions median_test_run_durationExample Response
{
"stat": "total_tests",
"value": 0,
"value_over_time": [
{
"start": "2024-01-15T09:00:00Z",
"end": "2024-01-15T09:00:00Z",
"value": 0
}
]
}
403 Forbidden
404 Not found
409 Conflict
422 Unprocessable entity
Example Request
curl -X GET "https://api.mergify.com/v1/ci/:owner/repositories/:repository/tests/stats/:stat" \
-H "Authorization: Bearer <token>"
Was this page helpful?
Thanks for your feedback!