Upload the declared source bytes
Receives the octets and checks them against the FROZEN declaration: the exact length first, then the SHA-256 of the decoded bytes.
RECORDS that octets arrived and agreed with what was declared.
DOES NOT PUT THEM IN CUSTODY. Nothing is at a content address until finalise succeeds, and nothing is read back until then either.
A disagreement ABANDONS the upload rather than leaving it retryable, with a code naming which half disagreed: DECLARED_LENGTH_MISMATCH (usually a truncated transfer) or DECLARED_DIGEST_MISMATCH (different content). The declaration is frozen, so a retry against the same upload could only fail the same way — start a new one.
Base64 is transport only. The digest is over the decoded octets and the decoded octets are what is stored.
Authorizations
MeshQu API key passed as a bearer token: Authorization: Bearer mqu_…. Mint one in the console (Settings → API keys).
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
Body
The exact octets, base64-encoded. Base64 is a TRANSPORT encoding only: the digest is taken over the decoded octets, and what is stored is those octets, so what comes back out is byte-identical to what you sent.
Response
Default Response
PENDING (created, no bytes), STAGED (bytes received and checked against the frozen declaration), FINALISED (an object exists at its content address and was read back and re-hashed), ABANDONED (terminal; abandon_reason says why). FINALISED IS NOT SEALED: a finalised object that no review submission references is an orphan and bounded reconciliation will collect it.
PENDING sha256/raw SHA-256 as 64 lowercase hexadecimal characters.
^[0-9a-f]{64}$x >= 0Digest of what actually arrived. Null before any bytes are received.
^[0-9a-f]{64}$x >= 0The object now holding the bytes. Set only in FINALISED.
Why the upload will not proceed. DECLARED_* means the bytes you sent are not what you said you would send; READ_BACK_* means the store did not return what it was given, which is a storage-integrity fault and not a caller error. They are separate values because an operator looks in different places for each.
DECLARED_LENGTH_MISMATCH