Skip to main content

Reference Data

Reference data is a lookup table, uploaded as a CSV or Excel file, that the matching engine and schema reference strategies compare extracted document data against. These datasets are your system of record: the known records such as customer lists, product catalogs, vendor registries, and contract databases. Each reference dataset is versioned independently and can be shared across multiple schemas and matching configurations without duplication.

When you upload a reference dataset, the platform indexes all columns and rows for fast lookup during matching runs. Because each dataset is versioned independently, you can update your reference data without affecting in-progress matching configurations. Besides file upload, you can import reference data directly from a connected SQL database (MSSQL or PostgreSQL) from the reference data page: the import runs asynchronously, streaming rows in batches while column headers appear immediately so you can preview the structure.

Reference data lives as the Reference Data tab of the Documents page (?tab=reference-data), with a standalone route at /sources/reference-data for deep links. The list shows imported datasets and active live SQL connections side by side, each row carrying its row count, columns, status (importing, ready, or failed — large file parses run in the background, and the list polls until they settle), and a Used in column showing where the dataset is consumed.

Tags and usage counts

Datasets carry user-assigned tags for organizing large libraries. The list has a Filter by tag row of chips with OR semantics — selecting several tags shows every dataset carrying any of them — and matching is case-insensitive, so datasets that spell a tag differently still group together. Tags are edited inline on the dataset detail page: chips with a per-tag remove button plus an Add tag input that commits on Enter. Writes replace the full tag set (the server trims entries, drops empties, and dedupes case-insensitively, keeping the first-seen casing), with up to 32 tags of at most 64 characters each per dataset.

The Used in column answers "what breaks if I change this" at a glance. It shows one chip per non-zero facet — the specs whose schema fields or reference binding cite the table, the matching stages (legacy matching configurations) that score against it, the policies whose current version has a lookup rule referencing it, and the gates (validation stages) that compare against it — and a dash when nothing uses the dataset. The counts are advisory list decoration computed best-effort: a failed usage sweep never takes the reference-data list down with it.

Live connections and the table browser

Active SQL source connections appear in the list as Live connection rows — unlike an imported dataset, the connection itself is live rather than a copy. Each live row shows the host and database, its table count, an estimated row count taken from the database catalog (never a full scan), and how many snapshots and saved queries the workspace has built from it. The stats load lazily, one probe per connection, so a failed probe leaves that row showing dashes without blocking the others. Live rows carry no tags, so an active tag filter hides them along with any other untagged row.

The Browse action on a live connection opens the live table browser. A Table dropdown above the grid switches tables in place, keeping the URL in sync for deep links, and the Search this table box filters server-side with a case-insensitive match across every column — it searches the whole table, not just the loaded page. Pages are unordered catalog reads (the backend never sorts or counts the full table), capped at 50 rows per page, and switching tables clears the active search. Datasets imported from SQL remain one-shot snapshots by contrast: the list shows how long ago each synced and flags a snapshot older than 30 days as stale.

Preparing and refreshing datasets

For best results, ensure your reference data is clean and deduplicated before uploading. Include all columns that you plan to match against, such as names, identifiers, dates, and amounts. Most teams refresh their reference data periodically by re-uploading from their source system or by re-running the SQL import to pull directly from a connected database.

Deleting a source connection does not cascade to reference datasets imported from it. The UI shows a "source disconnected" indicator, but the imported data continues to work for matching.
Create a reference dataset via the public API
# The API accepts JSON rows directly; CSV/XLSX files are uploaded in the app.
curl -X POST https://api.talonic.com/v1/reference-data \
  -H "Authorization: Bearer $TALONIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "vendor_registry",
    "columns": ["vendor_id", "vendor_name", "country", "tax_id"],
    "data": [
      { "vendor_id": "V-001", "vendor_name": "ACME Corporation", "country": "DE", "tax_id": "DE123456789" },
      { "vendor_id": "V-002", "vendor_name": "Globex GmbH", "country": "DE", "tax_id": "DE987654321" }
    ]
  }'

# Response (201):
# {
#   "id": "b8c9d0e1-…",
#   "name": "vendor_registry",
#   "source_type": "json",
#   "row_count": 2,
#   "columns": ["vendor_id", "vendor_name", "country", "tax_id"],
#   "created_at": "2026-04-22T10:00:00Z"
# }
Inspect a dataset and page through its rows
# Dataset metadata:
curl -s https://api.talonic.com/v1/reference-data/b8c9d0e1-… \
  -H "Authorization: Bearer $TALONIC_API_KEY"

# Rows, paginated (limit capped at 500 per page):
curl -s "https://api.talonic.com/v1/reference-data/b8c9d0e1-…/rows?page=1&limit=100" \
  -H "Authorization: Bearer $TALONIC_API_KEY"
# -> { "data": [ { "vendor_id": "V-001", ... } ], "pagination": { "page": 1, "limit": 100, "total": 2450 } }
  • CSV and Excel (XLSX) file uploads in the app for quick one-time imports.
  • SQL database imports for live reference data from connected MSSQL or PostgreSQL sources.
  • JSON row creation via POST /v1/reference-data for programmatic loading.
  • Versioning — each dataset tracks versions independently.
  • Cross-schema sharing — one dataset can be referenced by multiple schemas and matching configurations.

Frequently asked questions

What file formats are supported for reference data?+
CSV and Excel (XLSX) files can be uploaded as reference datasets in the app, and JSON rows can be created directly via POST /v1/reference-data. Each dataset is versioned and can be shared across multiple schemas.
How is reference data used?+
Reference datasets serve two purposes. First, the matching engine uses them for field-to-field comparisons — comparing extracted document values against reference rows using weighted strategies (exact, fuzzy, date_range, numeric_range). Second, reference strategies in schemas use them for code mapping and value resolution, translating labels found in documents into canonical codes defined in the reference dataset.
Can I import reference data from a database?+
Yes. Use the SQL import option on the reference data page to stream rows from a connected SQL database (MSSQL or PostgreSQL). The import runs asynchronously and you can monitor progress while it loads.
What happens if I delete a source connection that was used for a SQL import?+
The reference data remains intact. Deleting a source connection does not cascade to reference datasets — the UI shows a "source disconnected" indicator, but the imported data continues to work for matching.
How do I refresh reference data from a SQL source?+
Re-run the SQL import using the same connection and table parameters. A new reference dataset is created with the latest data. Update your matching configurations to point to the new dataset version. The previous version remains available for comparison. For data that must always be current, use the live table browser on the connection instead of a snapshot.
How do tags on reference datasets work?+
Tags are user-assigned labels edited inline on the dataset detail page and filtered in the list with OR semantics — selecting several tags shows datasets carrying any of them, matched case-insensitively. Each dataset holds up to 32 tags of at most 64 characters, and a tag write replaces the full set (trimmed and deduped case-insensitively).
What is the difference between a live connection and an imported dataset?+
An imported dataset is a one-shot snapshot of rows copied into Talonic; the list shows when it synced and flags snapshots older than 30 days as stale. A live connection is the SQL source itself: its row shows catalog-estimated table and row counts, and the Browse action opens a live table browser with a table dropdown and whole-table server-side search.
What does the "Used in" column count?+
One chip per consumer facet: specs whose schema fields or reference binding cite the dataset, legacy matching configurations that score against it, data policies whose current version has a lookup rule referencing it, and validation gates that compare against it. A dash means nothing currently uses the dataset, so it is safe to delete or replace.