Document types & checks
What each built-in document type extracts, and exactly what the verifier checks before a document can succeed.
Checks that run on every document
- Every page of the document was processed (pages.processed equals pages.total)
- All required fields for the document type are present
- Dates parse and are in a sane order (e.g. due date is not before invoice date)
- Only one currency is used across all money fields
A document type's own checks (line-item sums, balance checks, row-count reconciliation) run in addition to these. Every check appears in the result's checks array with passed, expected and actual, whether it passed or not, so partial results are auditable, not opaque.
Invoice
Fields
invoice_numbervendor_nameinvoice_datedue_datecurrencysubtotaltaxtotalline_items (table)Checks specific to this type
- Line items sum to the stated subtotal
- Subtotal + tax (+ shipping - discount) equals the stated total
- The tax rate is consistent across line items
- Every required field (invoice number, vendor, total) is present
Receipt
Fields
merchant_nametransaction_datepayment_methodsubtotaltaxtiptotalline_items (table)Checks specific to this type
- Line items sum to the stated subtotal
- Subtotal + tax + tip equals the stated total
- The transaction date parses and is not in the future
- Every required field (merchant, total) is present
Purchase order
Fields
po_numbervendor_nameship_toorder_daterequested_delivery_datesubtotaltaxshippingtotalline_items (table)Checks specific to this type
- Line items sum to the stated subtotal
- Subtotal + tax + shipping equals the stated total
- A ship-to address is present, not just a bill-to
- Order and delivery dates parse and are in order
Bank statement
Fields
account_numberstatement_period_startstatement_period_endopening_balanceclosing_balancetransactions (table)Checks specific to this type
- Opening balance + credits - debits equals the closing balance
- Each transaction’s running balance continues from the one before it, with no unexplained jump
- Every statement page was processed, not just the first
- The statement period dates parse and are in order
Delivery note
Fields
delivery_note_numbervendor_nameship_todelivery_dateitems (table)Checks specific to this type
- The number of item rows extracted matches the number of rows detected on the page
- Quantity delivered is captured against quantity ordered for every row
- Every page of a multi-page delivery note was processed
- Every required field (delivery note number, ship-to) is present
Custom document types
Anything else uses a custom schema: a set of fields (name, type, optional description) created via POST /v1/schemas. Custom-schema documents get the four generic checks above and full source-linking on every field, but not a document type's built-in arithmetic checks, since those depend on knowing the document's structure in advance.