[ EXTRACT API ]

Define a schema, get typed JSON back.

Send a PDF and JSON Schema to /v2/extract to receive schema-shaped values with a confidence score on each field. Enable citations when you also need source-page coordinates.

[ OVERVIEW ]
What it does

Extract takes a PDF and valid JSON Schema, then returns values that follow the requested structure. Each field includes a confidence score, and optional citations link values to their location in the source PDF.

Who it's for

Teams automating invoices, contracts, claims, and onboarding workflows that need consistent fields from documents with varied layouts.

What it solves

Prompt-only extraction can change shape between runs and provides little evidence for verification. Extract constrains the response to your schema and can return source coordinates alongside the values.

[ USE CASES ]

Extract consistent fields from PDFs with varied layouts.

Invoice and AP automation

Return vendor details, totals, line items, and payment terms in one consistent schema across varied invoice layouts.

Contract and clause data

Parties, dates, renewal terms, and governing law pulled into a consistent shape for review.

Financial statements

Extract balance-sheet and filing figures with per-field scores that can drive review thresholds.

KYC, claims, and onboarding

ID fields, claim amounts, and applicant details captured with citations for audit.

Long line-item tables

Represent repeated rows as schema-defined arrays instead of flattening them into a single text field.

Batch extraction

Apply the same schema to a document batch so each response follows the same field structure.

[ WHY UNSILOED ]

Why teams trust Extract with their data.

  • 01

    Output shaped by JSON Schema

    Define field names, types, required values, arrays, and nested objects before the job runs.

  • 02

    A confidence score on every field

    Use each field’s score to set review thresholds based on the risk and document type in your workflow.

  • 03

    Optional source citations

    Enable citations when reviewers need to trace a value to its position in the PDF.

  • 04

    Nested objects and arrays

    Model line items, parties, transactions, and other repeated structures directly in the schema.

  • 05

    Strict schema validation

    Set required fields and disable additional properties when downstream systems need a fixed response shape.

  • 06

    Scanned PDFs supported

    The document pipeline can read image-only and scanned PDF pages before extracting the requested values.

[ HOW IT WORKS ]

4 steps from raw file to structured output.

  1. 1

    Send a PDF and schema

    POST pdf_file and schema_data to /v2/extract with your api-key header, add enable_citations when you need source coordinates, and capture the returned job ID.

  2. 2

    Extraction fills the schema

    The service locates a value for each requested field and calculates its confidence score.

  3. 3

    Poll for completion

    GET /extract/{job_id} until the status is completed or failed.

  4. 4

    Use values and citations

    Read extracted values from result and, when citations are enabled, use each field’s bbox and page to trace them to the PDF.

extract.py
1 import os, json, time, requests
2
3 BASE = "https://prod.visionapi.unsiloed.ai"
4 HEADERS = {"api-key": os.environ["UNSILOED_API_KEY"]}
5
6 schema = {
7 "type": "object",
8 "properties": {
9 "vendor": {"type": "string"},
10 "amount": {"type": "number"}
11 },
12 "required": ["vendor", "amount"],
13 "additionalProperties": False
14 }
15
16 with open("invoice.pdf", "rb") as file:
17 response = requests.post(
18 f"{BASE}/v2/extract", headers=HEADERS,
19 files={"pdf_file": file},
20 data={
21 "schema_data": json.dumps(schema),
22 "enable_citations": "true"
23 }
24 )
25 response.raise_for_status()
26 job_id = response.json()["job_id"]
27
28 for _ in range(60):
29 response = requests.get(
30 f"{BASE}/extract/{job_id}", headers=HEADERS)
31 response.raise_for_status()
32 job = response.json()
33 if job["status"] in ("completed", "review"): break
34 if job["status"] == "failed":
35 raise RuntimeError(job.get("error", "Extract failed"))
36 time.sleep(5)
37 else:
38 raise TimeoutError("Extract did not finish in 5 minutes")
39
40 print(job["result"])
[ BUILT FOR PRODUCTION ]

The same API from
prototype to scale.

Use the same submit-and-poll workflow from prototype through production. Page-based pricing starts with a free tier, with managed, VPC, on-premises, and air-gapped deployment options for larger workloads.

Read the docs
99.9%

uptime target on enterprise plans.

SOC 2GDPRVPC availableOn-premises availableAir-gapped available
[ THE PLATFORM ]

One API for the document pipeline.

Extract uses the same authentication and billing as every other capability. Combine it with Parse, Extract, Split, and Classify, or call it on its own.

[ FAQS ]

Extract
questions

  • Parse returns the full document as ordered Markdown and layout segments. Extract returns the fields defined in your JSON Schema, with a confidence score on each value and optional source citations.
  • Yes. The /v2/extract endpoint requires a valid JSON Schema with field types, properties, required fields, and any nested objects or arrays you need.
  • Yes. Define line items as an array of objects in the schema. Test long and irregular tables from your own workflow to establish appropriate validation and review rules.
  • Every field includes a confidence score. Enable citations to also receive page numbers and bounding boxes that point back to the source PDF.
  • Measure confidence on a representative validation set, then auto-accept values above your threshold and send the rest to review. Use stricter thresholds for high-risk fields such as totals, account numbers, and dates.
  • Pricing is based on pages processed, with a free tier and custom plans for higher-volume extraction and enterprise requirements.

See Unsiloed AI work on your own documents.

Tell us a little about your workflow and share a sample document. We’ll use it to show you a structured output during the call.

The accuracy, especially on tables, is meaningfully better than anything we tested. We evaluated over 15 solutions and Unsiloed was the only one that worked reliably.

Head of AI

Fortune 150 Bank, NY

Upload sample files you'd like us to run through Unsiloed. We'll use them to show you a sample structured output once we meet.