Execute a product end-to-end against a transport draft. Mirrors the operator-UI 'Test product' button.
Logs. Each invocation persists log events to the product's test-run log group (/test/products/{productId}). Read them back via GET /products/{productId}/execution-logs?onlyTestRuns=true (or the lower-level /execution-log-streams flow). The synchronous response body also returns the full calculator output (context / feasibility / pricing / scheduling).
412 (Precondition Failed). Returned when the referenced draft's transport cannot be parsed by TransportForProductsSchema — i.e. the draft is not yet in a state where products can be evaluated against it. The response payload.message carries the literal TransportForProductsSchema parse failed: <serialised validation issues> so callers can identify exactly which transport fields are missing or malformed and patch the draft before retrying.
422 (Unprocessable Entity). Returned when the brick payload itself fails at runtime — e.g. the user code throws, returns a value that doesn't match its function-type schema, or the L2L runner reflects a brick-runtime exception. The response carries internalCode: "BRICK_RUNTIME_ERROR" and the unwrapped Error.message from the brick. Distinct from 5xx — a 422 means your brick is broken, not the platform; do not retry without changing the brick payload. Persistent log events for the failing run are also available via GET /products/{productId}/execution-logs?onlyTestRuns=true.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
400Invalid request body
401Unauthorized
404Product or transport draft not found
