Reconcile tables
A reconcile table is where a process runs. Each row is one case: an event came in, the agent worked it following your SOP, and the row holds the result — output fields, the reasoning, the actions taken, and a review status. An order arrives as a PDF. That’s one row. The agent reads the document, queries your customer master, applies the match rules, fillscustomer_number and match_status, notes why, and hands the case to review.
What you configure (in the table’s Configure view):
Input. A case can carry files (documents to work from), structured data (a JSON payload), or both. Reconcile tables take files directly — you do not need an extraction table in front of them.
Statuses. A case moves
Running → Agent Done, then through review to Approved, Needs review, or Rejected. See Review & approvals.
Unit of work. Usually one reconcile table per process. If your process has distinct steps that each deserve their own record, model the steps as tasks in one shared table rather than splitting into many tables.
Key API operations:
- Create a task (without running it) →
POST /projects/{name}/tables/{id}/tasks→ returnstask_id - Run reconciliation synchronously →
POST /projects/{name}/tables/{id}/reconcile - Use the async run pattern with the
row_idfrom a task
AgentJobInput — pass files (references to extraction table rows by UUID) and/or data (arbitrary JSON payload).
Storage tables
A storage table holds reference data: your customer master, item master, price lists, PO headers, carrier codes, GL mappings. It’s the “against what” of every matching process. The agent queries storage tables directly with SQL from its environment — it is not handed a pre-filtered slice. That means it can look up, join, count, and check candidates the way an analyst would, but only in the tables you granted under Data Access. Make your columns legible. The agent reads your schema to understand your data.postal_code and vendor_item_number are useful; col_7 and f3 are not. Add a description to any column whose name isn’t self-explanatory.
Keeping it fresh. Load a CSV by hand, push rows via the API, or sync from a source system on a schedule with a workflow.
Key API operations:
- Upload or overwrite a CSV →
PUT /projects/{name}/tables/{id}(mode:overwriteorappend) - Insert rows as JSON →
POST /projects/{name}/tables/{id}/data - Read rows →
GET /projects/{name}/tables/{id}/data
Extraction tables
An extraction table turns documents into structured rows at volume. One row per file, one column per extraction task, a schema you define. It’s a helper, not a process: it structures, it doesn’t decide. When it earns its place: high document volume with a stable shape, where pre-structuring is cheaper and faster than having the agent read every file from scratch — or when structured rows are the deliverable themselves. What it gives you:- Nested output: a header record plus its line items in one row.
- A side-by-side source view — every value next to the page it came from.
- Run AI on selected rows only, so re-running after a schema change is cheap.
- Optional bounding boxes (where in the document each value came from) and Review mode (a human approval gate before rows are considered final).
active_pipeline (see Extraction pipelines), bounding_boxes, review_mode.
Key API operations:
- Upload a file →
POST /projects/{name}/tables/{id}/files→ returnsrow_id - Start an AI run →
POST /projects/{name}/tables/{id}/run→ returnsrun_id - Poll for results →
GET /projects/{name}/tables/{id}/run/{run_id} - Extract synchronously →
POST /projects/{name}/tables/{id}/extract
How they chain
The common case — files straight into the process:SOPs
The procedure the reconcile agent follows.
Review & approvals
Statuses, evidence, assignment, and approval gates.
Extraction pipelines
Model configurations for extraction tables and the extraction API.
Async run pattern
The three-step upload → start → poll flow.
