POST /v1/templates stores a blank AcroForm once and returns { id, title, fields, skipped }. The stored object is the template, not a filled output.
Not POST /v1/render. Not /v1/forms. Not a Markdown sandwich-document kit. Does not spend a unit.
Then send { "templateId": "<id>", "values": { … } } to inspect, validate-fill, or fill without resending the PDF.
Store
JSON{ "pdf": "<Base64>", "title": "Intake card" } or multipart pdf plus optional title. Extra keys (values, templateId) are rejected. Same x-api-key as render.
title is the body field, or the upload filename if omitted. JSON without a filename must send title. An empty multipart File.name is omitted — same 400 missing_property #/title as JSON without title.
/AcroForm, /NeedAppearances, a password, XFA, or a document signature — same codes as inspect and fill.
Receive
No
warnings. No reason. No fill values.
Get, list, update, delete, download
downloadUrl is GET /v1/templates/{id}/download on this host, same x-api-key. Schema-only GET is not enough if you need the bytes.
Foreign or unknown id: 404. Store outage: 503 service_unavailable — never a silent drop.
Ownership
Templates belong to the account, not the API key. Anybp_ key (or OAuth principal) on that account can list, get, update, delete, download, and fill the same id. Rotating a key does not orphan the library. Another account’s id is 404.
Caps
Object capgetMaxTemplates: 10 / 50 / 250 (Free / Pro / Business). Independent of kept MCP PDFs (10 / 100 / 1,000). Hitting one does not block the other. A full template cap is 409 template_limit with maxTemplates and current.
Upload cap maxTemplateBytes: 5 / 10 / 20 MiB. Oversize store or replace is 413 payload_too_large and names maxTemplateBytes. Not render bodyBytes. Enterprise can raise this byte cap.
Fill-by-bytes still uses render bodyBytes (128 KiB / 2 MiB / 5 MiB). Fill-by-id does not re-check the stored PDF against bodyBytes. On Free, store the blank, then fill by id.
See Pricing.
Fill by id
pdf and templateId is 400.
Fill values are never stored on the template row. Account erasure deletes stored templates. See Zero Retention.
store_template, list_templates, get_template, update_template, and delete_template proxy this library. list_pdfs stays filled and generated outputs — it never mixes templates. See MCP fill.