MeshQu is currently available for research, evaluation and design-partner deployments. Production availability and support commitments are agreed per engagement. The contract described below is the one those deployments serve.
api/openapi.json). It selects customer-facing operations
from the API’s validated schemas. Consult the current release notes alongside
this reference when integrating with a deployment.
The machine-readable public snapshot is
api/openapi.json in this docs
repository. This reference covers the operations documented for customer use./v1. See Base URLs for environment hosts.
Authentication
Every authenticated endpoint requires two headers together:Authorizationcarries your MeshQu API key as a bearer token. Keys are prefixedmqu_. Mint one in the console (Settings → API keys). This is not anX-API-Keyheader.X-MeshQu-Tenant-Idis your tenant UUID. It is validated before the API key, so a missing or malformed value returns400(MISSING_TENANT_ID/INVALID_TENANT_ID) before authentication runs.
Determinism guarantee
Given the same decision context and the same policy snapshot, MeshQu always returns the same verdict. Theevaluated_rules_hash and integrity_hash in
each response let you verify this independently.
Example: Replaying a decision six months later produces the same verdict as long as the same policy snapshot is used, even if current policies have since changed.Determinism applies strictly to MeshQu’s policy evaluation logic and snapshot resolution. Client-supplied data and external evidence are outside this guarantee. Evaluations are designed for synchronous use at decision boundaries. Measure latency in your own deployment and set timeouts and fallback strategies for your application.
Evaluate vs record
Two endpoints sit at the core of the API, and the difference matters for audit:POST /v1/decisions/evaluate— dry-run. Evaluates a context against active policies and returns the verdict, markedresult.dry_run: true. The result is not signed — nosignature,signature_kidorsignature_algorithmis emitted, and those fields are absent rather than null. It is a preview, not a receipt:integrity_hashis reproducible, so you can recompute it yourself, but nothing attests to it. No decision is recorded — no decision id is returned and nothing is retrievable as a decision afterwards. Resolving the active policies may still persist a reusable policy snapshot and return itspolicy_snapshot_id; when an existing snapshot matches, no new snapshot is created.POST /v1/decisions/record— evaluates and persists the result. Supply anidempotency_keyfor safe retries.
Errors
Every response carries anx-correlation-id header. Error bodies follow a consistent
{ error: { code, message, details }, correlation_id } shape. See
Errors & Status Codes for the full code catalogue and retry guidance.
Public verification & trust roots
The unauthenticated receipt, chain, and bundle endpoints are intended for offline verifiers and counterparties holding a receipt or chain ID. Verifiers must use public keys or fingerprints authenticated through an independent channel and pinned according to their own policy. The API’sGET /v1/.well-known/signing-keys document and a bundle’s trusted_keys.json
are issuer-provided discovery material, not independent trust roots. Key
standing also requires a verified signed trust registry, which is not currently
published. See Verifying offline,
Verification Bundle, and the
Receipt Reference.