Overview
The same engine that fills PDFs in the FillWise extension and in your account is available as an HTTP endpoint. You send a PDF and the source data, FillWise matches the data to the form and returns the completed PDF. No template to build, no field map to maintain: the first form works the same as the hundredth.
It is built for the boring part of document pipelines. A CRM record that has to become a visa application. A client intake form that has to become an insurance PDF. A batch of onboarding packets that all take the same twelve values. Instead of hand-mapping every field name, you pass the data as plain text and let the engine read the form.
Key Capabilities
| Capability | What it means for you |
|---|---|
| One endpoint | POST /api/v1/pdf/fill with the PDF and your data, the filled PDF comes back in the same response |
| Any input format | Plain text in any language, a CRM export, an email, or up to four attached documents the AI reads (photos, scans, PDFs) |
| Interactive and flat PDFs | Real form fields are filled through the fields. Flat forms get values drawn at the label positions. The response says which |
| Page selection | Fill only pages 1 to 3 of a long packet with the pages parameter |
| Keys in your account | Create, name and revoke keys yourself. Up to five active keys per account |
| Same balance | Every successful fill spends auto-fills from your plan, one per started 5 pages with fields, nothing to set up separately |
How It Works
- Create a key at fillwise.ai/account, section API keys. It is shown once, so copy it right away.
- Send the request. Base64-encode the PDF, put the source data in
data, add the key asAuthorization: Bearer <key>. - Save the result. The response carries the completed PDF as base64 plus
filled_countandmode. Decode and store it.
curl -sS https://fillwise.ai/api/v1/pdf/fill \
-H "Authorization: Bearer $FILLWISE_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"pdf\": \"$(base64 -w0 application.pdf)\",
\"data\": \"Maria Petrova, born 14.03.1992 in Riga, Latvian, passport LV4482913 valid until 05.02.2031\"
}"
A 200 response looks like this:
{
"success": true,
"filled_count": 26,
"mode": "acroform",
"pdf": "<base64 of the filled PDF>"
}
Full field reference, error codes and Python and Node examples are in the PDF form API guide. To call the same engine from Claude or Cursor without writing code, use the MCP server.
Use Cases
| Who | What they automate |
|---|---|
| Travel and visa agencies | Applicant data from the booking system into embassy and visa center PDFs |
| Insurance and finance | Client records into policy, claim and KYC forms |
| HR and staffing | Candidate details into onboarding and government packets |
| Legal | Intake data into court, immigration and compliance forms |
| Internal tools | Any workflow where the same data has to land in a PDF nobody wants to retype |
Limits and Honest Gaps
- PDF up to 14 MB, source text up to 60 000 characters, attachments up to 5 MB each and four per request.
- 20 requests per minute per account. Bigger batches: space them out or ask us.
- Scanned PDFs without a text layer are rejected with
422. Forms that only open in Adobe Reader (dynamic XFA) are rejected with422 XFA_UNSUPPORTED. - Review the output before you send it anywhere, especially when
modeisflat. The engine places values by reading the form, it does not know your business rules.