/products/{productId}/test-cases/run

Run all stored test cases for a product against the current product+brick configuration and return per-test-case results without persisting anything. This is the in-memory product-testing framework — its lifecycle is "compute, return, discard".

Logs scope (important). Test-case runs are ephemeral and in-process — they do NOT write to the persistent execution-log streams that back GET /products/{productId}/execution-logs and GET /products/{productId}/execution-log-streams. Every diagnostic for a test-case run lives inline in the response at testCaseResults[].logs[] ({timestamp, level, message} entries captured from the brick's console.* output) and, on failure, in testCaseResults[].errorMessage. The /execution-logs and /execution-log-streams endpoints are populated only by POST /products/{productId}/execute and POST /product-bricks/{brickId}/execute. There is no test-case-run equivalent because frozen-time logs cannot be safely interleaved into wall-clock log streams.

Brick-crash diagnosis. When a brick throws at runtime during a test-case run, the corresponding testCaseResults[].status === "error", errorMessage carries the unwrapped throw text, and logs[] ends with an error-level entry mirroring it — so a single read of logs[] is sufficient to diagnose the failure.

Structured error envelope (errorDetails[]). When the failure has per-field detail (typically a stored draftSnapshot.transport that does not validate against the TransportForProducts shape), the result also exposes testCaseResults[].errorDetails: { path: string[]; message: string }[] — one entry per validation issue. Prefer this over substring-searching errorMessage / logs[].message when reasoning about which field of the snapshot to patch. Mirrors the BRICK_PAYLOAD_INVALID envelope on POST /product-bricks.

Scope. Authorization, draft snapshots, and shape resolution all happen server-side per stored test case; no body is required.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
string
required

The unique identifier of the product

Responses

401

unauthorized

503

Transient backend error returned with no body. Retry with exponential backoff (suggested: 1s, 2s, 5s); the request is idempotent and safe to retry. Do not treat as a payload error.

Language
Credentials
Header
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json