Skip to main content
GET
Retrieve a sealed review submission and its canonical components

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

submissionId
string<uuid>
required

The sealed submission id. This is the review IDENTITY — not the policy version, which is a mutable container that yields many sealed subjects over time.

Query Parameters

expected_id
string<uuid>
expected_revision
integer
Required range: x >= 1
expected_digest
string
Pattern: ^[0-9a-f]{64}$
check_source_availability
boolean

When true, each MeshQu-custody source item is retrieved from custody and re-hashed against the digest the manifest sealed, and the result is reported in source_availability. When absent or false, every item is reported as NOT_CHECKED — which is a statement that no check ran, not a statement about the bytes. Items whose custodian is not MeshQu are always NOT_CHECKED: this API resolves no external locator and makes no claim about a custodian's store.

Response

Default Response

subject
object
required
components
object[]
required

The ten components in the ruled registry order. Recomputing sha256 over each canonical_bytes reproduces every component_digest, and the envelope built from those ten reproduces subject.review_package_digest.

source_availability
object[]
required

One observation per source item of the sealed source_manifest. NOT part of any component and NOT in any digest — this is the separate CURRENT availability status that sits beside the unchanged historical record.

Every entry is NOT_CHECKED unless check_source_availability=true was supplied, and NOT_CHECKED means exactly that: nothing ran. An unavailable source does not rewrite the sealed subject or the judgment recorded against it; it is reported here and nowhere else.

review_state
required

DERIVED, never stored. RETURNED iff a return row exists for this submission; SEALED otherwise. The machine is SEALED -> RETURNED, once. It says nothing about whether the package is good, current or reviewed.

Available options:
SEALED
returned_record_id
string<uuid> | null
required

The CORRECT_AND_RESUBMIT record the return named, or null when the submission has not been returned. This is the id the agent must supply as answers_record_id on its next seal.

returned_by
string | null
required

The STABLE principal that returned it (user:<uuid>), or null. Display attribution travels separately and is not this field.

returned_at
string<date-time> | null
required
return_authority
required

Which door the returner came through. tenant_admin is the ruled FALLBACK — ANY tenant admin. It does NOT mean a named second reviewer, an independent one, or one who read anything.

Available options:
recording_reviewer
newer_draft_observed
object
unanswered_lineage_returns
object[]

Returns recorded on an EARLIER draft this version supersedes that no later seal in the lineage answers (ruling R-B: shown, not blocking). A later seal of this version is not required to answer them, and they do not block ratification. Absent when there are none.

lineage_unresolved
enum<boolean>

Present when the draft-supersession lineage could not be followed (a cycle, more than 64 links, or a dangling link). newer_draft_observed and unanswered_lineage_returns are then incomplete or absent, and their absence says nothing. The seal and ratify routes refuse such a lineage.

Available options:
true