Antithesis API
The Antithesis API enables programmatic access to the Antithesis autonomous testing environments. List runs, inspect run details, and retrieve logs.
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 thev0route 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.
Test runs
Operations on test runs.
List runs
GET/api/v0/runs
List runs
/api/v0/runsReturns a paginated list of runs of all types. Results are ordered by creation time, newest first.
limitqueryintegerafterquerystringnext_cursor value (as well as any filter parameters) from a previous response to fetch the next page.statusquerystringAvailable values: starting, in_progress, completed, cancelled, incomplete, unknowncreated_afterquerystring <date-time>created_beforequerystring <date-time>launcherquerystringContent type: application/json
datarequiredarray<object>Items of data
run_idrequiredstringExample:
9325f006ffd3a399a8497bc888878b97-50-1statusrequiredstringAvailable values: starting, in_progress, completed, cancelled, incomplete, unknownstarting: 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_atrequiredstring <date-time>started_atstring <date-time> (nullable)completed_atstring <date-time> (nullable)creatorobject (nullable)Properties of creator
namestringExample:
demotypestringExample:
ciAccepts additional properties.
launcherrequiredstringExample:
Payments Nightlydescriptionstring (nullable)Example:
basic_test on mainparametersobject (nullable)Properties of parameters
antithesis.config_imagestringantithesis.images parameter.Example:
my-config:latestantithesis.descriptionstringExample:
basic_test on mainantithesis.durationstringExample:
30antithesis.filter_logs_matchingstring(?i) for case-insensitive matching. Lookahead, lookbehind and backreferences are not supported. See Retroactive logging.Example:
(?i)^\s*(TRACE|DEBUG)\bantithesis.filter_source_matchingstringantithesis.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.imagesstring[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:latestantithesis.is_ephemeralstring (nullable)Available values: true, false"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_tierstringAvailable values: standard, fast, turboExample:
standardantithesis.report.recipientsstringExample:
user1@example.com; user2@example.comantithesis.sourcestringExample:
mainAdditional properties: string — Additional parameters including tooling integration parameters (e.g. antithesis.integrations.<type>.callback_url, antithesis.integrations.<type>.token where type is github, discord, or slack).
linksobject (nullable)Properties of links
triage_reportstring <uri>Accepts additional properties.
next_cursorstring (nullable)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", "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", "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}
Get test run details
/api/v0/runs/{run_id}Returns the full details of a single test run, including results.
run_idpathrequiredstringContent type: application/json
run_idrequiredstringExample:
9325f006ffd3a399a8497bc888878b97-50-1statusrequiredstringAvailable values: starting, in_progress, completed, cancelled, incomplete, unknownstarting: 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_atrequiredstring <date-time>started_atstring <date-time> (nullable)completed_atstring <date-time> (nullable)creatorobject (nullable)Properties of creator
namestringExample:
demotypestringExample:
ciAccepts additional properties.
launcherrequiredstringExample:
Payments Nightlydescriptionstring (nullable)Example:
basic_test on mainparametersobject (nullable)Properties of parameters
antithesis.config_imagestringantithesis.images parameter.Example:
my-config:latestantithesis.descriptionstringExample:
basic_test on mainantithesis.durationstringExample:
30antithesis.filter_logs_matchingstring(?i) for case-insensitive matching. Lookahead, lookbehind and backreferences are not supported. See Retroactive logging.Example:
(?i)^\s*(TRACE|DEBUG)\bantithesis.filter_source_matchingstringantithesis.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.imagesstring[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:latestantithesis.is_ephemeralstring (nullable)Available values: true, false"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_tierstringAvailable values: standard, fast, turboExample:
standardantithesis.report.recipientsstringExample:
user1@example.com; user2@example.comantithesis.sourcestringExample:
mainAdditional properties: string — Additional parameters including tooling integration parameters (e.g. antithesis.integrations.<type>.callback_url, antithesis.integrations.<type>.token where type is github, discord, or slack).
linksobject (nullable)Properties of links
triage_reportstring <uri>Accepts additional properties.
resultsobjectsub_statusstringAvailable values: ReadyReady once the debugging session is ready. For all other runs, this is Ready while the run is in progress. Absent otherwise.failure_momentobject (nullable)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_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
failure_reasonstring (nullable)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" } ] } }}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
Get logs for a specific moment
/api/v0/runs/{run_id}/logsStreams 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.
run_idpathrequiredstringinput_hashqueryrequiredstringvtimequeryrequiredstringbegin_vtimequerystringbegin_input_hashquerystringbegin_vtime to fully identify the begin moment.Content type: application/x-ndjson
One of:
object
momentrequiredobjectProperties of moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
Accepts additional properties.
object
errorrequiredstringExample:
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
Stream build logs
/api/v0/runs/{run_id}/build_logsStreams 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.
run_idpathrequiredstringContent type: application/x-ndjson
One of:
object
timestamprequiredstring <date-time>Example:
2025-03-20T02:01:12ZstreamstringAvailable values: stdout, stderrtextrequiredstringExample:
Building image payments-service...Accepts additional properties.
object
errorrequiredstringExample:
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
List test run properties
/api/v0/runs/{run_id}/propertiesReturns a paginated list of property results for a test run, including both passing and failing properties by default. Use the status parameter to filter by a specific status.
Known limitation: Property results are not available for test runs created before Antithesis version 54.5. Requests for such runs return 404 Not Found.
run_idpathrequiredstringstatusquerystringAvailable values: Passing, Failinglimitqueryintegerafterquerystringnext_cursor value from a previous response to fetch the next page.Content type: application/json
datarequiredarray<any>One of for items of data
object
idstringnamerequiredstringdescriptionstring (nullable)statusrequiredstringAvailable values: Passing, Failingis_eventrequiredanyAvailable values: truetrue for event properties. Discriminates this branch of the oneOf.is_groupbooleangroup field.groupstringexample_countinteger <uint32> (nullable)counterexample_countinteger <uint32> (nullable)examplesarray<object>Items of examples
momentrequiredobjectProperties of moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
Accepts additional properties.
counterexamplesarray<object>Items of counterexamples
momentrequiredobjectProperties of moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
Accepts additional properties.
Accepts additional properties.
object
idstringnamerequiredstringdescriptionstring (nullable)statusrequiredstringAvailable values: Passing, Failingis_eventrequiredanyAvailable values: falsefalse for non-event properties. Discriminates this branch of the oneOf.is_groupbooleangroup field.groupstringexample_countinteger <uint32> (nullable)counterexample_countinteger <uint32> (nullable)examplesarray<any>counterexamplesarray<any>Accepts additional properties.
next_cursorstring (nullable)after query parameter to fetch the next page. Null if no more pages.Example response
{ "data": [ { "name": "Sometimes: Root moments", "description": null, "status": "Passing", "is_event": true, "is_group": false, "example_count": 1, "counterexample_count": 0, "examples": [ { "env_setup": "complete", "source": { "name": "env_root" }, "moment": { "input_hash": "-363173456058459333", "vtime": "22.475549569819123" } } ], "counterexamples": [] }, { "name": "Input count", "description": null, "status": "Passing", "is_event": false, "is_group": false, "example_count": 1, "counterexample_count": 0, "examples": [ 318446 ], "counterexamples": [] } ]}Error responses (4xx, 5xx) are shared across all endpoints — see Error responses.
Search test run events
GET/api/v0/runs/{run_id}/events
Search test run events
/api/v0/runs/{run_id}/eventsSearches 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.
run_idpathrequiredstringqquerystringlimitqueryintegerContent type: application/x-ndjson
One of:
object
momentrequiredobjectProperties of moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
Accepts additional properties.
object
errorrequiredstringExample:
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
Search events with event sets
/api/v0/runs/{run_id}/events/searchRuns 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.
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.
run_idpathrequiredstringContent type: application/json
queryrequiredstringmatches, contains, not_matches, excludes, map, filter, flatmap, fold, narrow, 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_streamingbooleantrue, 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.limitintegeris_streaming is true.validate_onlybooleantrue, 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.
validate_only is true and the query is valid, the body is empty.Content type: application/x-ndjson
momentrequiredobjectProperties of moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts 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
Count events with event sets
/api/v0/runs/{run_id}/events/search/countRuns 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.
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.
run_idpathrequiredstringContent type: application/json
queryrequiredstringmatches, contains, not_matches, excludes, map, filter, flatmap, fold, narrow, 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"))validate_onlybooleantrue, 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.
validate_only is true and the query is valid, the body is empty.Content type: application/json
countrequiredinteger <uint64>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
Execute a command in a test run
/api/v0/runs/{run_id}/commandExecutes 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 assource_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, emittingRewarm_Progressrecords ahead of the command output. The source run must be on the same performance tier asrun_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.
run_idpathrequiredstringContent type: application/json
momentrequiredobjectProperties of moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
scriptrequiredstringExample:
uname -acontainerrequiredstring_ANTITHESIS_HOST to execute directly on the host.Example:
my-serviceinclude_system_logsbooleantimeout_secondsinteger <uint64>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_idstringrun_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-2source_run_idstringrun_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-2Accepts additional properties.
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
momentrequiredobjectProperties of moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
Accepts additional properties.
Variant 2
One of:
object
statusrequiredstringAvailable values: exitedexit_coderequiredinteger <int64> (nullable)end_momentrequiredobjectmoment of a subsequent request to chain commands.Properties of end_moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
Accepts additional properties.
object
statusrequiredstringAvailable values: timed_outlast_momentobjectProperties of last_moment
input_hashrequiredstringExample:
-3625518438076122494vtimerequiredstringExample:
398.4898056755774Accepts additional properties.
Accepts additional properties.
object
percent_completerequiredintegerExample:
40statusrequiredstringAvailable values: rewarmingrewarming 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
errorrequiredstringExample:
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
Cancel a test run
/api/v0/runs/{run_id}/cancelRequests 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.
run_idpathrequiredstringContent 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}
Launch a test
/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).
launcher_namepathrequiredstringbasic_test for Docker Compose orchestration or basic_k8s_test for Kubernetes orchestration.Content type: application/json
paramsrequiredobjectProperties of params
antithesis.config_imagestringantithesis.images parameter.Example:
my-config:latestantithesis.descriptionstringExample:
basic_test on mainantithesis.durationstringExample:
30antithesis.filter_logs_matchingstring(?i) for case-insensitive matching. Lookahead, lookbehind and backreferences are not supported. See Retroactive logging.Example:
(?i)^\s*(TRACE|DEBUG)\bantithesis.filter_source_matchingstringantithesis.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.imagesstring[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:latestantithesis.is_ephemeralstring (nullable)Available values: true, false"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_tierstringAvailable values: standard, fast, turboExample:
standardantithesis.report.recipientsstringExample:
user1@example.com; user2@example.comantithesis.sourcestringExample:
mainAdditional properties: string — Additional parameters including tooling integration parameters (e.g. antithesis.integrations.<type>.callback_url, antithesis.integrations.<type>.token where type is github, discord, or slack).
Accepts additional properties.
Content type: application/json
runIdrequiredstring (nullable)Example:
c8d2f4a6e0b3197d5f8a2c4e6b0d3f79-49-1statusCoderequiredintegerExample:
200Accepts 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
Launch a debugging session
/api/v1/launch/debuggingKicks 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.
Content type: application/json
paramsrequiredanyOne of for params
Identified by run ID
antithesis.debugging.run_idrequiredstringExample:
9043254f65c9c65d63fe043a0abfc7fc-53-1antithesis.debugging.input_hashrequiredstringantithesis.debugging.vtimerequiredstringExample:
45.334635781589895antithesis.event_descriptionstringExample:
Investigate the failed assertion at this momentantithesis.report.recipientsstringExample:
user1@example.com; user2@example.comIdentified by session ID
antithesis.debugging.session_idrequiredstringantithesis.debugging.run_id for new integrations.Example:
d5d1c9cf0e64b5dd69b00e97b07fe3f4-18-1antithesis.debugging.input_hashrequiredstringantithesis.debugging.vtimerequiredstringExample:
45.334635781589895antithesis.event_descriptionstringExample:
Investigate the failed assertion at this momentantithesis.report.recipientsstringExample:
user1@example.com; user2@example.comAccepts additional properties.
Content type: application/json
runIdstring (nullable)Example:
c8d2f4a6e0b3197d5f8a2c4e6b0d3f79-49-1statusCoderequiredintegerExample:
202Accepts 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
Lists all usage entries
/api/v0/usageReturns a paginated list of usage line items. Results are ordered by creation time, newest first
start_timequerystring <date-time>end_timequerystring <date-time>limitqueryintegerafterquerystringnext_cursor value (as well as any filter parameters) from a previous response to fetch the next page.Content type: application/json
datarequiredarray<object>Items of data
run_idrequiredstringExample:
9325f006ffd3a399a8497bc888878b97-50-1hoursrequirednumberExample:
200.535start_timerequiredstring <date-time>Example:
2024-01-15T10:14:20Zend_timerequiredstring <date-time>Example:
2024-01-15T12:34:56Znext_cursorstring (nullable)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 a total of usage hours used
/api/v0/usage/summaryGets the total number of runs and usage hours used by all runs, bounded by the optional start and end limits
start_timequerystring <date-time>end_timequerystring <date-time>Content type: application/json
total_hoursrequirednumberExample:
3200.62run_countrequiredintegerExample 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}
Gets usage for a run
/api/v0/usage/{run_id}Returns the usage for a specific run id
run_idpathrequiredstringContent type: application/json
run_idrequiredstringExample:
9325f006ffd3a399a8497bc888878b97-50-1hoursrequirednumberExample:
200.535start_timerequiredstring <date-time>Example:
2024-01-15T10:14:20Zend_timerequiredstring <date-time>Example:
2024-01-15T12:34:56ZExample 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
Get API and release version
/api/versionReturns the latest supported API version and the current Antithesis release version for the tenant.
Content type: application/json
latest_api_versionrequiredstringExample:
v1release_versionrequiredstringExample:
56.0Accepts 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.
Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "limit must be between 1 and 100"}Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "Invalid or expired bearer token."}Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "You do not have permission to access this resource."}Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "Run not found: 9325f006ffd3a399a8497bc888878b97-48-1"}Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "Resource not found"}Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "This endpoint does not support the requested Accept type."}Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "Conflict: Run example-run-id has already finished and cannot be cancelled"}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
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "Too many requests."}Content type: application/json
messagerequiredstringExample:
limit must be between 1 and 100Accepts additional properties.
Example response
{ "message": "An unexpected error occurred. Please try again later."}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
messagerequiredstringExample:
limit must be between 1 and 100Accepts 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."}