# info.description
The Parsewise API lets you drive the same workflows you use in the Parsewise app directly from your own code: create projects, upload source documents, configure agents that describe what to extract, launch extraction, and fetch resolved results with their source citations. Every request must include your API key in the `X-API-Key` header. API keys start with the `pw_live_` prefix and are scoped to a single organisation. You can create and revoke keys from the API Keys page in the Parsewise app. Keep keys secret — treat them like passwords and never embed them in client-side code.

# paths./projects/.get.description
Return all projects in your organisation, ordered by name. Each project carries `document_count` and `agent_count`, so you can render summary views without follow-up requests.

# paths./projects/.post.description
Create a new project. Returns the created project on success.

# paths./projects/{id}/.get.description
Return a single project by ID, including its `document_count` and `agent_count`. Returns `404` if the project does not exist.

# paths./projects/{id}/.put.description
Update an existing project. Returns the updated project. Returns `404` if the project does not exist.

# paths./projects/{id}/.patch.description
Update one or more fields on an existing project (supply only the fields you want to change). Returns the updated project. Returns `404` if the project does not exist.

# paths./projects/{id}/.delete.description
Delete a project and all of its documents, agents, and extraction results. Returns `204` on success. Returns `404` if the project does not exist.

# paths./projects/{project_id}/agents/.get.description
Return all agents configured on the project, ordered by most recently created first. Each agent carries its current `extraction_status`, so you do not need an additional request to know whether it has finished extracting.

# paths./projects/{project_id}/agents/.post.description
Create a new agent on the project. Returns the full created agent (same shape as `GET /agents/{agent_id}/`). Use `POST /agents/launch/` afterwards to run the extraction pipeline.

# paths./projects/{project_id}/agents/{agent_id}/.get.description
Return a single agent by ID, including its dimensions and current extraction status. Returns `404` if the agent does not exist on this project.

# paths./projects/{project_id}/agents/{agent_id}/.put.description
Replace the agent's configuration (instructions, dimensions, etc.). If the change invalidates already-extracted results (e.g. editing the prompt), the affected extraction results are cleared automatically. Returns the updated agent.

# paths./projects/{project_id}/agents/{agent_id}/.patch.description
Update one or more fields on an existing agent (supply only the fields you want to change). If the change invalidates already-extracted results (e.g. editing the prompt), the affected extraction results are cleared automatically. Returns the updated agent.

# paths./projects/{project_id}/agents/{agent_id}/.delete.description
Permanently delete an agent and all extraction results derived from it. Returns `204` on success. Returns `404` if the agent does not exist on this project.

# paths./projects/{project_id}/agents/launch/.post.description
Start the agent extraction pipeline for the project. Only agents
with outstanding work are processed; agents that are already up to
date are skipped. Returns `202 Accepted` immediately; track progress
with `GET /projects/{project_id}/agents/status/`.

# paths./projects/{project_id}/agents/launch/.post.responses.202.description
Extraction has been started. The response body is an empty JSON object; poll `GET /projects/{project_id}/agents/status/` for progress.

# paths./projects/{project_id}/agents/status/.get.description
Per-agent progress and consistency counts for the active
extraction pipeline. More expensive than
`GET /projects/{project_id}/status/`; we recommend polling this
endpoint only while `pipeline_running` is true.

# paths./projects/{project_id}/documents/.get.description
All documents in the project, ordered by upload time (most recent first).

# paths./projects/{project_id}/documents/.post.description
Upload one or more documents to the project. Send the files as `multipart/form-data` under the `files` field (repeat the field for multiple files). The response body has the same shape (`V1DocumentUploadResponse`) for both branches:

- Synchronous uploads (PDF, Word, etc.) populate `files` with the stored URL and original filename for each accepted file. Status code is `200` when no Excel files were queued.
- Excel uploads are queued for asynchronous sheet-by-sheet processing and are reported via `excel_count`. Status code is `202` when one or more Excel files were queued. The resulting `Document` rows surface via `GET /documents/` once processing completes; filenames are not unique, so callers who need to reconcile uploads with documents should poll the list endpoint.

# paths./projects/{project_id}/documents/.post.responses.202.description
Returned when one or more Excel files were queued for asynchronous sheet-by-sheet processing. Body shape is identical to the `200` response.

# paths./projects/{project_id}/documents/{document_id}/.get.description
Return a single document by ID, including parsing status, page count, tags, and timestamps. Returns `404` if the document does not exist on this project.

# paths./projects/{project_id}/documents/{document_id}/.delete.description
Permanently delete a document and all extraction results derived from it. Returns `204` on success. Returns `404` if the document does not exist on this project.

# paths./projects/{project_id}/documents/{document_id}/pages/{page_numbe.get.description
Get the parsed text of a single page of a document. Page numbers are
1-indexed.

# paths./projects/{project_id}/documents/{document_id}/pages/{page_numbe.get.description
Render a single page of a document as a PNG image. Page numbers
are 1-indexed. The rendered image is the canonical PDF page (for
Excel documents, all sheets are rendered onto a single composite
page).

The response is cacheable: the rendered image for a given
``(document_id, page_number)`` pair never changes once the document
has been parsed, so callers may safely cache it indefinitely.

# paths./projects/{project_id}/extractions/{extraction_id}/bounding-boxe.get.description
Bounding boxes highlighting the region of the document page that
contains the extracted value, in 0-1000 normalized page coordinates.
Returns an empty list for web-sourced extractions (which have no
page to highlight). Bounding boxes are generated lazily on first
access; cached responses are returned on subsequent requests.

# paths./projects/{project_id}/results/.get.description
Paginated extraction results for the project, with optional
filtering, sorting, and search. Supplying exactly one `agent_ids`
value also returns the document sources for each result.

# paths./projects/{project_id}/results/.get.parameters[].description
Comma-separated UUIDs. Restricts the response to rows produced by the listed agents (defaults to all of the project's agents). Pass exactly one to also receive `sources` in the response.

# paths./projects/{project_id}/results/.get.parameters[].description
Comma-separated dimension names controlling how rows are grouped and how columns are laid out across multiple agents. Order matters: earlier names group at the outermost level of the result table.

# paths./projects/{project_id}/results/.get.parameters[].description
When `true`, only return rows whose values are not fully consistent across the source documents. Defaults to `false`.

# paths./projects/{project_id}/results/.get.parameters[].description
When `true`, only return rows whose resolved value is missing or empty. Defaults to `false`.

# paths./projects/{project_id}/results/.get.parameters[].description
JSON-encoded dimension filter, applied to the rows. The value is a JSON object whose keys are dimension names (matching the `name` of a dimension on one of the project's agents, e.g. `"Document"` or `"Region"`) and whose values are arrays of dimension values to keep. Within a single key the values are OR-ed (a row matches the key if it has any of the listed values for that dimension); across keys they are AND-ed (a row must match every key to be returned). Empty value arrays and unknown dimension names are ignored. Example: `{"Region": ["EMEA", "APAC"], "Year": ["2024"]}`.

# paths./projects/{project_id}/results/.get.parameters[].description
When `false`, omits the `all_dimension_values` field from the response to reduce payload size. Defaults to `true`.

# paths./projects/{project_id}/results/.get.parameters[].description
1-indexed page number to return. Defaults to `1`.

# paths./projects/{project_id}/results/.get.parameters[].description
Number of rows per page. Defaults to `100`.

# paths./projects/{project_id}/results/.get.parameters[].description
Case-insensitive substring match against resolved values.

# paths./projects/{project_id}/results/.get.parameters[].description
Agent name to restrict `search` to a single column. Ignored when `search` is not supplied.

# paths./projects/{project_id}/results/.get.parameters[].description
Column to sort by. Only applied when a single agent is selected and no `dimension_order` is supplied; otherwise the default ordering is used.

# paths./projects/{project_id}/results/.get.parameters[].description
Sort direction for `sort_by`. Defaults to `asc`.

# paths./projects/{project_id}/results/{resolution_result_id}/.get.description
Full detail for one resolved value, including the resolved value
itself, the resolution status and justification, the dimension
instances it belongs to, and the document pages it was sourced from
(with web supplement data when web search is enabled on the agent).

# paths./projects/{project_id}/results/{resolution_result_id}/extraction.get.description
The individual extractions that contributed to a resolution
result, including the raw extracted value, the verbatim source
passage, the AI's reasoning, and consistency metadata. For document
extractions, ``document_id`` and ``page_number`` indicate where the
value was pulled from; for web extractions, ``web_search_query``
and ``web_citations`` describe the source.

Results are ordered with web sources first, then consistent rows,
then by document and page number, for stable pagination as new
extractions arrive.

# paths./projects/{project_id}/results/{resolution_result_id}/extraction.get.summary
List extractions for a resolution result

# paths./projects/{project_id}/results/{resolution_result_id}/extraction.get.parameters[].description
Maximum number of extractions to return on this page. Defaults to `10`.

# paths./projects/{project_id}/results/{resolution_result_id}/extraction.get.parameters[].description
Zero-indexed offset into the ordered list of extractions, used for pagination. Defaults to `0`.

# paths./projects/{project_id}/status/.get.description
Compact processing status for a project, intended for frequent
polling (for example, every 15 seconds) while documents are being
parsed or agents are running.

# components.schemas.Document.properties.id.description
Stable identifier for the document (UUID).

# components.schemas.Document.properties.project_id.description
Identifier of the project this document belongs to.

# components.schemas.Document.properties.file_url.description
Pre-signed URL for downloading the original uploaded file.

# components.schemas.Document.properties.uploaded_at.description
Timestamp when the document was uploaded.

# components.schemas.Document.properties.type.description
Detected document type, inferred from the file extension at upload time.

* `PDF` - PDF
* `Audio` - Audio
* `Image` - Image
* `Text` - Text
* `Excel` - Excel
* `PPT` - PPT
* `Word Document` - Word Document
* `Website` - Website

# components.schemas.Document.properties.page_count.description
Number of pages detected after parsing. 0 until parsing completes.

# components.schemas.Document.properties.version.description
Version number, incremented each time the document is reprocessed.

# components.schemas.Document.properties.summary.description
AI-generated short summary of the document contents.

# components.schemas.Document.properties.metadata.description
Free-form metadata extracted from the document by the parser. Format is parser-dependent (often a JSON string, sometimes plain text); may be empty.

# components.schemas.Document.properties.status.description
Lifecycle status. Pending while the document is being parsed; Processed once parsing has completed.

* `Pending` - Pending
* `Processed` - Processed

# components.schemas.Document.properties.uses_agentic_extraction.description
True when the document is parsed using the agentic (AI-assisted) parser, false when it is parsed by the standard parser.

# components.schemas.Document.properties.last_parsed_at.description
Timestamp of the most recent successful parse, or null if it has never been parsed.

# components.schemas.Document.properties.file_name.description
Original filename of the uploaded document.

# components.schemas.DocumentTypeEnum.description
* `PDF` - PDF
* `Audio` - Audio
* `Image` - Image
* `Text` - Text
* `Excel` - Excel
* `PPT` - PPT
* `Word Document` - Word Document
* `Website` - Website

# components.schemas.ParsingStateEnum.description
* `ready` - ready
* `parsing` - parsing
* `not_started` - not_started
* `stuck` - stuck

# components.schemas.PatchedV1AgentRequest.description
Schema-only serializer describing the V1 agent create/update request body.

Subclasses `TopicInstanceSerializer` to inherit `help_text` on the
writable fields, but trims out fields that aren't valid for V1 callers
(`is_draft` is forced to false; `inconsistency_summary` is AI-generated)
and overrides `dimensions` with the write-side schema (the runtime view
pops `dimensions` from the request body before serializer validation, so
`TopicInstanceSerializer` itself never sees them). The class name
intentionally omits `Request` because `COMPONENT_SPLIT_REQUEST` adds
that suffix automatically.

# components.schemas.PatchedV1AgentRequest.properties.name.description
Human-readable name shown for the agent (e.g. "Contract value").

# components.schemas.PatchedV1AgentRequest.properties.extraction_instructions.description
Natural-language instructions describing what the agent should extract from each document.

# components.schemas.PatchedV1AgentRequest.properties.value_type.description
Type of value the agent produces.

* `string` - string
* `number` - number
* `bool` - bool
* `date` - date
* `datetime` - datetime

# components.schemas.PatchedV1AgentRequest.properties.unit.description
Optional unit for numeric values (e.g. `USD`, `%`, `kg`). Used to normalise extracted values into a consistent unit and for display.

# components.schemas.PatchedV1AgentRequest.properties.examples.description
Free-form examples of expected values, used to steer the agent towards the right kind of answer.

# components.schemas.PatchedV1AgentRequest.properties.inconsistency_instructions.description
Custom instructions for inconsistency checking. If empty, default instructions will be used.

# components.schemas.PatchedV1AgentRequest.properties.resolution_instructions.description
Custom instructions for entity resolution. If empty, default instructions will be used.

# components.schemas.PatchedV1AgentRequest.properties.enable_complex_calculations_in_resolution.description
Enable advanced computational analysis for complex resolution tasks involving calculations or data transformations.

# components.schemas.PatchedV1AgentRequest.properties.enable_web_search.description
Enable web search to supplement extraction results with data from the web.

# components.schemas.PatchedV1AgentRequest.properties.dimensions.description
Dimensions to configure on the agent, in declaration order. Each entry attaches an existing dimension template to the agent and configures its values. Omit to create the agent with no dimensions; on update, omit to leave existing dimensions untouched and pass an empty array to remove them all.

# components.schemas.PatchedV1ProjectRequest.description
V1 read/update serializer for projects.

Hides the internal `status` field (lifecycle is handled implicitly via
the standard `DELETE` endpoint) so it never appears in V1 responses or
request bodies.

# components.schemas.PatchedV1ProjectRequest.properties.name.description
Human-readable name shown in the UI and in lists.

# components.schemas.PatchedV1ProjectRequest.properties.description.description
Short description of what the project covers.

# components.schemas.PatchedV1ProjectRequest.properties.last_visited_at.description
Timestamp of the most recent visit to this project.

# components.schemas.PatchedV1ProjectRequest.properties.reference_date.description
Reference date used by agents that need a "today" anchor (e.g. relative date extractions). Defaults to the date the project was created.

# components.schemas.PatchedV1ProjectRequest.properties.per_document_mode.description
When true, extraction results are scoped per-document rather than aggregated across the project. Used for projects where each document represents a separate subject (e.g. one contract per file).

# components.schemas.PatchedV1ProjectRequest.properties.per_tag_mode.description
When true, extraction results are grouped per tag value. Should not be combined with `per_document_mode`.

# components.schemas.PatchedV1ProjectRequest.properties.is_pinned.description
Whether the project is pinned to the top of the project list.

# components.schemas.ResolutionStatusEnum.description
* `Not resolved` - Not resolved
* `Requires attention` - Requires attention
* `Resolved` - Resolved
* `Ignored` - Ignored
* `No result` - No result

# components.schemas.SourceType629Enum.description
* `document` - document
* `web` - web
* `document_and_web` - document_and_web

# components.schemas.StatusEnum.description
* `Pending` - Pending
* `Processed` - Processed

# components.schemas.TopicInstance.properties.project_id.description
Identifier of the project this agent belongs to.

# components.schemas.TopicInstance.properties.template_id.description
Identifier of the agent template this agent was created from, or null if the agent was created from scratch.

# components.schemas.TopicInstance.properties.dimensions.description
Dimensions configured on this agent, in display order. Each dimension carries its template id, mapping id, name, ordered list of values, and whether values are dynamically discovered from documents (are_values_dynamic=true) or static.

# components.schemas.TopicInstance.properties.extraction_status.description
Whether the agent has finished extracting against the project's current documents. `Pending` while extractions are missing or in flight, `Processed` once all expected resolutions are present, and `No Result` when the agent has completed but produced no resolved values.

# components.schemas.TopicInstance.properties.requires_attention.description
True if any of this agent's resolved values need attention (for example, unresolved inconsistencies between source documents).

# components.schemas.TopicInstance.properties.name.description
Human-readable name shown for the agent (e.g. "Contract value").

# components.schemas.TopicInstance.properties.extraction_instructions.description
Natural-language instructions describing what the agent should extract from each document.

# components.schemas.TopicInstance.properties.value_type.description
Type of value the agent produces.

* `string` - string
* `number` - number
* `bool` - bool
* `date` - date
* `datetime` - datetime

# components.schemas.TopicInstance.properties.unit.description
Optional unit for numeric values (e.g. `USD`, `%`, `kg`). Used to normalise extracted values into a consistent unit and for display.

# components.schemas.TopicInstance.properties.examples.description
Free-form examples of expected values, used to steer the agent towards the right kind of answer.

# components.schemas.TopicInstance.properties.inconsistency_instructions.description
Custom instructions for inconsistency checking. If empty, default instructions will be used.

# components.schemas.TopicInstance.properties.resolution_instructions.description
Custom instructions for entity resolution. If empty, default instructions will be used.

# components.schemas.TopicInstance.properties.enable_complex_calculations_in_resolution.description
Enable advanced computational analysis for complex resolution tasks involving calculations or data transformations.

# components.schemas.TopicInstance.properties.enable_web_search.description
Enable web search to supplement extraction results with data from the web.

# components.schemas.TopicInstance.properties.inconsistency_summary.description
AI-generated summary of why extracted values disagree across documents. Populated when inconsistencies are detected; null otherwise.

# components.schemas.TopicInstance.properties.is_draft.description
Whether the agent is a draft. Should always be false for API callers; drafts are not returned in V1 list or retrieve responses.

# components.schemas.TypeEnum.description
* `PDF` - PDF
* `Audio` - Audio
* `Image` - Image
* `Text` - Text
* `Excel` - Excel
* `PPT` - PPT
* `Word Document` - Word Document
* `Website` - Website

# components.schemas.V1AgentConsistencyEntry.properties.consistent_count.description
Number of resolved values that are fully consistent across documents.

# components.schemas.V1AgentConsistencyEntry.properties.missing_count.description
Number of expected values that could not be extracted from any document.

# components.schemas.V1AgentConsistencyEntry.properties.inconsistent_count.description
Number of resolved values where document sources disagree and could not be reconciled automatically.

# components.schemas.V1AgentConsistencyEntry.properties.ignored_count.description
Number of values explicitly marked as ignored by the user.

# components.schemas.V1AgentConsistencyEntry.properties.total_count.description
Total number of resolved values for this agent.

# components.schemas.V1AgentDimensionRequest.description
Per-dimension entry in the V1 agent create/update request body.

Documentation-only: the actual write path (`convert_api_request_to_specs`
/ `parse_dimensions_data`) accepts a list of dicts with this shape.
With `COMPONENT_SPLIT_REQUEST` enabled, drf-spectacular appends a
`Request` suffix to the schema component name; the class name itself
intentionally omits `Request` to avoid the doubled suffix.

# components.schemas.V1AgentDimensionRequest.properties.dimension_template_id.description
ID of the dimension template to attach to the agent.

# components.schemas.V1AgentDimensionRequest.properties.are_values_dynamic.description
When true, allowed values for this dimension are discovered dynamically from the project's documents during extraction. When false, `values` defines the fixed set of allowed values.

# components.schemas.V1AgentDimensionRequest.properties.values.description
Allowed values for this dimension when `are_values_dynamic` is false. Ignored when values are dynamic.

# components.schemas.V1AgentDimensionRequest.properties.description.description
Optional update to the dimension's description. Note: this updates the dimension across every agent in the project that shares it.

# components.schemas.V1AgentDimensionRequest.properties.value_type.description
Optional update to the dimension's value type. Note: this updates the dimension across every agent in the project that shares it.

# components.schemas.V1AgentDimensionRequest.properties.add_to_all_agents.description
When true, this dimension is also attached to every other agent in the project (and applied to any future agents created in the project).

# components.schemas.V1AgentDimensionResponse.description
Schema-only serializer describing one entry in the agent `dimensions` list.

Used by `extend_schema_field` on `TopicInstanceSerializer.get_dimensions`
so the OpenAPI schema emits a named, reusable component instead of an
inlined dict.

# components.schemas.V1AgentDimensionResponse.properties.dimension_template_id.description
Identifier of the dimension template (the reusable dimension definition this instance attaches to the agent).

# components.schemas.V1AgentDimensionResponse.properties.dimension_mapping_id.description
Identifier of this dimension's attachment to the agent. Carries the agent-specific settings for the dimension, such as `order` and `are_values_dynamic`.

# components.schemas.V1AgentDimensionResponse.properties.name.description
Human-readable dimension name (e.g. "Region", "Year").

# components.schemas.V1AgentDimensionResponse.properties.description.description
Free-text description of the dimension, or null if none was provided.

# components.schemas.V1AgentDimensionResponse.properties.values.description
Dimension values used to key extraction results. When `are_values_dynamic` is true these are discovered from the source documents; otherwise they are the static values configured on the agent.

# components.schemas.V1AgentDimensionResponse.properties.order.description
Display/declaration order of this dimension relative to the agent's other dimensions.

# components.schemas.V1AgentDimensionResponse.properties.are_values_dynamic.description
True when the dimension's values are dynamically discovered from documents; false when the values are statically configured.

# components.schemas.V1AgentRequest.description
Schema-only serializer describing the V1 agent create/update request body.

Subclasses `TopicInstanceSerializer` to inherit `help_text` on the
writable fields, but trims out fields that aren't valid for V1 callers
(`is_draft` is forced to false; `inconsistency_summary` is AI-generated)
and overrides `dimensions` with the write-side schema (the runtime view
pops `dimensions` from the request body before serializer validation, so
`TopicInstanceSerializer` itself never sees them). The class name
intentionally omits `Request` because `COMPONENT_SPLIT_REQUEST` adds
that suffix automatically.

# components.schemas.V1AgentRequest.properties.name.description
Human-readable name shown for the agent (e.g. "Contract value").

# components.schemas.V1AgentRequest.properties.extraction_instructions.description
Natural-language instructions describing what the agent should extract from each document.

# components.schemas.V1AgentRequest.properties.value_type.description
Type of value the agent produces.

* `string` - string
* `number` - number
* `bool` - bool
* `date` - date
* `datetime` - datetime

# components.schemas.V1AgentRequest.properties.unit.description
Optional unit for numeric values (e.g. `USD`, `%`, `kg`). Used to normalise extracted values into a consistent unit and for display.

# components.schemas.V1AgentRequest.properties.examples.description
Free-form examples of expected values, used to steer the agent towards the right kind of answer.

# components.schemas.V1AgentRequest.properties.inconsistency_instructions.description
Custom instructions for inconsistency checking. If empty, default instructions will be used.

# components.schemas.V1AgentRequest.properties.resolution_instructions.description
Custom instructions for entity resolution. If empty, default instructions will be used.

# components.schemas.V1AgentRequest.properties.enable_complex_calculations_in_resolution.description
Enable advanced computational analysis for complex resolution tasks involving calculations or data transformations.

# components.schemas.V1AgentRequest.properties.enable_web_search.description
Enable web search to supplement extraction results with data from the web.

# components.schemas.V1AgentRequest.properties.dimensions.description
Dimensions to configure on the agent, in declaration order. Each entry attaches an existing dimension template to the agent and configures its values. Omit to create the agent with no dimensions; on update, omit to leave existing dimensions untouched and pass an empty array to remove them all.

# components.schemas.V1AgentStageProgressExtraction.properties.percentage.description
Completion percentage (0–100), rounded to integer.

# components.schemas.V1AgentStageProgressParsing.properties.percentage.description
Completion percentage (0–100), rounded to integer.

# components.schemas.V1AgentStageProgressResolution.properties.percentage.description
Completion percentage (0–100), rounded to integer.

# components.schemas.V1AgentStageProgressWebSearch.properties.percentage.description
Completion percentage (0–100), rounded to integer.

# components.schemas.V1AgentStatusResponse.properties.progress.description
Per-agent pipeline progress, keyed by agent ID (UUID). Each value reports completion of the four pipeline stages: parsing (of the project's documents), extraction (running the agent against each document), web_search (supplementary web lookups, when enabled on the agent), and resolution (consolidating extracted values into final results).

# components.schemas.V1AgentStatusResponse.properties.consistency.description
Per-agent consistency counts, keyed by agent ID (UUID). Surfaces how many resolved values across the project are consistent, missing, inconsistent, or ignored.

# components.schemas.V1AgentStatusResponse.properties.pipeline_running.description
True while the project's agent extraction pipeline is currently running.

# components.schemas.V1BoundingBox.description
A single bounding box highlighting where on a page an extraction was found.

Coordinates use a 0-1000 normalized page coordinate space (independent
of the page's pixel dimensions): `(0, 0)` is the top-left corner of the
page and `(1000, 1000)` is the bottom-right corner. To overlay a box on
a rendered page image, scale by the rendered image's width and height.

# components.schemas.V1BoundingBox.properties.x0.description
Left edge in 0-1000 normalized page coordinates (`0` = left edge of page, `1000` = right edge).

# components.schemas.V1BoundingBox.properties.y0.description
Top edge in 0-1000 normalized page coordinates (`0` = top of page, `1000` = bottom).

# components.schemas.V1BoundingBox.properties.x1.description
Right edge in 0-1000 normalized page coordinates (`0` = left edge of page, `1000` = right edge).

# components.schemas.V1BoundingBox.properties.y1.description
Bottom edge in 0-1000 normalized page coordinates (`0` = top of page, `1000` = bottom).

# components.schemas.V1DocumentPageResponse.properties.id.description
Stable identifier for the document page (UUID).

# components.schemas.V1DocumentPageResponse.properties.page_number.description
1-indexed page number, matching the page_number in the URL.

# components.schemas.V1DocumentPageResponse.properties.parsed_text.description
Plain-text contents of the page as produced by parsing.

# components.schemas.V1DocumentPageResponse.properties.document_type.description
Type of the parent document.

* `PDF` - PDF
* `Audio` - Audio
* `Image` - Image
* `Text` - Text
* `Excel` - Excel
* `PPT` - PPT
* `Word Document` - Word Document
* `Website` - Website

# components.schemas.V1DocumentUploadRequest.properties.files.description
One or more files to upload. Repeat the `files` field once per file (standard multipart/form-data multi-file upload). Supported types: PDF, Word, Excel, PPT, Image, Audio, Text, Website.

# components.schemas.V1DocumentUploadRequest.properties.skip_sheets.description
Optional JSON-encoded object of the form `{"filename.xlsx": [{"name": "Sheet1", "estimatedPages": 1500}, ...]}` listing Excel sheets the caller chose not to upload because they exceeded size limits. Used for logging and quota accounting only; omit if not applicable.

# components.schemas.V1DocumentUploadResponse.properties.excel_count.description
Number of Excel files queued for asynchronous sheet-by-sheet processing. `0` when only synchronous uploads were performed (in which case the response status is `200`); otherwise non-zero and the response status is `202`.

# components.schemas.V1DocumentUploadResponse.properties.files.description
Entries for each synchronously uploaded file. Excel files queued for async processing are not included here; they surface via the usual document endpoints once processed.

# components.schemas.V1ExtractionResult.description
A single extraction underlying a resolution result.

One resolution result is typically produced from many extractions across
different document pages (and optionally web sources). This is one such
extraction, with the raw value the AI pulled from the source plus the
surrounding text and consistency metadata.

# components.schemas.V1ExtractionResult.properties.id.description
Stable identifier of the extraction. Use this with `GET /projects/{project_id}/extractions/{extraction_id}/bounding-boxes/` to retrieve where on the page the value was found.

# components.schemas.V1ExtractionResult.properties.value.description
Raw extracted value as a string (numeric values are normalized to a canonical decimal representation). For the resolved, typed value across all extractions for a result, see the parent resolution result.

# components.schemas.V1ExtractionResult.properties.relevant_passage.description
Verbatim passage from the source page that the AI used to derive the extracted value.

# components.schemas.V1ExtractionResult.properties.reasoning.description
AI-generated explanation of how the value was derived from the source passage.

# components.schemas.V1ExtractionResult.properties.consistent.description
Whether this extraction agrees with the resolved value. `null` when consistency has not yet been evaluated.

# components.schemas.V1ExtractionResult.properties.justification_for_consistency.description
AI-generated explanation of the consistency outcome. `null` when consistency has not yet been evaluated.

# components.schemas.V1ExtractionResult.properties.source_type.description
Whether the extraction came from an uploaded `document` or a `web` search result.

* `document` - document
* `web` - web

# components.schemas.V1ExtractionResult.properties.document_id.description
Identifier of the source document. `null` for `web` extractions.

# components.schemas.V1ExtractionResult.properties.document_name.description
Stored filename of the source document. `null` for `web` extractions.

# components.schemas.V1ExtractionResult.properties.page_number.description
1-indexed page number within the source document. `null` for `web` extractions.

# components.schemas.V1ExtractionResult.properties.web_search_query.description
Web search query that surfaced this extraction. Populated only for `web` extractions; `null` for document extractions.

# components.schemas.V1ExtractionResult.properties.web_search_timestamp.description
When the web search was executed. Populated only for `web` extractions; `null` for document extractions.

# components.schemas.V1ExtractionResult.properties.web_citations.description
Web pages cited by this extraction along with the snippets of supporting text. Empty list for document extractions.

# components.schemas.V1ExtractionsListResponse.properties.data.description
Extractions on this page, ordered with web sources first, then consistent rows, then by document and page.

# components.schemas.V1ExtractionsListResponse.properties.total_count.description
Total number of extractions for this resolution result across all pages.

# components.schemas.V1Project.description
V1 read/update serializer for projects.

Hides the internal `status` field (lifecycle is handled implicitly via
the standard `DELETE` endpoint) so it never appears in V1 responses or
request bodies.

# components.schemas.V1Project.properties.id.description
Stable identifier for the project (UUID).

# components.schemas.V1Project.properties.name.description
Human-readable name shown in the UI and in lists.

# components.schemas.V1Project.properties.description.description
Short description of what the project covers.

# components.schemas.V1Project.properties.last_visited_at.description
Timestamp of the most recent visit to this project.

# components.schemas.V1Project.properties.reference_date.description
Reference date used by agents that need a "today" anchor (e.g. relative date extractions). Defaults to the date the project was created.

# components.schemas.V1Project.properties.per_document_mode.description
When true, extraction results are scoped per-document rather than aggregated across the project. Used for projects where each document represents a separate subject (e.g. one contract per file).

# components.schemas.V1Project.properties.per_tag_mode.description
When true, extraction results are grouped per tag value. Should not be combined with `per_document_mode`.

# components.schemas.V1Project.properties.document_count.description
Number of documents currently in the project.

# components.schemas.V1Project.properties.agent_count.description
Number of non-draft agents configured on the project.

# components.schemas.V1Project.properties.is_pinned.description
Whether the project is pinned to the top of the project list.

# components.schemas.V1Project.properties.project_modules.description
Per-project overrides for which application modules are enabled, keyed by module name with boolean values. A missing key falls back to the organisation's default for that module.

# components.schemas.V1ProjectCreateRequestRequest.description
Schema-only serializer describing the V1 POST /projects/ request body.

Restricted to fields that are meaningful at creation time. Server-managed
fields (`status`, `last_visited_at`, `is_pinned`, `project_modules`) are
intentionally omitted; they cannot be set by the caller.

# components.schemas.V1ProjectCreateRequestRequest.properties.name.description
Human-readable name shown in the UI and in lists.

# components.schemas.V1ProjectCreateRequestRequest.properties.description.description
Short description of what the project covers.

# components.schemas.V1ProjectCreateRequestRequest.properties.reference_date.description
Reference date used by agents that need a "today" anchor (e.g. relative date extractions). Defaults to the date the project was created.

# components.schemas.V1ProjectCreateRequestRequest.properties.per_document_mode.description
When true, extraction results are scoped per-document rather than aggregated across the project. Used for projects where each document represents a separate subject (e.g. one contract per file).

# components.schemas.V1ProjectCreateRequestRequest.properties.per_tag_mode.description
When true, extraction results are grouped per tag value. Should not be combined with `per_document_mode`.

# components.schemas.V1ProjectRequest.description
V1 read/update serializer for projects.

Hides the internal `status` field (lifecycle is handled implicitly via
the standard `DELETE` endpoint) so it never appears in V1 responses or
request bodies.

# components.schemas.V1ProjectRequest.properties.name.description
Human-readable name shown in the UI and in lists.

# components.schemas.V1ProjectRequest.properties.description.description
Short description of what the project covers.

# components.schemas.V1ProjectRequest.properties.last_visited_at.description
Timestamp of the most recent visit to this project.

# components.schemas.V1ProjectRequest.properties.reference_date.description
Reference date used by agents that need a "today" anchor (e.g. relative date extractions). Defaults to the date the project was created.

# components.schemas.V1ProjectRequest.properties.per_document_mode.description
When true, extraction results are scoped per-document rather than aggregated across the project. Used for projects where each document represents a separate subject (e.g. one contract per file).

# components.schemas.V1ProjectRequest.properties.per_tag_mode.description
When true, extraction results are grouped per tag value. Should not be combined with `per_document_mode`.

# components.schemas.V1ProjectRequest.properties.is_pinned.description
Whether the project is pinned to the top of the project list.

# components.schemas.V1ProjectStatusResponse.properties.parsing_state.description
Current parsing state of the project. `not_started` before parsing begins, `parsing` while documents are being parsed, `ready` when all documents are parsed, and `stuck` when parsing has stalled and could not recover automatically.

* `ready` - ready
* `parsing` - parsing
* `not_started` - not_started
* `stuck` - stuck

# components.schemas.V1ProjectStatusResponse.properties.pending_documents.description
IDs of documents that are still being parsed.

# components.schemas.V1ProjectStatusResponse.properties.pipeline_running.description
True while the project's agent extraction pipeline is currently running.

# components.schemas.V1ResultDetailResponse.properties.id.description
Stable identifier of the resolution result.

# components.schemas.V1ResultDetailResponse.properties.atomic_value_id.description
Identifier of the underlying atomic value (one per combination of agent and dimension values).

# components.schemas.V1ResultDetailResponse.properties.result_name.description
Human-readable label for this result, typically a concatenation of its dimension values.

# components.schemas.V1ResultDetailResponse.properties.agent_name.description
Name of the agent that produced this result.

# components.schemas.V1ResultDetailResponse.properties.value.description
Resolved value. Shape depends on the agent's `value_type`: `string` -> string; `number` -> number; `bool` -> boolean; `date` -> ISO 8601 date string `YYYY-MM-DD`; `datetime` -> ISO 8601 date-time string. May be null for missing values.

# components.schemas.V1ResultDetailResponse.properties.resolution_status.description
Resolution outcome for this entity.

* `Not resolved` - Not resolved
* `Requires attention` - Requires attention
* `Resolved` - Resolved
* `Ignored` - Ignored
* `No result` - No result

# components.schemas.V1ResultDetailResponse.properties.justification_for_resolution_status.description
AI-generated explanation of why this resolution status was chosen. Null when not applicable.

# components.schemas.V1ResultDetailResponse.properties.references.description
Citation map keyed by `reference_id` (the same IDs referenced from `justification_for_resolution_status` and from extraction passages). Each value is a 2-element array `[document_name, document_page]`: `document_page` is the 1-based page number, or `null` for sources without pages (e.g. websites). Empty object `{}` when there are no citations.

# components.schemas.V1ResultDetailResponse.properties.source_type.description
Where the resolved value came from.

* `document` - document
* `web` - web
* `document_and_web` - document_and_web

# components.schemas.V1ResultDetailResponse.properties.is_web_supplement.description
True when this result was supplemented with web search data rather than derived purely from uploaded documents.

# components.schemas.V1ResultDetailResponse.properties.web_supplement.description
Populated only when web search is enabled on the agent and web data contributed to the resolution; otherwise null.

# components.schemas.V1ResultDetailResponse.properties.updated_by_email.description
Email of the last user to manually override this resolution, or null if never manually updated.

# components.schemas.V1ResultDetailResponse.properties.dimension_instances.description
Dimension instances this result is keyed by (one entry per dimension configured on the agent).

# components.schemas.V1ResultDetailResponse.properties.sources.description
Document pages cited by the resolution. Empty for web-only results.

# components.schemas.V1ResultDimensionInstance.description
One dimension instance (template + value) attached to an extraction result.

# components.schemas.V1ResultDimensionInstance.properties.dimension_template_id.description
Identifier of the dimension template this instance belongs to.

# components.schemas.V1ResultDimensionInstance.properties.dimension_value.description
Value of the dimension (e.g. "EMEA", "2024").

# components.schemas.V1ResultSource.properties.page_number.description
1-indexed page number within the source document.

# components.schemas.V1ResultSource.properties.document_id.description
Stable identifier of the source document.

# components.schemas.V1ResultSource.properties.atomic_value_ids.description
Identifiers of the atomic values whose resolutions cite this source.

# components.schemas.V1ResultsListResponse.properties.results.description
Rows of the extraction result table on this page.

# components.schemas.V1ResultsListResponse.properties.count.description
Number of rows returned on this page (i.e. the length of `results`). For the cross-page total, use `total_rows`.

# components.schemas.V1ResultsListResponse.properties.page.description
1-indexed page number of the returned page.

# components.schemas.V1ResultsListResponse.properties.total_pages.description
Total number of pages available for the current filters.

# components.schemas.V1ResultsListResponse.properties.total_rows.description
Total matching rows across all pages for the current filters.

# components.schemas.V1ResultsListResponse.properties.displayed_dimensions.description
Ordered dimension names used to group/lay out rows in the response, reflecting the effective `dimension_order`.

# components.schemas.V1ResultsListResponse.properties.recommended_dimension_order.description
Suggested dimension ordering for multi-agent views, or null when no specific ordering is recommended.

# components.schemas.V1ResultsListResponse.properties.all_dimension_values.description
Map of dimension name to the full set of values seen for that dimension across the matching rows, useful for building filter pickers. Omitted when `include_dimension_values=false`.

# components.schemas.V1ResultsListResponse.properties.sources.description
Document pages cited by the results on this page. Only returned when exactly one `agent_ids` value is supplied.

# components.schemas.V1ResultsListRow.properties.id.description
Identifier of the atomic value this row represents. To fetch the full detail for the resolved value, use the `id` from `resolution_result` with `GET /results/{id}/`.

# components.schemas.V1ResultsListRow.properties.agent_name.description
Name of the agent that produced this row.

# components.schemas.V1ResultsListRow.properties.value_type.description
Value type declared on the agent.

* `string` - string
* `number` - number
* `bool` - bool
* `date` - date
* `datetime` - datetime

# components.schemas.V1ResultsListRow.properties.extraction_status.description
Per-row extraction status.

* `Pending` - Pending
* `Processed` - Processed
* `No Result` - No Result

# components.schemas.V1ResultsListRow.properties.resolution_result.description
Resolved value and metadata for this row (same shape as the `GET /results/{id}/` response minus `atomic_value_id`, `dimension_instances`, and `sources`), or null if no resolution exists yet.

# components.schemas.V1ResultsListRow.properties.dimension_instances.description
Dimension instances this row is keyed by (one entry per dimension configured on the agent).

# components.schemas.V1RowResolutionResult.description
Resolved value and metadata for a row in the results list.

Same shape as the `GET /results/{id}/` response minus
`atomic_value_id`, `dimension_instances`, and `sources`.

# components.schemas.V1RowResolutionResult.properties.id.description
Stable identifier of the resolution result.

# components.schemas.V1RowResolutionResult.properties.result_name.description
Human-readable label for this result, typically a concatenation of its dimension values.

# components.schemas.V1RowResolutionResult.properties.agent_name.description
Name of the agent that produced this result.

# components.schemas.V1RowResolutionResult.properties.value.description
Resolved value. Shape depends on the agent's `value_type`: `string` -> string; `number` -> number; `bool` -> boolean; `date` -> ISO 8601 date string `YYYY-MM-DD`; `datetime` -> ISO 8601 date-time string. May be null for missing values.

# components.schemas.V1RowResolutionResult.properties.resolution_status.description
Resolution outcome for this entity.

* `Not resolved` - Not resolved
* `Requires attention` - Requires attention
* `Resolved` - Resolved
* `Ignored` - Ignored
* `No result` - No result

# components.schemas.V1RowResolutionResult.properties.justification_for_resolution_status.description
AI-generated explanation of why this resolution status was chosen. Null when not applicable.

# components.schemas.V1RowResolutionResult.properties.references.description
Citation map keyed by `reference_id` (the same IDs referenced from `justification_for_resolution_status` and from extraction passages). Each value is a 2-element array `[document_name, document_page]`: `document_page` is the 1-based page number, or `null` for sources without pages (e.g. websites). Empty object `{}` when there are no citations.

# components.schemas.V1RowResolutionResult.properties.source_type.description
Where the resolved value came from.

* `document` - document
* `web` - web
* `document_and_web` - document_and_web

# components.schemas.V1RowResolutionResult.properties.is_web_supplement.description
True when this result was supplemented with web search data rather than derived purely from uploaded documents.

# components.schemas.V1RowResolutionResult.properties.web_supplement.description
Populated only when web search is enabled on the agent and web data contributed to the resolution; otherwise null.

# components.schemas.V1RowResolutionResult.properties.updated_by_email.description
Email of the last user to manually override this resolution, or null if never manually updated.

# components.schemas.ValueTypeEnum.description
* `string` - string
* `number` - number
* `bool` - bool
* `date` - date
* `datetime` - datetime

# components.schemas.WebCitation.description
One web citation: the snippets of supporting text and the source page.

# components.schemas.WebCitation.properties.snippets.description
Snippets of text from the source page that support the extracted value.

# components.schemas.WebSnippet.description
One snippet of supporting text quoted from a web source page.

# components.schemas.WebSnippet.properties.text.description
Verbatim snippet of text from the source page.

# components.schemas.WebSource.description
A single web page (URL + title) cited by an extraction.