Skip to main content
POST
Run a bounded synthetic case pack against a stored policy version

Authorizations

Authorization
string
header
required

MeshQu API key passed as a bearer token: Authorization: Bearer mqu_…. Mint one in the console (Settings → API keys).

X-MeshQu-Tenant-Id
string
header
required

Tenant UUID for multi-tenant isolation. Required on all authenticated routes — validated before authentication (middleware/tenant.ts), so a missing or non-UUID header returns 400 (MISSING_TENANT_ID / INVALID_TENANT_ID) before the API key is checked.

Path Parameters

id
string<uuid>
required

Policy id.

version
integer
required

Policy version number.

Required range: x >= 1

Body

application/json
case_pack
object
required
evaluation_time
string<date-time>
required

The evaluation instant. REQUIRED and supplied by the caller, because determinism is the point: same pack + same rules + same evaluation_time gives the same results. A server clock here would make two identical runs differ.

Response

Default Response

synthetic
enum<boolean>
required

Always true. This is a synthetic preview: no decision, receipt, policy snapshot or audit row was created, nothing was signed, and nothing was persisted. It is non-billing and rate-limited under the standard per-tenant/per-key tier.

Available options:
true
non_billing
enum<boolean>
required

Always true. Synthetic case executions are not metered as evaluations.

Available options:
true
persisted
enum<boolean>
required

Always false. Stated as a field rather than only in prose so a client can assert it, and so a future change that began persisting would have to change this literal and every test reading it.

Available options:
false
profile
enum<string>
required
Available options:
meshqu-case-pack/v1
evaluator_version
string
required

Names the SEMANTICS of the shared verdict loop, not a build, package version or deployment.

evaluation_time
string<date-time>
required
executed_at
string<date-time>
required

PRESENTATION metadata. Excluded from the digest-bound projection that occupies the review package's case_execution_results slot, so re-running identical work does not move a package digest.

results
object[]
required
summary
object
required
canary
object
required

The candidate-derivation canary verdict for the executed pack. A REJECTED pack never reaches this response — it is a 422. See the 422 description for the heuristic's stated limits.