Fill a form from source documents
Authentication
Bearer authentication of the form Bearer <token>, where token is your auth token.
Query parameters
Request
The blank form to fill, given one of two ways.
{ "id": "…" }— a saved template fromPOST /v1/templates, or any file you own.{ "url": "…", "name"?: "…" }— fetched for this run only and purged with it.
Free-form guidance for the drafting pass — which source document wins a conflict, how to format dates, which fields to leave blank.
Whether a person checks the drafted values before the form is produced.
none (the default) fills and finishes. required parks the run at needs_input with one task per document — read it at GET /v1/runs/{id}/task, submit corrections to POST /v1/runs/{id}/task, or send someone to the ready-made page at tasks[].url.
What the produced PDF looks like. flattened (the default) bakes the values in so nothing can be changed; editable leaves the form fillable.
Arbitrary JSON you attach to the run and get back on every read of it.
Use it to carry your own identifiers — an order number, a customer id — so a webhook or a polled run reconciles without a lookup table. Capped at 10 KB serialized.
Where to deliver this run’s events, given one of two ways.
{ "url": "…" }— a one-off https endpoint for this run only.{ "id": "whe_…" }— a saved endpoint fromPOST /v1/webhooks. Runs hold the reference, so pausing or re-pointing that endpoint applies to this run too.
Deliveries are at-least-once and signed — dedupe on eventId and verify against GET /v1/webhooks/jwks.json.
How long, in seconds, to keep this run and its files before purging them automatically.
Defaults to 24 hours; the maximum is 604800 (7 days). The deadline comes back as expiresAt on every read of the run. Call POST /v1/runs/{id}/keep before then to clear the TTL and move the results into a space permanently.
E-signature runs are exempt — an envelope waits for its signers however long that takes.
Response
Where the run is in its life.
The last four are terminal.
Why the run failed. Present whenever status is failed, and only then.
code is the stable, snake_case reason (input_unavailable, parse_failed, …); message is the human-readable detail. Per-file and per-step failures are also reported in files[].error and, for a pipeline, steps[].error.
The human steps currently blocking the run. Present while status is needs_input.
Each task has a url — a ready-made page you can send a person to — or you can drive it yourself through GET and POST /v1/runs/{id}/task. E-signature runs never carry tasks[]: their signing links are signer-held secrets, so use envelopeUrl instead.
The completed form. Present once status is processed.
file is the filled PDF with a signed download link; fields reports the values that were written into it, keyed by field name.