PDF Form Filling API

Fill any PDF form from your own code with one HTTP call. Send the PDF and your data, get the completed document back. Works with interactive and flat PDFs, any language, keys issued in your account.

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 one auto-fill from your plan, nothing to set up separately

How It Works

  1. Create a key at fillwise.ai/account, section API keys. It is shown once, so copy it right away.
  2. Send the request. Base64-encode the PDF, put the source data in data, add the key as Authorization: Bearer <key>.
  3. Save the result. The response carries the completed PDF as base64 plus filled_count and mode. 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.

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

Common Questions

Do I need a separate plan for the API?

No. API calls spend the same auto-fill balance as the Chrome extension and the account page. One successful fill costs one auto-fill, whichever way you run it.

Where do I get a key?

In your account at fillwise.ai/account, section API keys. Create a key, copy it once, use it in the Authorization header. You can keep up to five active keys and revoke any of them at any time.

Does it fill PDFs that have no form fields?

Yes. A PDF with real fields is filled through those fields. A flat PDF with only a text layer gets the values drawn at the positions of its labels and lines. The response tells you which mode was used.

What about scanned PDFs?

Not through the API. A scan has no text layer, so there is nothing to anchor the values to. The request is rejected with a 422 instead of returning a half-filled document.

Can the API fill web forms?

No. The API is for PDF documents. Web forms are filled by the Chrome extension directly on the page.

Try it on your next form

Install the FillWise Chrome extension and fill your first form in under a minute.

Get Chrome extension