Updated Apr 27, 2026
REST · v1 · HTTP Basic auth

Turn documents into structured JSON.

A REST API that takes a PDF, image, or scan and returns the fields you asked for. Templates for repeat shapes. Webhooks for hands-off pipelines. Pay-per-job, no minimums.

What it does

Documents in. Validated JSON out.

DataDistillers takes anything you'd hand a person to read (invoices, receipts, contracts, IDs, forms) and returns the fields you defined. Confidence scores, validation rules, optional review flags. No OCR plumbing, no model wrangling.
Best for

Repeated extractions of the same document shape. Save a template once, run it against thousands of files, get back JSON that matches your database schema. For one-off extractions, pass an inline extraction_schema instead.

How it works

Five stages. One job.

Every extraction follows the same lifecycle. Submit returns a presigned upload URL. Your file goes straight to S3. You confirm the upload so the backend knows to start. The worker processes it. You either poll a status endpoint or receive a signed webhook.
  1. 1
    Stage 01 · Submit

    POST /extract with the filename, MIME type, size, and either a template_id or an inline extraction_schema. Returns a job_id, artifact_id, and a presigned upload_url valid for one hour.

  2. 2
    Stage 02 · Upload

    PUT the file bytes to the upload_url. The upload goes directly to S3; your bytes never traverse the API server.

  3. 3
    Stage 03 · Confirm

    POST /artifacts/{artifact_id}/confirm-upload. The backend does not watch S3 — this call is what flips the artifact to uploaded, queues the job, and dispatches the worker.

  4. 4
    Stage 04 · Process

    A worker pulls the file, runs the extraction pipeline against your template or schema, and writes the result. Billed by actual compute time, not by file size or page count.

  5. 5
    Stage 05 · Receive

    GET /job/{job_id} until status == success, or register a webhook to receive a signed extraction.completed push the moment the job finishes.

What's in the box

Built end-to-end.

Everything below is wired and shipping in v1.
  • /extract and /batch: single-file and up-to-50-file submissions
  • Templates with versioned schema definitions, clones, patches, and field-level validation
  • Inline extraction_schema for ad-hoc, one-shot field definitions
  • Signed webhooks with HMAC-SHA256, idempotency keys, retry logs, and 24h secret rotation
  • Lightweight status endpoint for high-frequency polling
  • Wallet + usage endpoints for live spend tracking
  • Retention policies from immediate to never, per-artifact
  • Cancel and rerun for in-flight or completed jobs
Authentication

HTTP Basic with API key + secret.

Every request carries an Authorization: Basic … header. The username is your API key, the password is its secret. Rotate either one without redeploying.
bash
curl https://api.datadistillers.com/api/v1/wallet \
  -u 'dk_live_…:sk_…'

See Authentication for key rotation, scoping, and the security model.

Esc
↑↓NavigateOpenEscClose