Skip to main content
POST /v1/inspect returns every fillable field plus skipped import names. Use those name values as keys on fill. Do not invent /T tokens. Not POST /v1/render. Does not accept values. Does not store the PDF. Does not write appearances. Does not spend a unit.

Send

JSON { "pdf": "<Base64>" } or { "templateId": "…" } — exactly one. Multipart pdf (file) or templateId works the same. Same x-api-key as render.
A copy-paste synthetic form is in the fill overview and the Quickstart. Unknown, deleted, or another account’s templateId is 404. Sending both pdf and templateId is 400. Extra keys such as values are 400.

What you get

Fields

Skipped

skipped[] is { name, reason }. Filling a skipped name is 400 skipped_field_name — no silent drop.

Warnings

warnings[] is always present. Empty when every fillable name has one widget.

No widgets

fields: [] and skipped: [] include reason: "no_widgets". That reason is omitted when fields or skipped is non-empty. If the PDF has no widgets, make it a form in studio first. Inspect is not a map editor.

Limits and rejects

Inspect is unmetered. It still sits on the same plan ratePerMin and concurrency limiters as fill — a burst is 429 rate_limited. It does not apply plan bodyBytes to live pdf bytes. Templates with no /AcroForm, /NeedAppearances, a password, XFA, or a document signature are rejected by name (no_acroform, need_appearances, encrypted_pdf, xfa_unsupported, signed_pdf). See Fill errors.
Persist the blank with POST /v1/templates if you want to inspect and fill by id later. Inspect itself does not store.