How Emboss works
Emboss takes a flat PDF and gives you a filled one. Under the hood it runs a short pipeline:
- Detect: Emboss reads each page of your PDF and finds the fields: their labels, types, and positions.
- Contract: those fields become a structured JSON contract, the map of everything on the form. See The contract shape.
- Fill: you supply values and Emboss writes them into the right fields, either from data you already have or from documents you upload.
- Render: Emboss produces the finished, filled PDF for download.
It's asynchronous
Detection isn't instant, so the API is asynchronous. When you create a form you
get back 202 Accepted with a status of processing:
{ "form_id": "6c47f7f5-f921-4698-910f-95dd7d81310b", "status": "processing" }
Detection then runs in the background. You poll GET /forms/{id} until the
status is ready (or failed): see Tracking jobs.
Two ways to fill
Once a form is ready, fill it whichever way fits your data:
- From structured data you already have: map your values onto the contract's fields directly. See Fill from your data.
- From documents: hand Emboss supporting files and let it infer the values. See Fill from context docs.
Both paths work off the same contract, so it's worth a look at the contract shape before you fill.
Adobe LiveCycle (XFA) forms
Some government forms are built with Adobe LiveCycle Designer; Emboss reads their XML template directly instead of running detection, as described in XFA forms. A form whose layout flows or repeats rows is accepted but has nothing to fill: it ends ready with no fields and the warning code xfa_dynamic_form, and its creation is still charged. Open it in Acrobat or Adobe Reader, print it to PDF, and upload that copy instead.