changelog schema registry is now GA

Documents in.
Typed JSON out.

Strata is an extraction API. POST a PDF, an image, or an email; get back JSON that matches a schema you define — validated, versioned in a registry, delivered by webhook.

$npm install @strata/sdkCOPY
curl node python api.strata.dev
# invoice.pdf → invoice.v2 schema
curl https://api.strata.dev/v1/extract \
  -H "Authorization: Bearer $STRATA_API_KEY" \
  -F "file=@invoice_0231.pdf" \
  -F "schema=invoice.v2"
200 OK · content-type: application/json
{
  "id": "ext_9f2c81d4",
  "status": "complete",
  "data": {
    "vendor": "Nordwind Logistics GmbH",
    "invoice_number": "RE-2026-0418",
    "total": { "amount": 1284.50, "currency": "EUR" }
  },
  "confidence": 0.982
}

Documentation is the interface.

The panel below is the live reference for POST /v1/extract, not a picture of it. If it is enough to make your first call, it is doing its job.

docs.strata.dev / reference / extract Search⌘K

Extract a document

POST/v1/extract

Runs a document against a schema from your registry. Large files return 202 and a job; small ones return synchronously.

filemultipartREQUIRED

The document to extract. PDF, PNG, TIFF, or EML, up to 50 MB.

schemastringREQUIRED

A schema ID with optional version pin — invoice.v2. Unpinned IDs resolve to the latest published version.

Idempotency-Keyheader

Retries with the same key return the original result for 24 hours.

REQUEST
curl https://api.strata.dev/v1/extract \
  -H "Authorization: Bearer $KEY" \
  -F "file=@packing_list.pdf" \
  -F "schema=packing_list.v1"
RESPONSE · 202 ACCEPTED
{
  "id": "ext_c07e22a9",
  "status": "processing",
  "job_url": "/v1/jobs/job_51adf0"
}

Boring where it counts.

idempotency

Every mutating request takes an idempotency key — retries free, duplicates impossible.

Idempotency-Key: 8f3c-a91d
versioning

Schemas and the API version separately. Pin both; upgrade each on your own schedule.

schema=invoice.v2
webhooks

Signed events, automatic retries with backoff, and 30-day replay when you drop one.

extraction.completed
errors

Machine-readable codes with documented remediation — a 422 names the field that failed.

422 schema_mismatch

Your first extraction is one request away.

Get an API key
$ curl api.strata.dev/v1/extract \
   -F "file=@anything.pdf" -F "schema=yours.v1"