/api/v1/documents/{id}/verify
Move a document through its review lifecycle: verified, rejected, back to pending_review, or expired.
- Scope
documents:write- Rate limit
- 100 requests / min
- Idempotency
Idempotency-Keysupported
Authentication
Send your key as Authorization: Bearer …. It must carry the scope documents:write; a key without it receives 403 forbidden.
Path parameters
idstringrequiredHeaders
Idempotency-KeystringReplays the first response for a repeated request. Reusing a key with a different body is idempotency_key_reused (409), never a silent replay.
Request body
application/jsonrequiredstatusstring (enum)requiredverifiedrejectedpending_reviewexpiredThe target state. Matched case-insensitively; the stored label spelling ("Pending Review") is accepted too.
rejection_reasonstring | nullnullablemin length 1max length 1000Only with rejected. Echoed back as rejection_reason on the document.
Refused parameters1
Sending any of these returns 400 validation_error naming the field. Each entry explains what to do instead.
notes'notes' is not accepted on this endpoint.
Response
200application/jsonSerializedDocumentidstringrequiredcase_idstring | nullrequirednullablenamestringrequiredfile_namestringrequiredfile_typestringrequiredfile_sizestringrequiredcategorystringrequiredstatusstringrequiredapplicantstring | nullrequirednullableversionnumberrequireduploaded_bystringrequireduploaded_atstring | nullrequirednullablereviewed_bystring | nullrequirednullablereviewed_atstring | nullrequirednullablerejection_reasonstring | nullrequirednullableErrors
The statuses this operation can return, with the error.code values behind each. Every error body is the shared envelope described under Errors in Getting started.
400validation_error401unauthorized403forbidden404not_found409idempotency_key_reused429rate_limit_exceeded500internal_error