{ name: value } map and returns a filled PDF.
Fill is not a mode on POST /v1/render. There is no /v1/forms route — that path is 404. Use the fill paths below with the same bp_ key you already use to render.
Paths
Send
pdf (Base64 or a multipart file) or templateId — never both, never neither. Unknown, deleted, or another account’s id is 404.
Inspect
List fillable names and kinds before you write values.
Fill
Write appearances, optional flatten, named errors, and validate-fill.
Templates
Store a blank once, then fill by id. Account-owned, not key-owned.
MCP fill
inspect_form → validate_fill → fill_form for agents.Inspect, then fill (under five minutes)
The samebp_ key as render. This synthetic intake has two fields: givenName (text) and agree (checkbox). It is not a real-world form.
application/pdf with written appearances. Open intake-filled.pdf — the text already shows. Do not set /NeedAppearances.
Rules that stay true
- Same key. A
bp_key that can render can fill. Do not mint a fill key. - One unit. A successful
POST /v1/fillcosts 1 unit on the same allowance as render. Inspect, validate-fill, and the template library do not spend a unit. - Atomic values. One bad key fails the whole request. No silent drop.
falseis a value (checkbox Off), not an omit. - Never
/NeedAppearances. A template that already has the flag is rejected (need_appearances). The filled PDF never includes it. - REST streams.
POST /v1/filldoes not keep the output. MCPfill_formreturns a signed download link (24 hours unless you persist).