Get debug bundle
Bundled debugging payload for a run, suite, or test case, as JSON or Markdown.
Quick Reference
Pick the scope
At least 1 ofrunId, suiteId, or caseId is required.If multiple IDs are passed, the most-specific scope wins.
Parent ID rules
suiteIdrequiresrunId. The API returns400ifsuiteIdis passed withoutrunId.caseIdcan be sent withoutrunId. The service resolves the latest run for that case and returns it indata.meta.runId.
Response formats and view modes
Parameters that do not apply are rejected
A parameter that cannot take effect at the resolved scope returns400 VALIDATION_ERROR rather than being ignored:
viewother thanfullat run scope.attemptwithoutcaseId.pageorlimitwith a non-default value at test scope.budgetCharswithoutas=markdown.- Any parameter sent more than once.
view=full, page=1, limit=10) is accepted at every scope.
Response fields by scope
failureWindow contains the before, failed, and after steps around the failure. Each attemptHistory entry carries its own 0-based attempt index, so you can request that attempt directly with attempt=N.
Links block in every response
Each scope includeslinks.uiUrl and links.retryCommand.Test-scope responses also include
links.traceViewerUrl, or null when trace data is unavailable.Authorizations
User PAT (td_pat_) scoped to the target project
Path Parameters
The project identifier (e.g. project_abc123). Must match the project associated with your PAT.
Query Parameters
Run ID. Required for run scope and required with suiteId.
Suite ID. Requires runId.
Test case ID. runId is optional; when omitted, the latest run is resolved and echoed in data.meta.runId.
Zero-indexed attempt number. Requires caseId; sending it at run or suite scope returns 400. Defaults to the latest attempt.
x >= 0Response format: json (default) or markdown (text/markdown body).
json, markdown Payload size mode. Test scope: brief drops steps[]; headline also drops stdout and stderr and caps artifacts.* arrays at 5 with a totals field. Suite scope: brief and headline set each item's failureWindow to null. Run scope: only full is accepted; any other value returns 400.
full, brief, headline Pagination (run and suite scopes only). A non-default value with caseId returns 400. Out-of-range or non-integer values return 400.
1 <= x <= 1000000Pagination size (run and suite scopes only), 1 to 50. A non-default value with caseId returns 400. Out-of-range or non-integer values return 400.
1 <= x <= 50Truncate the Markdown response to N characters, 1 to 50000. Requires as=markdown; sending it with a JSON response returns 400.
1 <= x <= 50000Response
Standard envelope: { success, data }. data is discriminated by data.scope:
"run":{ scope, runId, runStatus, suites[], items[] (each with alsoFailedIn[]), count, total, nextPage, meta, environment, links }"suite":{ scope, spec, suiteStatus, items[] (each with failureWindow; null under view=brief or headline), count, total, nextPage, meta, environment, links }"test":{ scope, spec, test, error, attemptHistory[] (each with its own 0-based attempt index; the selected attempt is excluded), traceLink, failureWindow, steps[], stdout, stderr, artifacts, meta, environment, links }
failureWindow has before, failed, and after steps.
With ?as=markdown the body is a Markdown document whose sections depend on scope:
run: Failing suites, Failing tests, Actions. Suite: Failing tests (each with Error and
Failure window), Actions. Test: Error, Failure window, Steps, stdout, stderr, Attempt
history, Artifacts, Actions.