Run a review in the console
The console lets you check a record or population from your browser and download the findings as JSON. It uses your signed-in account, the same checks as the API and the same account limits.
Open the console. If prompted, sign in with the account that should own the work. The current free plan requires no credit card, and the console needs no API key.
Start with a published example
- The financial-audit invoice and its context are loaded when you first open the console. Read both before submitting.
- Select Run verification. Loading an example does not run it or consume verification usage.
- Review the summary, then each result's verdict, failed checks and open questions.
- Select Download results as JSON to keep the complete result.
The financial-audit example is a synthetic $24,800.00 supplier invoice from Northstar IT Supply. Its 20 laptops at $1,240.00 reconcile, but no purchase-order reference is supplied above the $1,000.00 PO threshold. The expected finding is a false verdict with a failed po_present assertion. Use the result to investigate the control exception and obtain supporting evidence. Other records can remain uncertain; read How it works before routing a finding.
To try another example, choose a Use case, then select Load the example request when available. This fills the item and context and chooses the example's item type. You still decide when to select Run verification.
Prepare your own records
Select the use case and item type before loading your data. The field guidance below the selectors lists the item type's published fields and marks required ones. Keep a stable business id for each item so findings can be matched back to the source.
Use the schemas guide to understand the item's fields, its related records and its reference data. The console does not fetch your approval policy, employee population or contract terms from another system; you supply the context required by the checks.
Paste JSON for one item or a list
The Items as JSON box accepts one item or an array of items. An item contains an id, a type and a data object. If the type is omitted, the console uses the selected item type.
{
"type": "invoice",
"id": "INV-2026-0841",
"data": {
"vendor_id": "V-1042",
"invoice_number": "INV-2026-0841",
"invoice_date": "2026-09-18",
"amount": "24800.00",
"currency": "USD",
"description": "20 business laptops for the finance team equipment refresh.",
"line_items": [
{
"quantity": "20",
"unit_price": "1240.00",
"description": "Business laptop, 16 GB RAM, 512 GB SSD"
}
],
"tax_amount": "0.00",
"discount_amount": "0.00"
}
}
Put the supporting vendor record, comparison invoices and engagement period in Context as a JSON object. The following context matches the synthetic invoice. An empty invoice list limits the duplicate check to the supplied scope; it does not assert completeness of your accounts-payable ledger.
{
"records": {
"vendor": [
{
"id": "V-1042",
"name": "Northstar IT Supply",
"created_on": "2024-02-12",
"status": "active"
}
],
"invoice": []
},
"engagement": {
"entity": "Illustrative procurement audit",
"period": {
"start": "2026-07-01",
"end": "2026-09-30"
}
}
}
Loading the financial-audit example fills the same record and context. The single-verification guide explains the request shape.
The console also accepts an object containing item or items and context. A separately entered context replaces that embedded context. Leave the context box empty or set to {} to use the embedded context. The selected use case controls the run. Embedded options are not forwarded: the console uses default question, target and policy settings. Use the API when you need parameter overrides or explicit skips.
Import a file
Under Import a file, choose a CSV or XLSX export with a header row and one record per row. The console uploads it to your account as a source; the server reads it, not your browser. Of a workbook, the first worksheet is read. A CSV must be UTF-8.
| Source detail | What applies |
|---|---|
| Size and count | One file is at most 32 MiB. An account keeps at most 100 sources and 256 MiB of them at once; remove one to make room. |
| Retention | A source and its file are deleted 7 days after upload. Previously uploaded lists the ones still kept, with their row counts and upload dates. |
| The same file again | Uploading identical bytes reuses the earlier source instead of storing a copy. |
| Summary | The console shows the file name, rows, blank rows, columns, the start of its SHA-256 and when it expires, with the first rows as text. |
Map the columns
The mapping table lists the selected item type's fields in schema order, with id first, each with its type and whether it is required. For each field choose the column it is read from, a constant (for example a currency the export leaves out), or not mapped. A column whose header matches the field name is chosen for you; for id, a column named id, or the only column whose header ends in the word "id" (such as "Claim ID"). Check every choice. Every required field must be mapped before a preview or run is sent, and the console names the ones still missing. A column header over 200 characters cannot be mapped; shorten it in the file. Changing the use case or item type rebuilds the table and keeps the choices for fields that still exist.
Cells are read by the item schema of the selected use case's current version, which the mapping pins (such as financial-audit@4). Text is trimmed; decimal amounts and dates stay text, so write 24800.00 without currency symbols or thousands separators and dates as 2026-09-18. Integer, number and boolean fields are converted, and a field holding a list or object takes JSON text. An XLSX date stored as a number is not a date: export dates as text. A constant is read the same way as a cell: trimmed, then converted by the field's type, so a boolean constant takes true, yes or 1, or false, no or 0, and a number must be finite.
A blank cell, empty or only spaces, follows its field's rule. In a required field it withholds the row. For an optional field choose absent (the field is left out, the default), null (offered only where the schema accepts null) or not admitted (the row is withheld). The choice can change verdicts: an unpaid claim with paid_on null is not the same as one with no paid_on.
Preview, then run
Select Preview the mapping to build the items without running anything or using your allowance. The preview counts the rows admitted, withheld and blank, names the columns the mapping does not use, shows the first items, and lists up to 100 withheld rows with each reason, such as a row with more or fewer cells than the header, a blank required cell, a value that does not fit its field, or a repeated id. Fix the file or the mapping and preview again until the population is what you expect.
Select Run audit from this file to create an audit from the admitted rows, with the context box as its context. Withheld rows are left out of the audit and recorded with it. The audit uses item allowance for the admitted rows only, and is followed and shown like any other batch.
A completed audit from a file keeps an evidence index that ties each value to the cell it came from. Select Download evidence index to save it with the results; Download results as JSON also names the source and the index's hash.
Supporting documents
An expense can be checked against its receipt, and an invoice against the invoice PDF. When the selected item type is expense or invoice, the mapping shows Supporting documents below the field table.
- Under Column naming each receipt (or invoice), choose the column that links each row to its PDF. A column is chosen for you only when the first rows' cells in it all end in
.pdfor are 64-character SHA-256 hashes, and only one column (or one whose header names the receipt or invoice) does; a column such as "Receipt Attached" holding yes or no is not a link and is left alone. Under Matched by, choose file name when the cells hold the PDF's file name, such asr-0841.pdf, or SHA-256 when they hold the hash of its bytes. - Under Attach PDFs, choose one or more PDFs. Each is uploaded as a source, like any other file; one already uploaded is reused and marked so. Preview and run wait until the uploads finish. A file refused by a limit or by the service is named with its reason, and the others are still attached. Or add an earlier PDF attaches a PDF uploaded before. The list shows each document's pages and whether text was found. View opens it in Read the document, and Back to returns to the table with its mapping and documents as they were. Remove from list only detaches a document; it does not delete the PDF.
- Preview, then run. With a link column, the expense's
receipt_presentfield is set from its receipt, so its row in the mapping is disabled. A link column with no documents, or documents with no link column, is refused before anything is sent. Choosing a different table clears the attached documents.
Each linked document is read for its total, date and reference and compared with the row. The preview counts the associations by status and lists the first 100; after the audit, the results show every association with a filter by status, and Download associations saves them as JSON.
| Status | What it means |
|---|---|
verified | The row links to exactly one document, its text was found again where it was read, and its total (and date, where read) agree with the row. Only a verified association sets receipt_present to true. |
contradicted | The document disagrees with the row: total_differs, currency_differs, date_differs, or other_record when it belongs to a different record. |
needs_review | A person must decide: ambiguous_link (the cell matches more than one document), shared (several rows link to one document), no_text, not_relocated, unreadable_region, ambiguous_total, ambiguous_date or not_corroborated. |
missing | The row's link cell is blank. |
not_found | No attached document matches the link cell. |
A scanned PDF has no text layer, so it cannot be verified yet: its associations need review with no_text. One audit reads at most 100 documents and 2,000 pages in all; the console checks both before sending.
The original
Download the original returns the file exactly as uploaded. Remove this source deletes it and its file at once. Audits already run from it do not change: they keep their items and evidence index, which holds the text of every cell it read, so delete those audits too when that text must go. The server stores the file, its hash, its header and first rows, and, with each audit, the mapping and the evidence index.
Reading a PDF
A text PDF, such as an invoice, receipt or statement, can be uploaded the same way. It is kept as a supporting document, which can be linked to the rows of a table (see Supporting documents above): the console shows its page count, how many pages have text and how many characters of text it has, and replaces the mapping with Read the document. PDFs are not audit sources yet, so a PDF has no mapping, preview or run.
- The page view places each line of text at the position the PDF draws it, in a box with the page's proportions. It shows the text the service read, not the rendered page: images, rules and stamps are not drawn. Hover a line to read it in full when it is cut at its box.
- Move between pages with Previous page, Next page or the page list. A page with more lines than the service returns says how many of them are shown.
- Find text in the document lists the lines that contain the text, as "page N: line", up to 50. The match is case-sensitive, and any run of spaces or line breaks counts as one space. Lines over 4,000 characters are not searched. Select one to go to its page; the matching lines on the shown page are highlighted.
- A PDF with no text on any page, such as a scan, is kept and says so. OCR is not available yet, so its pages show no lines.
- A PDF is at most 200 pages, 1,000,000 characters of text and, like any upload, 32 MiB. An encrypted or damaged PDF is refused with the reason. Download the original and Remove this source work as for any other file.
Supply a meaningful comparison population
A duplicate check can compare only the records available to it. For a single verification, omitting the relevant comparison population can leave the check unresolved; an empty list declares no additional comparison records. For a batch, submitted items of the relevant type also form a population, even if its context list is absent or empty. An empty list does not remove batch peers or establish that the source ledger is complete.
Keep the relevant employee, policy, vendor or contract records with the review. If you divide a population into smaller batches, preserve the context needed to detect relationships across those divisions. See the batch-audit guide.
Run one record or a batch
With one item, the console sends a synchronous verification request. With more than one, it creates a batch audit, displays the audit id and progress, waits for completion, then retrieves all result pages. A file always runs as a batch audit, even with one admitted row.
The encoded single-item request, including context, must fit within 1 MiB; a batch must fit within 32 MiB and the published item limit. Plan within the account's remaining daily item allowance. Check Limits before loading a full population.
Keep the browser tab open while the console follows progress. Save the audit id if you may need to retrieve it later. The console does not save a run history. Reloading or closing the tab can lose on-screen inputs and results. A batch already accepted by the service continues independently of the tab.
A completed result uses item allowance whether its verdict is true, false or uncertain; accepted batch items count at submission. Daily allowances reset at 00:00 UTC. Exhausting either one blocks new runs, but existing progress and results remain available subject to the rolling request limit. The account page shows your usage.
Interpret and keep the findings
Each result shows the item id and its verdict, then its failed checks and its open questions (the undecided assertions). Every check names the assertion it comes from, and a failed check also names the test that decided it. Technical details under each result gives probability_true and certainty with its basis. To work through an audit's exceptions, show only the False or Uncertain results; long lists show 100 results at a time. Use the failed check to route an exception and the open question's reason to identify the evidence or human judgment still needed. A probability is supporting information; it does not override an unqualified question or missing evidence.
A qualifying failure can return false before every other assertion is resolved. Read the downloaded assertions even if undecided is empty. The default 0.995 certainty target sets a gate budget; returned certainty is separate evaluation evidence and can be below the target or unmeasured. It does not establish 99.5% accuracy on the records you upload.
The JSON download includes the results and, for a completed batch, the audit information. It preserves more detail than the on-screen results, including assertion facts, evidence pointers and configuration identifiers. Save it with the source records, supporting evidence and your resolution to maintain a traceable audit trail.
Decide the significance of an exception in the engagement. The console does not calculate materiality or suppress a finding because of a reviewer's materiality assessment. The audit-concepts guide explains how this review can support controls work and substantive testing.
Single-verification results are not retained for later retrieval. Batch results are retained for seven days after completion unless deleted sooner. The console does not submit human review marks; the review-marks API does, with one current assessment per item. Keep detailed notes and approval history in your own workflow. Read Reading results and Privacy when deciding how to retain your records.
If the run does not finish
Read the visible error before changing the input or submitting again. A schema problem requires a data correction; a limit requires waiting; a session problem requires signing in. A timed-out batch submission can have an ambiguous outcome, so a blind retry may create another audit. Use Troubleshooting for the next step.