Skip to main content
A shipping bill states its own totals twice. Every extraction checks them against each other and returns the result on data.verification. This is the part a document-reading model cannot offer. It does not tell you whether we read the bill correctly. It tells you whether the bill agrees with itself, which is a fact about your document and worth knowing before you file against it.

The response

boolean
True when no error-level check failed. Warnings do not affect it.
number
Share of applicable checks that passed, 0 to 1. Checks that do not apply to a document are not counted, so a bill with no container table is not penalised for it.
number
Error-level failures.
number
Warning-level failures.
array
One entry per failure, with id, severity and a detail naming the figures that disagreed.
A failure looks like this:

The checks

What a failure usually means

document.single-bill: several bills concatenated into one PDF. Their sections have been merged into a single incoherent document: the header is the first bill’s, the item rows are all of them. Split the file and extract each bill separately. value.fob-equals-item-sum: the summary FOB and the item lines disagree. A delta that is an exact factor of ten is a decimal-place error somewhere in the document. header.item-count or header.invoice-count: the file is truncated, or a part is missing. A bill whose header declares four items but carries three rows is missing a row, not mis-read.

Extraction still succeeds

A document that fails verification is still returned with a 200 and full fields. The checks describe the document; they do not gate the response. What you do with that is yours to decide. Routing failures to human review before filing is the obvious use. A bill that does not reconcile with itself will not reconcile with DGFT either.