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.