Query the Registry
Query previously-extracted field values across all documents without re-extraction. Zero AI calls. Filter by field values and select which fields to return.
The registry query endpoint searches across all previously-extracted documents by field values. No document upload, no re-extraction, no AI calls. Documents ingested days or months ago are queryable immediately: ingest once, query forever. The endpoint is mounted at two prefixes that serve the same handler: POST /v1/fields/registry/query is the canonical path, part of the Field Registry surface alongside GET /v1/fields, and POST /v1/registry/query is a deprecated alias kept for existing integrations. Both mounts are live, equivalent, and share one rate-limit namespace.
/v1/fields/registry/queryBody parameters
100Request
where and select are resolved against your workspace's Field Registry by canonical name (case-insensitive). An unknown field name in where returns a 200 response with an error body ({ "error": "unknown_field", "message": "..." }), not an HTTP error status, so check the body for an error key before reading data.How it works: The query searches the resolved_document_values table — materialized field values produced by extraction and Jobs. Every field extracted from every document is queryable, and matching documents are returned newest first. Value matching uses case-insensitive SQL ILIKE, so "meridian energy ag" matches "Meridian Energy AG", and "%energy%" matches any value containing "energy". No LLM calls are made.
Response
Response fields
Response
{
"data": [
{
"document_id": "d7a1b2c3-...",
"filename": "meridian-framework-2026.pdf",
"document_type": "Framework Agreement",
"vendor_name": "Meridian Energy AG",
"contract_year": "2026",
"contract_value": "450000",
"auto_renew": "true",
"notice_period_days": "90"
},
{
"document_id": "e8f4a5b6-...",
"filename": "meridian-amendment-q2.pdf",
"document_type": "Contract Amendment",
"vendor_name": "Meridian Energy AG",
"contract_year": "2026",
"contract_value": "475000",
"auto_renew": "true",
"notice_period_days": "90"
}
],
"total": 2
}Errors
Error responses
Most integrations use registry query as a lookup layer after ingestion is complete. Call POST /v1/extract to ingest documents, wait for the document.extraction.completed webhook, then query the registry by field values to retrieve structured data across your entire corpus. Pair with GET /v1/fields to discover available canonical field names before building where conditions.