Processing sequence
- Upload a document and keep its document ID with your work item.
- Only an adopting integration sends
review_contract="decisions_v1"for a new document, orextraction_request.review_contractfor batch creation. Omitted or"legacy"requests stay legacy, even in an enabled project. Inspect the persisted snapshot, then stored technicalstatusand managedreview_status. - Dispatch using the state table below.
- For pending documents, use the safe polling example.
- Make downstream processing and cancellation idempotent in your integration.
Keep rejected or expired work items separate from approved output. Do not archive them as successfully processed. An API error, empty history response, or local timeout must not send raw extraction results to your downstream system.
Project and caller scope
Use the same authorized API key and active project when extracting, polling, and deciding. Read calls requireextractions:read; decision calls require extractions:write. Send X-Project-ID when using an active project. Do not switch callers when retrying a decision with its original idempotency key.
Availability and customer rollout
Approval remains available while rejection and expiry are disabled. Capability values apply to the active project; they are not per-document enrollment or permission checks. Use the persistedreview_decision_managed snapshot, not current project enablement, to select the workflow. Existing unmanaged work keeps legacy behavior. Confirm that each affected customer integration handles rejected and expired states before requesting enablement. A capability response does not prove downstream cancellation occurred.