Antithesis logomark
Docs

Antithesis API

The Antithesis API enables programmatic access to the Antithesis autonomous testing environments. List runs, inspect run details, and retrieve logs. We recommend using Snouty CLI as the client for this API.

Authentication

Pass the API key in the Authorization header as Authorization: Bearer <api_key>. To obtain an API key, please email us at support@antithesis.com or talk to your forward deployed engineer.

Versioning

All endpoints are versioned via a path prefix:

  • /api/v0/... Preview. APIs accessed from the v0 route are in preview. They may change or be removed.
  • /api/v1/... Stable. The first version with a compatibility commitment.

In the future only breaking changes trigger a new major version (e.g., v2). When that happens the previous version (v1) remains available, and preview APIs restart under v0.

Base URL

https://{tenant}.antithesis.com

  • {tenant} — Your organization's tenant name. (default: demo)

Errors

Every endpoint can return the same set of error responses (4xx and 5xx). To keep the per-endpoint sections concise, these are documented once in Error responses at the bottom of this page.

OpenAPI spec

The OpenAPI spec for this API is available at https://{tenant}.antithesis.com/api/v0/openapi.json. Fetching the spec requires the same authentication header as the rest of the API.

Test runs

Operations on test runs.

List runs

GET/api/v0/runs

Returns a paginated list of runs of all types. Results are ordered by creation time, newest first.

Parameters
limitquery
integerDefault: 50Min: 1 · Max: 100
Maximum number of results to return. Must be between 1 and 100; values outside this range return 400 Bad Request.
afterquery
string
Cursor for pagination. Pass the next_cursor value (as well as any filter parameters) from a previous response to fetch the next page.
statusquery
stringAvailable values: starting, in_progress, completed, cancelled, incomplete, unknown
Filter test runs by status.
created_afterquery
string <date-time>
Only return test runs created after this timestamp (ISO 8601).
created_beforequery
string <date-time>
Only return test runs created before this timestamp (ISO 8601).
launcherquery
string
Filter by launcher: the programmatic name of the launcher that kicked off the test run. This is the same value as the launcher field on a run and the {launcher_name} accepted by POST /api/v1/launch/{launcher_name}. Display names are not matched.
Responses
200A paginated list of test runs.

Content type: application/json

dataRequired
array<object>
Items of data
run_idRequired
string
Unique identifier for the test run.
Example: 9325f006ffd3a399a8497bc888878b97-50-1
statusRequired
stringAvailable values: starting, in_progress, completed, cancelled, incomplete, unknown
Current lifecycle status of a test run. starting: the run is being set up. in_progress: the run is actively running. completed: the run finished successfully. cancelled: the run was cancelled before completion. incomplete: the run did not complete successfully. unknown: the status of the run is unknown.
created_atRequired
string <date-time>
Timestamp when the test run was created (ISO 8601).
started_at
string <date-time> (nullable)
Timestamp when the test run started executing. Null if the run has not yet started.
completed_at
string <date-time> (nullable)
Timestamp when the test run finished. Null if the run is still in progress or has not started.
creator
object (nullable)
Information about who or what created this test run. Null if the creator is unknown.
Properties of creator
name
string
The name of the creator.
Example: demo
type
string
The type of creator (e.g. "ci", "user", "agent").
Example: ci

Accepts additional properties.

launcherRequired
string
The programmatic name of the launcher that kicked off this test run. Pass it to POST /api/v1/launch/{launcher_name} to launch another run from the same launcher, or to the launcher filter when listing runs.
Example: payments_nightly
launcher_display_name
string
The launcher's human-readable display name, when the launcher configures one and the run recorded it. Omitted otherwise; fall back to launcher for display.
Example: Payments Nightly
description
string (nullable)
A human-readable description of the run. Null if no description was provided.
Example: basic_test on main
parameters
object (nullable)
Test run parameters. Null if no parameters were specified.
Properties of parameters
antithesis.config_image
string
The image version of your config image. This should be a single image version formatted in the same way as those in the antithesis.images parameter.
Example: my-config:latest
antithesis.description
string
A description of the test run. Appears in report headers and any emails triggered by the run.
Example: basic_test on main
antithesis.duration
string
Desired duration of the test run in minutes.
Example: 30
antithesis.fault_exclusions
string
A regular expression that identifies containers (or pods, on Kubernetes) that are excluded from fault injection. Defaults to no exclusions.
The expression is matched against the container name and uses the Rust regex syntax, which does not support lookaround or backreferences. The maximum length is 1024 characters.
Thread pausing faults are not affected, because they are not scoped to a container.
Example: ^(raft-client|raft-monitor)$
antithesis.fault_tolerance
stringAvailable values: none, resilient, high_availability, legacy
The level of faults that Antithesis injects:
none: No faults.
resilient: Faults that degrade the system without stopping any node or network link: baseline latency, Slowed or Jammed clogs, node pauses, CPU modulation, thread pausing, and clock skips.
high_availability: Everything in resilient, plus partitions, Stopped clogs, and node termination.
legacy: Enables all network faults and thread pausing. Not recommended except for backwards compatibility with a custom notebook.
Example: resilient
antithesis.filter_logs_matching
string
An RE2 pattern matching log lines to suppress while the test runs. Suppressed lines can be recovered in the Multiverse Debugger. Matching is unanchored and case-sensitive, so any line containing a match is suppressed; prefix the pattern with (?i) for case-insensitive matching. Lookahead, lookbehind and backreferences are not supported. See Retroactive logging.
Example: (?i)^\s*(TRACE|DEBUG)\b
antithesis.filter_source_matching
string
An RE2 pattern matching the sources whose output should be suppressed while the test runs. Where antithesis.filter_logs_matching selects individual lines by their content, this suppresses a matching source's output in its entirety. A source is the emitter of a log line, usually the name of the process that wrote it; the source field on each log line shows the exact names available to match against. The pattern is applied to the source name rather than to the line, and carries the same RE2 restrictions as antithesis.filter_logs_matching. This parameter has no equivalent field in the test launcher dialogue. See Retroactive logging.
Example: ^metrics-agent$
antithesis.images
string
A semicolon-delimited list of container image versions needed in the testing environment. Each entry in the format [REGISTRY/]NAME(:TAG|@DIGEST). In most cases, images are parsed from the orchestration configuration (e.g. docker-compose.yaml or /manifests) and do not need to be specified here. It is recommended to use a digest over a tag. Images specified by digest will be tagged as latest within the Antithesis environment. The default registry is us-central1-docker.pkg.dev/molten-verve-216720/$TENANT_NAME-repository/. When images mentioned in the config are also passed via this parameter, the value here overwrites the config. We recommend only using this parameter for images not already mentioned in the config files.
Example: registry/container_1:tag1; registry/container_2:latest
antithesis.is_ephemeral
string (nullable)Available values: true, false
A boolean (represented as "true" or "false") that indicates whether or not the run's results should be reflected in future reports as a historic result. Set to "true" when kicking off one-off, exploratory runs. Defaults to "false".
antithesis.performance_tier
stringAvailable values: standard, fast, turbo
The performance tier to use for the test run. Higher tiers explore system states faster through increased parallelism, consuming more core hours. Defaults to "standard".
Example: standard
antithesis.report.recipients
string
A semicolon-delimited list of email addresses to receive the triage report link. If not specified, emails are sent to the default users configured for the endpoint.
Example: user1@example.com; user2@example.com
antithesis.source
string
An identifier used to separate property history in reports. Each property's history is generated from all previous runs sharing the same source value. Useful for tracking test history per branch.
Example: main
attrs.<NAME>
string
Arbitrary key-value annotations for the run. Replace <NAME> with any name you choose, and pass as many attrs.* parameters as you like. Used to filter test runs in the Runs view.
Example: staging
run.caller_name
string
The name of the application or script that launched the run, such as antithesis-trigger-action or explore_the_multiverse.sh.
Example: antithesis-trigger-action
run.caller_type
stringAvailable values: antithesis_ui, antithesis_scheduler, internal_scheduler, antithesis_cli, github_action, snouty, user, unknown
The type of application or script that launched the run.
Example: github_action
run.creator_name
string
A unique identifier for the person who launched the run, directly or indirectly.
Example: jane.doe
run.cron_schedule
string
For recurring runs, a valid cron expression for when the run is scheduled. Omit it, or pass an empty string, for a one-off run.
Example: 0 2 * * 1-5
run.team
string
The team responsible for the run. Lets you filter runs by team, separately from the user or repository, which may be shared across teams.
Example: Payments Team
vcs.pr_id
string
For runs started from a GitHub pull request, the PR number.
Example: 482
vcs.pr_link
string
For runs started from a GitHub pull request, the link to the PR.
Example: https://github.com/acme/payments-service/pull/482
vcs.pr_owner
string
For runs started from a GitHub pull request, the GitHub username of the PR's author.
Example: janedoe
vcs.pr_title
string
For runs started from a GitHub pull request, the title of the PR.
Example: Fix duplicate charge on retry
vcs.repo_branch
string
For runs started from a version control repository, the branch under test.
Example: fix/duplicate-charge
vcs.repo_name
string
For runs started from a version control repository, the repository name.
Example: payments-service
vcs.repo_owner
string
For runs started from a version control repository, the repository owner.
Example: acme
vcs.repo_type
string
For runs started from a version control repository, the type of version control, such as github, gitlab or mercurial.
Example: github
vcs.system_name
string
A readable name for the system under test that doesn't change between versions.
Example: Ledger API
vcs.version_id
string
A unique identifier for this version of the system under test. For runs started from a version control repository, the hash of the commit under test.
Example: a1b2c3d4e5f678901234567890abcdef12345678
vcs.version_link
string
For runs started from a web-hosted version control repository, a link to the commit under test.
Example: https://github.com/acme/payments-service/commit/a1b2c3d4e5f678901234567890abcdef12345678

Additional properties: string — Tooling integration parameters (antithesis.integrations.<type>.callback_url and antithesis.integrations.<type>.token, where type is github, discord, or slack), and any custom parameters Antithesis has created for your tenant. Other unrecognized parameters are discarded.

links
object (nullable)
Relevant links for this test run. Null if no links are available yet.
Properties of links
triage_report
string <uri>
URL to the triage report for this test run.

Accepts additional properties.

next_cursor
string (nullable)
Opaque pagination cursor. Pass as the after query parameter to fetch the next page. Null if no more pages.
Example response
{
"data": [
{
"run_id": "9043254f65c9c65d63fe043a0abfc7fc-53-1",
"status": "completed",
"created_at": "2026-04-28T13:49:49Z",
"launcher": "research_nightly",
"launcher_display_name": "Research Nightly",
"started_at": "2026-04-28T13:49:49Z",
"completed_at": "2026-04-28T14:14:07Z",
"creator": {
"name": "abc.xyz",
"type": "user"
},
"parameters": {
"antithesis.description": "Placeholder description",
"antithesis.integrations.type": "none",
"antithesis.is_ephemeral": "false"
},
"links": {
"triage_report": "https://antithesis-dev.antithesis.com/report/VQ81z_5My-BjOmj6uFNKqVPq/Pv_GDPOCDEer8yk3Tf90Twj-83iedGwTgf60FyOYtA8.html?auth=v2.public.eyJuYmYiOiIyMDI2LTA0LTI4VDEzOjE0OjA1LjY3NTMyMTY1N1oiLCJzY29wZSI6eyJSZXBvcnRTY29wZVYxIjp7ImFzc2V0IjoiUHZfR0RQT0NERWVyOHlrM1RmOTBUd2otODNpZWRHd1RnZjYwRnlPWXRBOC5odG1sIiwicmVwb3J0X2lkIjoiVlE4MXpfNU15LUJqT21qNnVGTktxVlBxIn19fTuj6S2XLg2SC-7dhP7H4CNTV5WZME2xiXlmReHLchLERjHxLXaOVxnkkv2Li5VF_4MLtIxunbBl_4gOwNJE3gY&debug=true"
}
},
{
"run_id": "ced73597f5f6499a6041f4c7f2329cf1-53-1",
"status": "completed",
"created_at": "2026-04-28T13:49:49Z",
"launcher": "thesis-nes",
"launcher_display_name": "Thesis",
"started_at": "2026-04-28T13:49:49Z",
"completed_at": "2026-04-28T14:07:36Z",
"creator": {
"name": "abc.xyz",
"type": "user"
},
"parameters": {
"antithesis.description": "Placeholder description",
"antithesis.integrations.type": "none",
"antithesis.is_ephemeral": "true"
},
"links": {
"triage_report": "https://antithesis-dev.antithesis.com/report/upBLS-4SrdaVqSi7tv5IbF38/Fqt1GZOTLPd978JxmCxAY-fXoUWvnqDjaTOmRM2g_g4.html?auth=v2.public.eyJzY29wZSI6eyJSZXBvcnRTY29wZVYxIjp7ImFzc2V0IjoiRnF0MUdaT1RMUGQ5NzhKeG1DeEFZLWZYb1VXdm5xRGphVE9tUk0yZ19nNC5odG1sIiwicmVwb3J0X2lkIjoidXBCTFMtNFNyZGFWcVNpN3R2NUliRjM4In19LCJuYmYiOiIyMDI2LTA0LTI4VDEzOjA3OjI1LjcwMDgzODkwM1oifVZW5_voXDGIhlndVP0FXfpDpBhUyYPbm99Zl7DlSzO38NSGXVU4_hKliNLgMGz1SXP9VW4NJLwDcEGetW224gY&debug=true"
}
}
],
"next_cursor": "MjAyNi0wNC0yOFQxMzo0OTo0NVosMDM2MDc0MjdmMDg0NmE0OGE3ZjY2ZTQyYTUxOTY3ODktNTMtMQ=="
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Get test run details

GET/api/v0/runs/{run_id}

Returns the full details of a single test run, including results.

Parameters
run_idpathRequired
string
Unique identifier of the test run to retrieve.
Responses
200Full details of the requested test run.

Content type: application/json

run_idRequired
string
Unique identifier for the test run.
Example: 9325f006ffd3a399a8497bc888878b97-50-1
statusRequired
stringAvailable values: starting, in_progress, completed, cancelled, incomplete, unknown
Current lifecycle status of a test run. starting: the run is being set up. in_progress: the run is actively running. completed: the run finished successfully. cancelled: the run was cancelled before completion. incomplete: the run did not complete successfully. unknown: the status of the run is unknown.
created_atRequired
string <date-time>
Timestamp when the test run was created (ISO 8601).
started_at
string <date-time> (nullable)
Timestamp when the test run started executing. Null if the run has not yet started.
completed_at
string <date-time> (nullable)
Timestamp when the test run finished. Null if the run is still in progress or has not started.
creator
object (nullable)
Information about who or what created this test run. Null if the creator is unknown.
Properties of creator
name
string
The name of the creator.
Example: demo
type
string
The type of creator (e.g. "ci", "user", "agent").
Example: ci

Accepts additional properties.

launcherRequired
string
The programmatic name of the launcher that kicked off this test run. Pass it to POST /api/v1/launch/{launcher_name} to launch another run from the same launcher, or to the launcher filter when listing runs.
Example: payments_nightly
launcher_display_name
string
The launcher's human-readable display name, when the launcher configures one and the run recorded it. Omitted otherwise; fall back to launcher for display.
Example: Payments Nightly
description
string (nullable)
A human-readable description of the run. Null if no description was provided.
Example: basic_test on main
parameters
object (nullable)
Test run parameters. Null if no parameters were specified.
Properties of parameters
antithesis.config_image
string
The image version of your config image. This should be a single image version formatted in the same way as those in the antithesis.images parameter.
Example: my-config:latest
antithesis.description
string
A description of the test run. Appears in report headers and any emails triggered by the run.
Example: basic_test on main
antithesis.duration
string
Desired duration of the test run in minutes.
Example: 30
antithesis.fault_exclusions
string
A regular expression that identifies containers (or pods, on Kubernetes) that are excluded from fault injection. Defaults to no exclusions.
The expression is matched against the container name and uses the Rust regex syntax, which does not support lookaround or backreferences. The maximum length is 1024 characters.
Thread pausing faults are not affected, because they are not scoped to a container.
Example: ^(raft-client|raft-monitor)$
antithesis.fault_tolerance
stringAvailable values: none, resilient, high_availability, legacy
The level of faults that Antithesis injects:
none: No faults.
resilient: Faults that degrade the system without stopping any node or network link: baseline latency, Slowed or Jammed clogs, node pauses, CPU modulation, thread pausing, and clock skips.
high_availability: Everything in resilient, plus partitions, Stopped clogs, and node termination.
legacy: Enables all network faults and thread pausing. Not recommended except for backwards compatibility with a custom notebook.
Example: resilient
antithesis.filter_logs_matching
string
An RE2 pattern matching log lines to suppress while the test runs. Suppressed lines can be recovered in the Multiverse Debugger. Matching is unanchored and case-sensitive, so any line containing a match is suppressed; prefix the pattern with (?i) for case-insensitive matching. Lookahead, lookbehind and backreferences are not supported. See Retroactive logging.
Example: (?i)^\s*(TRACE|DEBUG)\b
antithesis.filter_source_matching
string
An RE2 pattern matching the sources whose output should be suppressed while the test runs. Where antithesis.filter_logs_matching selects individual lines by their content, this suppresses a matching source's output in its entirety. A source is the emitter of a log line, usually the name of the process that wrote it; the source field on each log line shows the exact names available to match against. The pattern is applied to the source name rather than to the line, and carries the same RE2 restrictions as antithesis.filter_logs_matching. This parameter has no equivalent field in the test launcher dialogue. See Retroactive logging.
Example: ^metrics-agent$
antithesis.images
string
A semicolon-delimited list of container image versions needed in the testing environment. Each entry in the format [REGISTRY/]NAME(:TAG|@DIGEST). In most cases, images are parsed from the orchestration configuration (e.g. docker-compose.yaml or /manifests) and do not need to be specified here. It is recommended to use a digest over a tag. Images specified by digest will be tagged as latest within the Antithesis environment. The default registry is us-central1-docker.pkg.dev/molten-verve-216720/$TENANT_NAME-repository/. When images mentioned in the config are also passed via this parameter, the value here overwrites the config. We recommend only using this parameter for images not already mentioned in the config files.
Example: registry/container_1:tag1; registry/container_2:latest
antithesis.is_ephemeral
string (nullable)Available values: true, false
A boolean (represented as "true" or "false") that indicates whether or not the run's results should be reflected in future reports as a historic result. Set to "true" when kicking off one-off, exploratory runs. Defaults to "false".
antithesis.performance_tier
stringAvailable values: standard, fast, turbo
The performance tier to use for the test run. Higher tiers explore system states faster through increased parallelism, consuming more core hours. Defaults to "standard".
Example: standard
antithesis.report.recipients
string
A semicolon-delimited list of email addresses to receive the triage report link. If not specified, emails are sent to the default users configured for the endpoint.
Example: user1@example.com; user2@example.com
antithesis.source
string
An identifier used to separate property history in reports. Each property's history is generated from all previous runs sharing the same source value. Useful for tracking test history per branch.
Example: main
attrs.<NAME>
string
Arbitrary key-value annotations for the run. Replace <NAME> with any name you choose, and pass as many attrs.* parameters as you like. Used to filter test runs in the Runs view.
Example: staging
run.caller_name
string
The name of the application or script that launched the run, such as antithesis-trigger-action or explore_the_multiverse.sh.
Example: antithesis-trigger-action
run.caller_type
stringAvailable values: antithesis_ui, antithesis_scheduler, internal_scheduler, antithesis_cli, github_action, snouty, user, unknown
The type of application or script that launched the run.
Example: github_action
run.creator_name
string
A unique identifier for the person who launched the run, directly or indirectly.
Example: jane.doe
run.cron_schedule
string
For recurring runs, a valid cron expression for when the run is scheduled. Omit it, or pass an empty string, for a one-off run.
Example: 0 2 * * 1-5
run.team
string
The team responsible for the run. Lets you filter runs by team, separately from the user or repository, which may be shared across teams.
Example: Payments Team
vcs.pr_id
string
For runs started from a GitHub pull request, the PR number.
Example: 482
vcs.pr_link
string
For runs started from a GitHub pull request, the link to the PR.
Example: https://github.com/acme/payments-service/pull/482
vcs.pr_owner
string
For runs started from a GitHub pull request, the GitHub username of the PR's author.
Example: janedoe
vcs.pr_title
string
For runs started from a GitHub pull request, the title of the PR.
Example: Fix duplicate charge on retry
vcs.repo_branch
string
For runs started from a version control repository, the branch under test.
Example: fix/duplicate-charge
vcs.repo_name
string
For runs started from a version control repository, the repository name.
Example: payments-service
vcs.repo_owner
string
For runs started from a version control repository, the repository owner.
Example: acme
vcs.repo_type
string
For runs started from a version control repository, the type of version control, such as github, gitlab or mercurial.
Example: github
vcs.system_name
string
A readable name for the system under test that doesn't change between versions.
Example: Ledger API
vcs.version_id
string
A unique identifier for this version of the system under test. For runs started from a version control repository, the hash of the commit under test.
Example: a1b2c3d4e5f678901234567890abcdef12345678
vcs.version_link
string
For runs started from a web-hosted version control repository, a link to the commit under test.
Example: https://github.com/acme/payments-service/commit/a1b2c3d4e5f678901234567890abcdef12345678

Additional properties: string — Tooling integration parameters (antithesis.integrations.<type>.callback_url and antithesis.integrations.<type>.token, where type is github, discord, or slack), and any custom parameters Antithesis has created for your tenant. Other unrecognized parameters are discarded.

links
object (nullable)
Relevant links for this test run. Null if no links are available yet.
Properties of links
triage_report
string <uri>
URL to the triage report for this test run.

Accepts additional properties.

results
object
Aggregate results for the test run. Structure varies by run type. May be absent or partial for runs that have not yet completed.
sub_status
stringAvailable values: Ready
Indicates whether the run is ready to use. For multiverse debugging sessions, this is Ready once the debugging session is ready. For all other runs, this is Ready while the run is in progress. Absent otherwise.
failure_moment
object (nullable)
The moment at which the run became incomplete. Populated only when the run is incomplete. Pass this moment's vtime and input_hash to the logs endpoint to retrieve logs around the event that caused the run to become incomplete.
Properties of failure_moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

failure_reason
string (nullable)
The reason the run became incomplete. Populated only when the run is incomplete.
Example response
{
"run_id": "ff0192ee9607f8ffa39187731d359c43-54-0",
"status": "completed",
"created_at": "2026-05-14T03:01:27Z",
"launcher": "basic_k8s_test",
"started_at": "2026-05-14T03:01:27Z",
"completed_at": "2026-05-14T03:29:04Z",
"creator": {
"name": "antithesis_pdev",
"type": "antithesis_scheduler"
},
"parameters": {
"antithesis.config_image": "etcd-config-k8s:latest",
"antithesis.description": "Nightly: Basic K8s test (etcd)",
"antithesis.duration": "15",
"antithesis.integrations.type": "none",
"antithesis.is_ephemeral": "false",
"antithesis.report.recipients": "foo.bar@antithesis.com"
},
"links": {
"triage_report": "https://antithesis-dev.antithesis.com/report/mj9kKGUQwD-NuB5MKdvoBbUs/hHB2tlELW0k2fysU3tEHMyluQqqzBhspg2JalbFl3tQ.html?auth=v2.public.eyJzY29wZSI6eyJSZXBvcnRTY29wZVYxIjp7ImFzc2V0IjoiaEhCMnRsRUxXMGsyZnlzVTN0RUhNeWx1UXFxekJoc3BnMkphbGJGbDN0US5odG1sIiwicmVwb3J0X2lkIjoibWo5a0tHVVF3RC1OdUI1TUtkdm9CYlVzIn19LCJuYmYiOiIyMDI2LTA1LTE0VDAyOjI5OjAyLjY1MTUxNzIyMloifetWU3K1qICy8CzM5VzyveqhPMgpKgej_FOogxKqyfG9r16HsGjbAEKoiXXIIl6pi6_hvgIduzAgroEoNigj3wo"
},
"results": {
"environment": {
"antithesis_version": "v54-0",
"images": [
{
"name": "etcd-config-k8s",
"image": "us-central1-docker.pkg.dev/molten-verve-216720/antithesis-pdev-repository/etcd-config-k8s@sha256:16f57a2ec79c0d61886c28774264ab1d027e51a9301e014941404a35dcf8c631",
"tag": "latest",
"created": "2026-05-13T18:42:07Z"
},
{
"name": "mirrored-coredns-coredns",
"image": "docker.io/rancher/mirrored-coredns-coredns@sha256:4f7a57135719628cf2070c5e3cbde64b013e90d4c560c5ecbf14004181f91998",
"created": "2024-07-08T00:00:00Z"
},
{
"name": "etcd",
"image": "docker.io/bitnamilegacy/etcd@sha256:4abe38869d5919c9ec70b2008713c2eb90c1b26d9e6700e126875894681b5b99",
"tag": "3.5",
"created": "2024-10-01T12:15:33Z"
},
{
"name": "local-path-provisioner",
"image": "docker.io/rancher/local-path-provisioner@sha256:5fb0394abf87407a27cc56db94334eb0c92d0b5de2636683a7ec51f38143dfc9",
"created": "2024-03-19T09:01:44Z"
},
{
"name": "busybox",
"image": "docker.io/library/busybox@sha256:e56bc0f7fc7d4452b17eb4ac0a9261ff4c9a469afa45d2b673e03650716d095d",
"created": "2025-01-22T05:30:00Z"
},
{
"name": "mirrored-pause",
"image": "docker.io/rancher/mirrored-pause@sha256:7c38f24774e3cbd906d2d33c38354ccf787635581c122965132c9bd309754d4a",
"created": "2023-11-02T21:11:09Z"
},
{
"name": "etcd-client-k8s",
"image": "us-central1-docker.pkg.dev/molten-verve-216720/antithesis-pdev-repository/etcd-client-k8s@sha256:112394d9bacd070df4a8d18db3b7575d6e314220ee2462a31dc24df2e98373cc",
"tag": "latest",
"created": "2026-05-13T18:42:07Z"
}
]
},
"fault_settings": {
"fault_tolerance": "resilient",
"custom_fault_settings": false
}
}
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Stream property updates for a run

POST/api/v0/runs/{run_id}/stream

Streams updates about a test run's properties while the run is in progress. By default, you get a notification when Antithesis first encounters a property, and when properties pass or fail. You can also opt in to notifications when Antithesis finds new examples for a property. When the run finishes, the stream sends RUN_FINALIZED and closes.

The stream only sends changes that happen after you connect. To get a complete, up-to-date view of a run's properties, open the stream first, then fetch the current properties from the List test run properties endpoint.

Runs created before Antithesis 66 do not support streaming and return 409. Instead, call the List test run properties endpoint on completed runs.

Output is streamed as newline-delimited JSON (NDJSON), with one notification per line. Each notification has a type, and a data list of the properties associated with it.

When Antithesis finds a property's first example or counterexample, it sends a NEW_EXAMPLES_FOUND notification. The property's examples or counterexamples list contains the new example. Later examples only increase example_count and counterexample_count.

If the stream closes without sending RUN_FINALIZED, or ends with an error, the run may still be in progress. Reconnecting doesn't resend notifications you missed, so reconnect and then reload the current properties.

Parameters
run_idpathRequired
string
Unique identifier of the test run.
Request Body

Content type: application/json

notification_type_filter
array<string> (nullable)Available values: NEW_PROPERTIES_ADDED, PROPERTIES_PASSED, PROPERTIES_FAILED, NEW_EXAMPLES_FOUND, RUN_FINALIZED
Omit or use null for discovery and terminal property notifications. NEW_EXAMPLES_FOUND is opt-in and must be explicitly listed. An empty array suppresses all property notifications. RUN_FINALIZED is always delivered, irrespective of this filter.
property_filter
array<string> (nullable)
Only deliver entries for these property IDs. Omit or use null for all IDs; an empty array suppresses all property entries. RUN_FINALIZED is unaffected.
Responses
200An NDJSON stream. The schema and examples describe individual lines, not a JSON array containing the entire response.

Content type: application/x-ndjson

One of:

object
typeRequired
stringAvailable values: NEW_PROPERTIES_ADDED, PROPERTIES_PASSED, PROPERTIES_FAILED, NEW_EXAMPLES_FOUND, RUN_FINALIZED
dataRequired
array<any>
Properties associated with this notification. Empty for RUN_FINALIZED.
One of for items of data

object

id
string
An opaque, unique, stable identifier for the property within its run.
nameRequired
string
Display name of the property; names need not be unique.
description
string (nullable)
A human-readable description of the property.
category
string
Property category, omitted when unavailable.
team
string
Owning team, omitted when unavailable.
event_set
string
Serialized event-set definition, omitted when unavailable. Included in property responses and stream notifications when available.
passing_predicate
string
Serialized passing predicate, omitted when unavailable. Included in property responses and stream notifications when available.
statusRequired
stringAvailable values: Passing, Failing, Pending
Current property status. Pending means the property has not resolved. Runs created before Antithesis version 66 report only Passing or Failing.
is_eventRequired
anyAvailable values: true
Always true for event properties. Discriminates this branch of the oneOf.
is_group
boolean
When true, this property represents a group property that contains other properties. Individual properties belonging to this group will reference it by name via the group field.
group
string
The name of the group this property belongs to. Present only for properties that are part of a group.
example_count
integer <uint32> (nullable)
Total number of examples observed.
counterexample_count
integer <uint32> (nullable)
Total number of counterexamples observed.
examples
array<object>
A sample of example events that satisfy the property. This is not an exhaustive list.
Items of examples
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

counterexamples
array<object>
A sample of counterexample events that violate the property. This is not an exhaustive list.
Items of counterexamples
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

Accepts additional properties.

object

id
string
An opaque, unique, stable identifier for the property within its run.
nameRequired
string
Display name of the property; names need not be unique.
description
string (nullable)
A human-readable description of the property.
category
string
Property category, omitted when unavailable.
team
string
Owning team, omitted when unavailable.
event_set
string
Serialized event-set definition, omitted when unavailable. Included in property responses and stream notifications when available.
passing_predicate
string
Serialized passing predicate, omitted when unavailable. Included in property responses and stream notifications when available.
statusRequired
stringAvailable values: Passing, Failing, Pending
Current property status. Pending means the property has not resolved. Runs created before Antithesis version 66 report only Passing or Failing.
is_eventRequired
anyAvailable values: false
Always false for non-event properties. Discriminates this branch of the oneOf.
is_group
boolean
When true, this property represents a group property that contains other properties. Individual properties belonging to this group will reference it by name via the group field.
group
string
The name of the group this property belongs to. Present only for properties that are part of a group.
example_count
integer <uint32> (nullable)
Total number of examples observed.
counterexample_count
integer <uint32> (nullable)
Total number of counterexamples observed.
examples
array<any>
A sample of example instances that satisfy the property. This is not an exhaustive list.
counterexamples
array<any>
A sample of counterexample instances that violate the property. This is not an exhaustive list.

Accepts additional properties.

object
errorRequired
string
The error message.
Example: An unexpected error occurred. Please try again later.

Accepts additional properties.

A newly discovered property
{
"type": "NEW_PROPERTIES_ADDED",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"description": null,
"status": "Pending",
"is_event": true,
"is_group": false,
"example_count": 0,
"counterexample_count": 0,
"examples": [],
"counterexamples": []
}
]
}
Passing with a retained passing event
{
"type": "PROPERTIES_PASSED",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"status": "Passing",
"examples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.4898056755774"
},
"message": "Balance stays nonnegative",
"details": {
"balance": 12
}
}
],
"counterexamples": [],
"description": null,
"is_event": true,
"is_group": false,
"example_count": 1,
"counterexample_count": 0
}
]
}
Passing with both kinds of observations
{
"type": "PROPERTIES_PASSED",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"status": "Passing",
"examples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.4898056755774"
},
"message": "Balance stays nonnegative",
"details": {
"balance": 12
}
}
],
"counterexamples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "401.25"
},
"message": "Balance stays nonnegative",
"details": {
"balance": -1
}
}
],
"description": null,
"is_event": true,
"is_group": false,
"example_count": 1,
"counterexample_count": 1
}
]
}
Passing without retained event samples
{
"type": "PROPERTIES_PASSED",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"status": "Passing",
"examples": [],
"counterexamples": [],
"description": null,
"is_event": true,
"is_group": false,
"example_count": 0,
"counterexample_count": 0
}
]
}
Failing with a counterexample
{
"type": "PROPERTIES_FAILED",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"status": "Failing",
"examples": [],
"counterexamples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "401.25"
},
"message": "Balance stays nonnegative",
"details": {
"balance": -1
}
}
],
"description": null,
"is_event": true,
"is_group": false,
"example_count": 0,
"counterexample_count": 1
}
]
}
Failing with passing and failing observations
{
"type": "PROPERTIES_FAILED",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"status": "Failing",
"examples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.4898056755774"
},
"message": "Balance stays nonnegative",
"details": {
"balance": 12
}
}
],
"counterexamples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "401.25"
},
"message": "Balance stays nonnegative",
"details": {
"balance": -1
}
}
],
"description": null,
"is_event": true,
"is_group": false,
"example_count": 1,
"counterexample_count": 1
}
]
}
Failing without retained event samples
{
"type": "PROPERTIES_FAILED",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"status": "Failing",
"examples": [],
"counterexamples": [],
"description": null,
"is_event": true,
"is_group": false,
"example_count": 0,
"counterexample_count": 0
}
]
}
Opt-in samples with cumulative counts
{
"type": "NEW_EXAMPLES_FOUND",
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"example_count": 24,
"counterexample_count": 2,
"examples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.4898056755774"
},
"message": "Balance stays nonnegative",
"details": {
"balance": 12
}
}
],
"counterexamples": [
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "401.25"
},
"message": "Balance stays nonnegative",
"details": {
"balance": -1
}
}
],
"description": null,
"status": "Pending",
"is_event": true,
"is_group": false
}
]
}
Successful end of the stream
{
"type": "RUN_FINALIZED",
"data": []
}
Stream closed before finalization
{
"error": "This endpoint is temporarily unavailable. Please retry with backoff."
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Get logs for a specific moment

GET/api/v0/runs/{run_id}/logs

Streams the logs for a moment in the test run as newline-delimited JSON (NDJSON) in chronological order. Each line is a self-contained JSON object. The response is streamed and the connection remains open until all matching log lines have been sent.

Parameters
run_idpathRequired
string
Unique identifier of the test run to retrieve logs for.
input_hashqueryRequired
string
The input hash value identifying the moment.
vtimequeryRequired
string
The virtual time value identifying the moment.
begin_vtimequery
string
Start streaming logs from this virtual time instead of from the beginning of the test run.
begin_input_hashquery
string
The input hash of the moment to start streaming logs from. Must be provided together with begin_vtime to fully identify the begin moment.
Responses
200A stream of log lines in NDJSON format. Each line is a JSON object.

Content type: application/x-ndjson

One of:

object
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

object
errorRequired
string
The error message.
Example: An unexpected error occurred. Please try again later.

Accepts additional properties.

A raft pre-vote request log line
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.4898056755774"
},
"output_text": "{\"level\":\"info\",\"ts\":\"2026-03-26T01:42:55.628233Z\",\"logger\":\"raft\",\"caller\":\"v3@v3.6.0/raft.go:1064\",\"msg\":\"2c6c7b8d0d0933f7 [logterm: 78, index: 436] sent MsgPreVote request to dcb68c82481661be at term 79\"}",
"source": {
"container": "etcd0",
"name": "etcd0",
"stream": "error"
}
}
A slow request warning log line
{
"output_text": "{\"level\":\"warn\",\"ts\":\"2026-03-26T01:41:30.289731Z\",\"caller\":\"txn/util.go:93\",\"msg\":\"apply request took too long\",\"took\":\"200.69629ms\",\"expected-duration\":\"100ms\",\"prefix\":\"read-only range \",\"request\":\"key:\\\"key\\\" \",\"response\":\"\",\"error\":\"context deadline exceeded\"}",
"source": {
"container": "etcd1",
"name": "etcd1",
"stream": "error"
},
"moment": {
"input_hash": "-8212366801093655922",
"vtime": "313.15126806590706"
}
}
A watch channel closed log line
{
"output_text": "{\"level\":\"info\",\"ts\":1774489067.310644,\"caller\":\"client/watch.go:101\",\"msg\":\"Watch channel closed\"}",
"source": {
"container": "client",
"name": "antithesis/pods/client/commands/robustness/singleton_driver_traffic.err",
"pid": 45,
"stream": "error"
},
"moment": {
"input_hash": "-3704286174724581163",
"vtime": "90.17225814750418"
}
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Stream build logs

GET/api/v0/runs/{run_id}/build_logs

Streams the build logs for a test run as newline-delimited JSON (NDJSON). Each line contains a timestamp, a stream indicator, and the log text. The response is streamed and the connection remains open until all matching log lines have been sent.

Known limitation: Build logs are not available for test runs created before Antithesis version 54.5. Requests for such runs return 404 Not Found.

Parameters
run_idpathRequired
string
Unique identifier of the test run to retrieve build logs for.
Responses
200A stream of build log lines in NDJSON format.

Content type: application/x-ndjson

One of:

object
timestampRequired
string <date-time>
UTC timestamp of the log line (ISO 8601).
Example: 2025-03-20T02:01:12Z
stream
stringAvailable values: stdout, stderr
Whether this line is from standard output or standard error.
textRequired
string
The log line text.
Example: Building image payments-service...

Accepts additional properties.

object
errorRequired
string
The error message.
Example: An unexpected error occurred. Please try again later.

Accepts additional properties.

Example response
{
"timestamp": "2026-05-14T03:03:24.668Z",
"text": "About to wait for the flock. If the script is hanging here, somebody else is doing a build.",
"stream": "stdout"
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

List test run properties

GET/api/v0/runs/{run_id}/properties

Returns a paginated list of a test run's properties and their current status: Passing, Failing, or Pending (not yet resolved). Each property includes a sample of its examples and counterexamples. Use the status parameter to filter by status.

To get the next page, pass the next_cursor value from the previous response as after, and keep the same status filter. Results are read live, so properties can change while you page through them. If a cursor has expired, the endpoint returns 400 Bad Request, and you need to start again from the first page. Query parameters that the endpoint doesn't recognize are ignored.

Completed runs return the results Antithesis stored when the run finished. For cancelled and incomplete runs, results are calculated when you request them, which can take a while for a large run.

Runs created before Antithesis version 66 return their saved results in an older format. Their properties are only Passing or Failing, so filtering on Pending returns no properties, and the response doesn't include total_count or response_count.

Property results aren't available for test runs created before Antithesis version 54.5. Requests for these runs return 404 Not Found.

Parameters
run_idpathRequired
string
Unique identifier of the test run to retrieve properties for.
limitquery
integerDefault: 50Min: 1 · Max: 5000
Maximum page size.
afterquery
string
Opaque next_cursor from a previous page.
statusquery
array<string>Available values: Passing, Failing, Pending
Filter by one or more statuses. Repeat the parameter, for example status=Passing&status=Pending. Matched case-insensitively. Omit for all statuses.
Responses
200A page of property results.

Content type: application/json

dataRequired
array<any>
One of for items of data

object

id
string
An opaque, unique, stable identifier for the property within its run.
nameRequired
string
Display name of the property; names need not be unique.
description
string (nullable)
A human-readable description of the property.
category
string
Property category, omitted when unavailable.
team
string
Owning team, omitted when unavailable.
event_set
string
Serialized event-set definition, omitted when unavailable. Included in property responses and stream notifications when available.
passing_predicate
string
Serialized passing predicate, omitted when unavailable. Included in property responses and stream notifications when available.
statusRequired
stringAvailable values: Passing, Failing, Pending
Current property status. Pending means the property has not resolved. Runs created before Antithesis version 66 report only Passing or Failing.
is_eventRequired
anyAvailable values: true
Always true for event properties. Discriminates this branch of the oneOf.
is_group
boolean
When true, this property represents a group property that contains other properties. Individual properties belonging to this group will reference it by name via the group field.
group
string
The name of the group this property belongs to. Present only for properties that are part of a group.
example_count
integer <uint32> (nullable)
Total number of examples observed.
counterexample_count
integer <uint32> (nullable)
Total number of counterexamples observed.
examples
array<object>
A sample of example events that satisfy the property. This is not an exhaustive list.
Items of examples
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

counterexamples
array<object>
A sample of counterexample events that violate the property. This is not an exhaustive list.
Items of counterexamples
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

Accepts additional properties.

object

id
string
An opaque, unique, stable identifier for the property within its run.
nameRequired
string
Display name of the property; names need not be unique.
description
string (nullable)
A human-readable description of the property.
category
string
Property category, omitted when unavailable.
team
string
Owning team, omitted when unavailable.
event_set
string
Serialized event-set definition, omitted when unavailable. Included in property responses and stream notifications when available.
passing_predicate
string
Serialized passing predicate, omitted when unavailable. Included in property responses and stream notifications when available.
statusRequired
stringAvailable values: Passing, Failing, Pending
Current property status. Pending means the property has not resolved. Runs created before Antithesis version 66 report only Passing or Failing.
is_eventRequired
anyAvailable values: false
Always false for non-event properties. Discriminates this branch of the oneOf.
is_group
boolean
When true, this property represents a group property that contains other properties. Individual properties belonging to this group will reference it by name via the group field.
group
string
The name of the group this property belongs to. Present only for properties that are part of a group.
example_count
integer <uint32> (nullable)
Total number of examples observed.
counterexample_count
integer <uint32> (nullable)
Total number of counterexamples observed.
examples
array<any>
A sample of example instances that satisfy the property. This is not an exhaustive list.
counterexamples
array<any>
A sample of counterexample instances that violate the property. This is not an exhaustive list.

Accepts additional properties.

total_count
integerMin: 0
Total properties matching the status filter at the time of the read. Omitted for runs created before Antithesis version 66.
response_count
integerMin: 0
Number of properties in this page. Omitted for runs created before Antithesis version 66.
next_cursor
string (nullable)
Opaque pagination cursor. Pass as the after query parameter to fetch the next page. Null if no more pages.
Example response
{
"data": [
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"description": null,
"status": "Pending",
"is_event": true,
"is_group": false,
"example_count": 0,
"counterexample_count": 0,
"examples": [],
"counterexamples": []
}
],
"total_count": 1,
"response_count": 1,
"next_cursor": null
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Get a test run property

GET/api/v0/runs/{run_id}/properties/{property_id}

Returns a single property from a test run, in the same form as the List test run properties endpoint. For a run in progress, the property can change between requests. For a completed run, the endpoint returns the property's final result.

For runs created before Antithesis version 66, the property comes from the run's saved results. The status can only be Passing or Failing (not Pending), and it doesn't include category, team, event_set, or passing_predicate.

Parameters
run_idpathRequired
string
Unique identifier of the test run.
property_idpathRequired
string
Opaque property identifier, as returned in id by /properties and the run stream.
Responses
200The current property snapshot.

Content type: application/json

One of:

object
id
string
An opaque, unique, stable identifier for the property within its run.
nameRequired
string
Display name of the property; names need not be unique.
description
string (nullable)
A human-readable description of the property.
category
string
Property category, omitted when unavailable.
team
string
Owning team, omitted when unavailable.
event_set
string
Serialized event-set definition, omitted when unavailable. Included in property responses and stream notifications when available.
passing_predicate
string
Serialized passing predicate, omitted when unavailable. Included in property responses and stream notifications when available.
statusRequired
stringAvailable values: Passing, Failing, Pending
Current property status. Pending means the property has not resolved. Runs created before Antithesis version 66 report only Passing or Failing.
is_eventRequired
anyAvailable values: true
Always true for event properties. Discriminates this branch of the oneOf.
is_group
boolean
When true, this property represents a group property that contains other properties. Individual properties belonging to this group will reference it by name via the group field.
group
string
The name of the group this property belongs to. Present only for properties that are part of a group.
example_count
integer <uint32> (nullable)
Total number of examples observed.
counterexample_count
integer <uint32> (nullable)
Total number of counterexamples observed.
examples
array<object>
A sample of example events that satisfy the property. This is not an exhaustive list.
Items of examples
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

counterexamples
array<object>
A sample of counterexample events that violate the property. This is not an exhaustive list.
Items of counterexamples
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

Accepts additional properties.

object
id
string
An opaque, unique, stable identifier for the property within its run.
nameRequired
string
Display name of the property; names need not be unique.
description
string (nullable)
A human-readable description of the property.
category
string
Property category, omitted when unavailable.
team
string
Owning team, omitted when unavailable.
event_set
string
Serialized event-set definition, omitted when unavailable. Included in property responses and stream notifications when available.
passing_predicate
string
Serialized passing predicate, omitted when unavailable. Included in property responses and stream notifications when available.
statusRequired
stringAvailable values: Passing, Failing, Pending
Current property status. Pending means the property has not resolved. Runs created before Antithesis version 66 report only Passing or Failing.
is_eventRequired
anyAvailable values: false
Always false for non-event properties. Discriminates this branch of the oneOf.
is_group
boolean
When true, this property represents a group property that contains other properties. Individual properties belonging to this group will reference it by name via the group field.
group
string
The name of the group this property belongs to. Present only for properties that are part of a group.
example_count
integer <uint32> (nullable)
Total number of examples observed.
counterexample_count
integer <uint32> (nullable)
Total number of counterexamples observed.
examples
array<any>
A sample of example instances that satisfy the property. This is not an exhaustive list.
counterexamples
array<any>
A sample of counterexample instances that violate the property. This is not an exhaustive list.

Accepts additional properties.

Example response
{
"id": "27a7cb0b311c8481c4ce12f3347fadbf",
"name": "Balance stays nonnegative",
"description": null,
"status": "Pending",
"is_event": true,
"is_group": false,
"example_count": 0,
"counterexample_count": 0,
"examples": [],
"counterexamples": []
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Search test run events

GET/api/v0/runs/{run_id}/events

Searches events in a test run for the given query string. The search matches against output text, assertion messages, function names, and test composer commands. Results are streamed as newline-delimited JSON (NDJSON). Each line is a self-contained JSON object representing an event.

Parameters
run_idpathRequired
string
Unique identifier of the test run to search.
qquery
stringDefault:
The search term. Matches events where this string is contained in the output text, assertion message, function name, or test command. When omitted, defaults to an empty string, which matches all events.
limitquery
integerDefault: 50Min: 1 · Max: 1000
Maximum number of results to return. Must be between 1 and 1000. Defaults to 50.
Responses
200A stream of matching events in NDJSON format. Each line is a JSON object.

Content type: application/x-ndjson

One of:

object
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

object
errorRequired
string
The error message.
Example: An unexpected error occurred. Please try again later.

Accepts additional properties.

Example response
{
"moment": {
"input_hash": "-2978388909754056022",
"vtime": "22.66615231265314"
},
"IPT_bytes_out": 1073904,
"source": {
"command_id": "BSPID1ERCnmoGEnk6WjwIZ4o3TM",
"name": "setup",
"stream": "info"
},
"output_text": "3:08:17AM: ^ Pending: ContainerCreating"
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Search events with event sets

POST/api/v0/runs/{run_id}/events/search

Runs a search query across a single test run's events and returns the matching events. The test run to search is identified by the run_id path parameter. To count matching events instead, use /api/v0/runs/{run_id}/events/search/count.

Search query

The query field is an event set. An event set is a pipeline of verbs separated by ., applied left to right to the underlying event stream. The event set reference has the full grammar.

Property-shaped searches

To make the search-property shaped, you can use the property event_set as query, and send the predicate as is_passing_predicate (a JavaScript function on example to a boolean to indicate passing/failing) and passing (default false, the failing events).

Validating a query

When validate_only is true the server checks only that query is syntactically valid and does not execute it; no events are returned. The server responds with 200 OK and an empty body for a syntactically valid query, and for an invalid query, the server responds with 400 Bad Request. validate_only takes precedence over is_streaming.

Streaming

When is_streaming is true the connection remains open and the server continues to emit events as they are observed in live test runs. When false the server closes the connection once it has returned the current matching set.

Parameters
run_idpathRequired
string
Unique identifier of the test run to search.
Request Body Required

Content type: application/json

queryRequired
string
An event set query. A pipeline of dot-separated verbs (matches, contains, not_matches, excludes, map, filter, flatmap, fold, narrow, as_base_for, union, intersect, difference, distinct_by_moment, with_last, with_next) applied to the underlying event stream. See the event sets reference for the full grammar.
Example: matches({container: "etcd0", stream: "error"}).filter(ev => ev.output_text.includes("raft"))
is_passing_predicate
string
A JavaScript function from event to boolean, as a property's predicate: a truthy result means the event is passing example on the property as defined by is_passing_predicate and the query event set. A predicate that does not parse, is not a function, or throws is rejected with 400 Bad Request.
Example: ev => !ev.output_text.includes("panic")
passing
booleanDefault: false
Whether to return passing (true) or failing (false) examples according to is_passing_predicate. Defaults to false, the failing events. Requires is_passing_predicate.
is_streaming
booleanDefault: false
When true, the connection stays open and the server keeps emitting newly observed events as they arrive. When false, the server closes the connection after returning the current matching set. Defaults to false.
limit
integerDefault: 50Min: 1 · Max: 999
Maximum number of events to return. Must be between 1 and 999. Defaults to 50. Once the requested number of events have been returned the server terminates the connection; this applies whether or not is_streaming is true.
validate_only
booleanDefault: false
When true, the server only validates the syntax of query without executing it. The server responds with 200 OK and an empty body for a syntactically valid query, and for an invalid query, the server responds with 400 Bad Request. No events are returned and no count is computed. Defaults to false.

Accepts additional properties.

Responses
200Matching events as NDJSON. When validate_only is true and the query is valid, the body is empty.

Content type: application/x-ndjson

momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

Example response
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.4898056755774"
},
"output_text": "{\"level\":\"info\",\"msg\":\"sent MsgPreVote request\"}",
"source": {
"container": "etcd0",
"name": "etcd0",
"stream": "error"
}
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Count events with event sets

POST/api/v0/runs/{run_id}/events/search/count

Runs a search query across a single test run's events and returns the number of matching events. The test run to search is identified by the run_id path parameter.

Search query

The query field is an event set. An event set is a pipeline of verbs separated by ., applied left to right to the underlying event stream. The event set reference has the full grammar.

Property-shaped searches

To make the search-property shaped, you can use the property event_set as query, and send the predicate as is_passing_predicate (a JavaScript function on example to a boolean to indicate passing/failing) and passing (default false, the failing events).

Validating a query

When validate_only is true the server checks only that query is syntactically valid and does not execute it; no count is computed. The server responds with 200 OK and an empty body for a syntactically valid query, and for an invalid query, the server responds with 400 Bad Request.

Parameters
run_idpathRequired
string
Unique identifier of the test run whose matching events should be counted.
Request Body Required

Content type: application/json

queryRequired
string
An event set query. A pipeline of dot-separated verbs (matches, contains, not_matches, excludes, map, filter, flatmap, fold, narrow, as_base_for, union, intersect, difference, distinct_by_moment, with_last, with_next) applied to the underlying event stream. See the event sets reference for the full grammar.
Example: matches({container: "etcd0", stream: "error"}).filter(ev => ev.output_text.includes("raft"))
is_passing_predicate
string
A JavaScript function from event to boolean, as a property's predicate: a truthy result means the event is passing example on the property as defined by is_passing_predicate and the query event set. A predicate that does not parse, is not a function, or throws is rejected with 400 Bad Request.
Example: ev => !ev.output_text.includes("panic")
passing
booleanDefault: false
Whether to return passing (true) or failing (false) examples according to is_passing_predicate. Defaults to false, the failing events. Requires is_passing_predicate.
validate_only
booleanDefault: false
When true, the server only validates the syntax of query without executing it. The server responds with 200 OK and an empty body for a syntactically valid query, and for an invalid query, the server responds with 400 Bad Request. No count is computed. Defaults to false.

Accepts additional properties.

Responses
200The number of matching events. When validate_only is true and the query is valid, the body is empty.

Content type: application/json

countRequired
integer <uint64>Min: 0
The total number of events matching the query.

Accepts additional properties.

Example response
{
"count": 318446
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Execute a command in a test run

POST/api/v0/runs/{run_id}/command

Executes a bash command in a test run, starting at a given moment.

The moment can come from any test run, including one that has already completed. The command executes in the in-progress run given by run_id:

  • If the moment is from that run, the command runs on it directly.
  • If the moment is from a different run, pass that run's ID as source_run_id (or its debugging session ID as source_session_id). If you launched the in-progress run with Launch a debugging session, you can leave both out, and the server uses the run you launched it from. The server "rewarms" the moment from the source run, emitting Rewarm_Progress records ahead of the command output. The source run must be on the same performance tier as run_id.

If you don't have an in-progress run, start one with Launch a debugging session.

Set container to the container you want the script to run in. To run it on the host machine instead, set container to _ANTITHESIS_HOST.

If you're using Kubernetes, set container to _ANTITHESIS_HOST, and manage the cluster with kubectl commands. For example, use kubectl get pods -A to list the pods, and kubectl exec <pod> -n <namespace> -c <container> -- <command> to run a command inside a pod.

Returns the command's stdout and stderr. Set include_system_logs to true to also include every event observed during the command's execution.

Output is streamed as newline-delimited JSON (NDJSON). Command output uses the same Event shape returned by the Get logs for a specific moment endpoint.

A successful stream ends with exactly one command result with a status of exited or timed_out. A stream that fails after the response begins ends with a Stream_Error.

The command times out after 600 seconds by default; set timeout_seconds to change this. Rewarming time doesn't count toward the timeout.

Parameters
run_idpathRequired
string
Unique identifier of the test run whose in-progress session should execute the command.
Request Body Required

Content type: application/json

momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

scriptRequired
string
Bash script to execute in the specified container or on the host.
Example: uname -a
containerRequired
string
Name or ID of the container in which to execute the script. Use _ANTITHESIS_HOST to execute directly on the host.
Example: my-service
include_system_logs
booleanDefault: false
When true, the streamed output includes every event observed during the command's execution, not just the command's own stdout and stderr. Defaults to false.
timeout_seconds
integer <uint64>Default: 600Min: 0
Maximum number of seconds to wait for the command to exit before emitting a timed_out result. Defaults to 600. Time spent rewarming the requested moment does not count toward this timeout. Rewarming has a separate one-hour limit; exceeding it returns an error and the command is not executed.
source_session_id
string
Debugging session ID of the run the moment comes from, if it's different from run_id. The server rewarms the moment from this run. Specify either this or source_run_id, but not both. If neither is given, the server falls back to the source the run was launched with: for a run launched by the multiverse debugging webhook, antithesis.debugging.session_id if set, otherwise antithesis.debugging.run_id. If no source is available and the moment is cold, the request is rejected.
Example: 9c69eff4f842f988a0fea0acfc2d6195-61-2
source_run_id
string
ID of the run the moment comes from, if it's different from run_id. The server rewarms the moment from this run. Specify either this or source_session_id, but not both. If neither is given, the server falls back to the multiverse debugging launch parameters; see source_session_id.
Example: 9c69eff4f842f988a0fea0acfc2d6195-61-2

Accepts additional properties.

Responses
200An NDJSON stream containing zero or more command-output Event records followed by exactly one terminal Command_Termination_Result. If an error occurs after the response begins, the stream instead ends with a Stream_Error. Each line is a self-contained JSON object. When a cold moment has to be rewarmed first, the stream begins with Rewarm_Progress records. Clients should classify lines by status: rewarming is a progress record, exited or timed_out is the terminal result, and a line without status is an event.

Content type: application/x-ndjson

One of:

object
momentRequired
object
Identifies a specific moment in the run's execution timeline.
Properties of moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

Variant 2

One of:

object
statusRequired
stringAvailable values: exited
exit_codeRequired
integer <int64> (nullable)
The command's exit code, or null if no exit code was available.
end_momentRequired
object
The moment immediately after the command finished. Pass it as the moment of a subsequent request to chain commands.
Properties of end_moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

object
statusRequired
stringAvailable values: timed_out
last_moment
object
The latest command-output moment observed before the timeout, if any. This is informational and does not imply that the command stopped executing.
Properties of last_moment
input_hashRequired
string
The input hash value identifying the moment.
Example: -3625518438076122494
vtimeRequired
string
The virtual time value identifying the moment.
Example: 398.4898056755774

Accepts additional properties.

Accepts additional properties.

object
percent_completeRequired
integerMin: 0 · Max: 100
Share of the inputs to the requested moment from the source run replayed so far, as a whole percentage.
Example: 40
statusRequired
stringAvailable values: rewarming
Always rewarming on a progress record; this is what distinguishes it from a Command_Termination_Result. Additional values may be added in future.

Accepts additional properties.

object
errorRequired
string
The error message.
Example: An unexpected error occurred. Please try again later.

Accepts additional properties.

A line written to stdout
{
"moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.491"
},
"output_text": "Linux antithesis 6.12.0",
"source": {
"stream": "info"
}
}
The command exited
{
"status": "exited",
"exit_code": 0,
"end_moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.492"
}
}
The command timed out
{
"status": "timed_out",
"last_moment": {
"input_hash": "-3625518438076122494",
"vtime": "398.491"
}
}
The requested moment was not warm; rewarming has begun
{
"status": "rewarming",
"percent_complete": 0
}
Rewarming is partway through replaying inputs
{
"status": "rewarming",
"percent_complete": 40
}
The moment is warm; the command is now executing
{
"status": "rewarming",
"percent_complete": 100
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Cancel a test run

POST/api/v0/runs/{run_id}/cancel

Requests cancellation of the test run identified by run_id, including its descendant jobs. Cancellation is asynchronous, so a successful response confirms that cancellation was requested, but jobs may still be stopping. Once the jobs stop, the run is marked as cancelled and its finish timestamps are set. Runs that are already completed, cancelled, or incomplete return 409 Conflict without changing their status or finish timestamps. No request body is required.

Parameters
run_idpathRequired
string
Unique identifier of the test run to cancel.
Responses
200Cancellation successfully requested.

Content type: application/json

Type: object

Example response
{}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Launch

Launch a test run or debugging session.

Authenticate with an API key in the Authorization header (see Authentication above). Basic auth (previously used by webhooks) is also accepted for backwards compatibility but is now deprecated. Use API keys for all new integrations.

To use basic auth, pass your tenant's machine credentials (user and password):

curl --fail -u 'USER:PASSWORD' -X POST https://<TENANT>.antithesis.com/api/v1/launch/{launcher_name}

Launch a test

POST/api/v1/launch/{launcher_name}

Kicks off a test using the specified launcher (e.g. basic_test or basic_k8s_test). Fetches the relevant container images specified in configuration files and in antithesis.images, builds the test environment, and runs the test for the duration set in antithesis.duration. Returns an HTTP status code indicating whether the test was successfully started (not the test result itself). New tests are rejected with a 402 while the tenant's usage for the current entitlement period, as reported by /api/v0/usage/summary over that period, is at or above the usage cap (see /api/v0/usage/cap). While no entitlement period is in force, the most recent period is treated as continuing. Tenants with no cap are not limited. Tests that are already running are not affected.

Parameters
launcher_namepathRequired
string
Name of the launcher to use. Use basic_test for Docker Compose orchestration or basic_k8s_test for Kubernetes orchestration.
Request Body Required

Content type: application/json

paramsRequired
object
Launch parameters. All parameters are optional. All vcs.* parameters are filled in by the Antithesis GitHub Action if the test run is triggered by it; but you can set them by hand.
Properties of params
antithesis.config_image
string
The image version of your config image. This should be a single image version formatted in the same way as those in the antithesis.images parameter.
Example: my-config:latest
antithesis.description
string
A description of the test run. Appears in report headers and any emails triggered by the run.
Example: basic_test on main
antithesis.duration
string
Desired duration of the test run in minutes.
Example: 30
antithesis.fault_exclusions
string
A regular expression that identifies containers (or pods, on Kubernetes) that are excluded from fault injection. Defaults to no exclusions.
The expression is matched against the container name and uses the Rust regex syntax, which does not support lookaround or backreferences. The maximum length is 1024 characters.
Thread pausing faults are not affected, because they are not scoped to a container.
Example: ^(raft-client|raft-monitor)$
antithesis.fault_tolerance
stringAvailable values: none, resilient, high_availability, legacy
The level of faults that Antithesis injects:
none: No faults.
resilient: Faults that degrade the system without stopping any node or network link: baseline latency, Slowed or Jammed clogs, node pauses, CPU modulation, thread pausing, and clock skips.
high_availability: Everything in resilient, plus partitions, Stopped clogs, and node termination.
legacy: Enables all network faults and thread pausing. Not recommended except for backwards compatibility with a custom notebook.
Example: resilient
antithesis.filter_logs_matching
string
An RE2 pattern matching log lines to suppress while the test runs. Suppressed lines can be recovered in the Multiverse Debugger. Matching is unanchored and case-sensitive, so any line containing a match is suppressed; prefix the pattern with (?i) for case-insensitive matching. Lookahead, lookbehind and backreferences are not supported. See Retroactive logging.
Example: (?i)^\s*(TRACE|DEBUG)\b
antithesis.filter_source_matching
string
An RE2 pattern matching the sources whose output should be suppressed while the test runs. Where antithesis.filter_logs_matching selects individual lines by their content, this suppresses a matching source's output in its entirety. A source is the emitter of a log line, usually the name of the process that wrote it; the source field on each log line shows the exact names available to match against. The pattern is applied to the source name rather than to the line, and carries the same RE2 restrictions as antithesis.filter_logs_matching. This parameter has no equivalent field in the test launcher dialogue. See Retroactive logging.
Example: ^metrics-agent$
antithesis.images
string
A semicolon-delimited list of container image versions needed in the testing environment. Each entry in the format [REGISTRY/]NAME(:TAG|@DIGEST). In most cases, images are parsed from the orchestration configuration (e.g. docker-compose.yaml or /manifests) and do not need to be specified here. It is recommended to use a digest over a tag. Images specified by digest will be tagged as latest within the Antithesis environment. The default registry is us-central1-docker.pkg.dev/molten-verve-216720/$TENANT_NAME-repository/. When images mentioned in the config are also passed via this parameter, the value here overwrites the config. We recommend only using this parameter for images not already mentioned in the config files.
Example: registry/container_1:tag1; registry/container_2:latest
antithesis.is_ephemeral
string (nullable)Available values: true, false
A boolean (represented as "true" or "false") that indicates whether or not the run's results should be reflected in future reports as a historic result. Set to "true" when kicking off one-off, exploratory runs. Defaults to "false".
antithesis.performance_tier
stringAvailable values: standard, fast, turbo
The performance tier to use for the test run. Higher tiers explore system states faster through increased parallelism, consuming more core hours. Defaults to "standard".
Example: standard
antithesis.report.recipients
string
A semicolon-delimited list of email addresses to receive the triage report link. If not specified, emails are sent to the default users configured for the endpoint.
Example: user1@example.com; user2@example.com
antithesis.source
string
An identifier used to separate property history in reports. Each property's history is generated from all previous runs sharing the same source value. Useful for tracking test history per branch.
Example: main
attrs.<NAME>
string
Arbitrary key-value annotations for the run. Replace <NAME> with any name you choose, and pass as many attrs.* parameters as you like. Used to filter test runs in the Runs view.
Example: staging
run.caller_name
string
The name of the application or script that launched the run, such as antithesis-trigger-action or explore_the_multiverse.sh.
Example: antithesis-trigger-action
run.caller_type
stringAvailable values: antithesis_ui, antithesis_scheduler, internal_scheduler, antithesis_cli, github_action, snouty, user, unknown
The type of application or script that launched the run.
Example: github_action
run.creator_name
string
A unique identifier for the person who launched the run, directly or indirectly.
Example: jane.doe
run.cron_schedule
string
For recurring runs, a valid cron expression for when the run is scheduled. Omit it, or pass an empty string, for a one-off run.
Example: 0 2 * * 1-5
run.team
string
The team responsible for the run. Lets you filter runs by team, separately from the user or repository, which may be shared across teams.
Example: Payments Team
vcs.pr_id
string
For runs started from a GitHub pull request, the PR number.
Example: 482
vcs.pr_link
string
For runs started from a GitHub pull request, the link to the PR.
Example: https://github.com/acme/payments-service/pull/482
vcs.pr_owner
string
For runs started from a GitHub pull request, the GitHub username of the PR's author.
Example: janedoe
vcs.pr_title
string
For runs started from a GitHub pull request, the title of the PR.
Example: Fix duplicate charge on retry
vcs.repo_branch
string
For runs started from a version control repository, the branch under test.
Example: fix/duplicate-charge
vcs.repo_name
string
For runs started from a version control repository, the repository name.
Example: payments-service
vcs.repo_owner
string
For runs started from a version control repository, the repository owner.
Example: acme
vcs.repo_type
string
For runs started from a version control repository, the type of version control, such as github, gitlab or mercurial.
Example: github
vcs.system_name
string
A readable name for the system under test that doesn't change between versions.
Example: Ledger API
vcs.version_id
string
A unique identifier for this version of the system under test. For runs started from a version control repository, the hash of the commit under test.
Example: a1b2c3d4e5f678901234567890abcdef12345678
vcs.version_link
string
For runs started from a web-hosted version control repository, a link to the commit under test.
Example: https://github.com/acme/payments-service/commit/a1b2c3d4e5f678901234567890abcdef12345678

Additional properties: string — Tooling integration parameters (antithesis.integrations.<type>.callback_url and antithesis.integrations.<type>.token, where type is github, discord, or slack), and any custom parameters Antithesis has created for your tenant. Other unrecognized parameters are discarded.

Accepts additional properties.

Responses
202Test successfully launched.

Content type: application/json

runIdRequired
string (nullable)
Unique identifier for the launched run.
Example: c8d2f4a6e0b3197d5f8a2c4e6b0d3f79-49-1
statusCodeRequired
integer
HTTP status code indicating whether the test was successfully started.
Example: 200

Accepts additional properties.

Example response
{
"statusCode": 202,
"runId": "0e62aa320a60967967096401ce826bd5-54-1"
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Launch a debugging session

POST/api/v1/launch/debugging

Kicks off a multiverse debugging session that'll be available for six hours. Returns an HTTP status code indicating whether the debugging session request was successfully accepted and the session is getting ready.

The target test run is identified by antithesis.debugging.run_id. For backwards compatibility, antithesis.debugging.session_id is also accepted — prefer run_id for new integrations.

Request Body Required

Content type: application/json

paramsRequired
any
Launch parameters. All parameters are optional.
One of for params

Identified by run ID

antithesis.debugging.run_idRequired
string
The run ID of the test run you want to start debugging.
Example: 9043254f65c9c65d63fe043a0abfc7fc-53-1
antithesis.debugging.input_hashRequired
string
Obtain it from the copy moment button in the triage report.
Example: -9067336385060865277
antithesis.debugging.vtimeRequired
string
The virtual time at which you want to start debugging. Obtain it from the copy moment button in the triage report.
Example: 45.334635781589895
antithesis.event_description
string
A description of the debugging event or session.
Example: Investigate the failed assertion at this moment
antithesis.report.recipients
string
A semicolon-delimited list of email addresses that receive the link to the debugging session when ready. If not specified, emails are sent to the default users configured for the endpoint.
Example: user1@example.com; user2@example.com

Identified by session ID

antithesis.debugging.session_idRequired
string
Identifies the test run you want to start debugging. Prefer antithesis.debugging.run_id for new integrations.
Example: d5d1c9cf0e64b5dd69b00e97b07fe3f4-18-1
antithesis.debugging.input_hashRequired
string
Obtain it from the copy moment button in the triage report.
Example: -9067336385060865277
antithesis.debugging.vtimeRequired
string
The virtual time at which you want to start debugging. Obtain it from the copy moment button in the triage report.
Example: 45.334635781589895
antithesis.event_description
string
A description of the debugging event or session.
Example: Investigate the failed assertion at this moment
antithesis.report.recipients
string
A semicolon-delimited list of email addresses that receive the link to the debugging session when ready. If not specified, emails are sent to the default users configured for the endpoint.
Example: user1@example.com; user2@example.com

Accepts additional properties.

Responses
202Debugging session launcher successfully started.

Content type: application/json

runId
string (nullable)
Unique identifier for the launched debugging session.
Example: c8d2f4a6e0b3197d5f8a2c4e6b0d3f79-49-1
statusCodeRequired
integer
HTTP status code indicating whether the debugging session was accepted.
Example: 202

Accepts additional properties.

Example response
{
"statusCode": 202,
"runId": "633c43d99162a42d8c6b784751802f30-54-1"
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Usage

Information about usage

Lists all usage entries

GET/api/v0/usage

Returns a paginated list of usage line items for runs whose billed end time falls in the half-open window [start_time, end_time). If either time is not provided, the window is unbounded in that direction. Results are ordered by run start time, newest first.

Parameters
start_timequery
string <date-time>
Only return runs that ended at or after this timestamp (ISO 8601). Must be before end_time when both are provided.
end_timequery
string <date-time>
Only return runs that ended strictly before this timestamp (ISO 8601). Must be after start_time when both are given.
limitquery
integerDefault: 50Min: 1 · Max: 50000
Maximum number of results to return. Server-capped at 50000.
afterquery
string
Cursor for pagination. Pass the next_cursor value (as well as any filter parameters) from a previous response to fetch the next page.
Responses
200A paginated list of usage line items

Content type: application/json

dataRequired
array<object>
Items of data
run_idRequired
string
Unique identifier for the run of this usage entry.
Example: 9325f006ffd3a399a8497bc888878b97-50-1
hoursRequired
number
The number of usage hours associated with the run.
Example: 200.535
start_timeRequired
string <date-time>
Timestamp when the run's billable usage began (ISO 8601).
Example: 2024-01-15T10:14:20Z
end_timeRequired
string <date-time>
Timestamp when the run's billable usage ended (ISO 8601).
Example: 2024-01-15T12:34:56Z
next_cursor
string (nullable)
Opaque pagination cursor. Pass as the after query parameter to fetch the next page. Null if no more pages.
Example response
{
"data": [
{
"run_id": "9043254f65c9c65d63fe043a0abfc7fc-53-1",
"hours": 200,
"start_time": "2026-04-28T13:49:49Z",
"end_time": "2026-04-28T14:14:07Z"
},
{
"run_id": "ced73597f5f6499a6041f4c7f2329cf1-53-1",
"hours": 350,
"start_time": "2026-04-28T13:49:49Z",
"end_time": "2026-04-28T14:07:36Z"
},
{
"run_id": "ff0192ee9607f8ffa39187731d359c43-54-0",
"hours": 60,
"start_time": "2026-04-28T14:00:00Z",
"end_time": "2026-04-28T14:15:00Z"
}
],
"next_cursor": "MjAyNi0wNC0yOFQxMzo0OTo0NVosMDM2MDc0MjdmMDg0NmE0OGE3ZjY2ZTQyYTUxOTY3ODktNTMtMQ=="
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Gets a total of usage hours used

GET/api/v0/usage/summary

Gets the total number of runs and usage hours for runs whose billed end time falls in the half-open window [start_time, end_time). If either time is omitted, the window is unbounded in that direction

Parameters
start_timequery
string <date-time>
Only count runs that ended at or after this timestamp (ISO 8601). Must be before end_time when both are given.
end_timequery
string <date-time>
Only count runs that ended strictly before this timestamp (ISO 8601). Must be after start_time when both are given.
Responses
200The total number of runs and usage hours for the requested [start_time, end_time) window

Content type: application/json

total_hoursRequired
number
The total number of usage hours for the requested period.
Example: 3200.62
run_countRequired
integer
The total number of billable runs for the requested period.
Example response
{
"total_hours": 243.67,
"run_count": 15
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Gets usage for a run

GET/api/v0/usage/{run_id}

Returns the usage for a specific run id

Parameters
run_idpathRequired
string
Unique identifier of the test run to retrieve usage for.
Responses
200The usage hour info for the given run

Content type: application/json

run_idRequired
string
Unique identifier for the run of this usage entry.
Example: 9325f006ffd3a399a8497bc888878b97-50-1
hoursRequired
number
The number of usage hours associated with the run.
Example: 200.535
start_timeRequired
string <date-time>
Timestamp when the run's billable usage began (ISO 8601).
Example: 2024-01-15T10:14:20Z
end_timeRequired
string <date-time>
Timestamp when the run's billable usage ended (ISO 8601).
Example: 2024-01-15T12:34:56Z
Example response
{
"run_id": "9043254f65c9c65d63fe043a0abfc7fc-53-1",
"hours": 200,
"start_time": "2026-04-28T13:49:49Z",
"end_time": "2026-04-28T14:14:07Z"
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Version

API and release version information.

Get API and release version

GET/api/version

Returns the latest supported API version and the current Antithesis release version for the tenant.

Responses
200Version information.

Content type: application/json

latest_api_versionRequired
string
The API version exposed by this server.
Example: v1
release_versionRequired
string
The underlying Antithesis release version.
Example: 56.0

Accepts additional properties.

Example response
{
"latest_api_version": "v1",
"release_version": "56.0"
}

Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.

Error responses

The following responses can be returned by any endpoint in the API. All errors share the same schema.

400Bad request — likely missing or invalid parameters.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "limit must be between 1 and 100"
}
401Unauthorized — invalid or missing authentication credentials.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "Invalid or expired bearer token."
}
402Usage cap reached — the tenant's usage for the current entitlement period is at or above its usage cap, so no new tests can be launched until the next period begins or the cap is raised.

Content type: application/json

statusCodeRequired
integer
HTTP status code of the error. Matches the HTTP status of the response.
Example: 404
runId
string (nullable)
Always null when present. Included once the request reaches the test launcher; omitted for requests rejected before then.

Accepts additional properties.

Example response
{
"statusCode": 402,
"message": "usage for the current period (5000 hours) has reached the usage cap (5000 hours)"
}
403Forbidden — the authenticated user does not have permission to access this resource.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "You do not have permission to access this resource."
}
404The requested resource was not found.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "Run not found: 9325f006ffd3a399a8497bc888878b97-48-1"
}
405Method not allowed — the HTTP method is not supported for this endpoint.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "Resource not found"
}
406Not acceptable — the requested content type in the Accept header is not supported by this endpoint.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "This endpoint does not support the requested Accept type."
}
409The run was created before Antithesis 66 and does not support streaming. List its saved results with the List test run properties endpoint.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "Conflict: Streaming is not available for this run. Streaming requires a run created with Antithesis version 66 or later. You can still view this run's saved property results."
}
429Rate limit exceeded. The response includes a Retry-After header indicating the number of seconds to wait before retrying. We recommend implementing a retry mechanism to handle rate limiting. Follow an exponential backoff schedule to reduce request volume when necessary, and add randomness (jitter) to the backoff schedule to avoid thundering-herd retries.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "Too many requests."
}
500Unknown internal server error.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "An unexpected error occurred. Please try again later."
}
503The API is temporarily unavailable. The response may include a Retry-After header indicating the number of seconds to wait before retrying. This is a transient condition; retry with exponential backoff.

Content type: application/json

messageRequired
string
A human-readable explanation of what went wrong.
Example: limit must be between 1 and 100

Accepts additional properties.

Example response
{
"message": "The events query backend is temporarily unavailable. The API is reachable but could not query stored events right now. Please retry with backoff."
}