Quickstart

Convert your first flat PDF in two minutes.

1. Get an API key

Create a free account, open the dashboard, and create a key. You'll see it once — copy it. Keys look like sk_live_… (or sk_test_… for testing).

2. Convert a PDF

Send the file as multipart form data to POST /v1/convert.

curl -X POST https://api.createafillablepdf.com/v1/convert \
  -H "Authorization: Bearer sk_live_•••" \
  -F "file=@applicant.pdf" \
  -F "detect=fields"
// Node 18+ (official npm package coming soon — this uses the built-in fetch)
import { readFileSync } from "node:fs";

const form = new FormData();
form.append("file", new Blob([readFileSync("applicant.pdf")], { type: "application/pdf" }), "applicant.pdf");
form.append("detect", "fields");

const res = await fetch("https://api.createafillablepdf.com/v1/convert", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.CAFP_KEY}` },
  body: form,
});
const result = await res.json();
console.log(result.fields, result.document_url);
# pip install requests (official PyPI package coming soon)
import os, requests

with open("applicant.pdf", "rb") as f:
    res = requests.post(
        "https://api.createafillablepdf.com/v1/convert",
        headers={"Authorization": f"Bearer {os.environ['CAFP_KEY']}"},
        files={"file": ("applicant.pdf", f, "application/pdf")},
        data={"detect": "fields"},
    )
result = res.json()
print(result["fields"], result["document_url"])

3. Read the response

{
  "status": "converted",
  "document_url": "https://cdn.createafillablepdf.com/…/out.pdf",
  "conversion_id": "c_123",
  "fields": 23,
  "confidence": 0.997,
  "ms": 880,
  "pages": 1,
  "schema": [
    { "name": "applicant_legal_name", "type": "text", "page": 0 },
    { "name": "is_us_citizen", "type": "checkbox", "page": 0 }
  ]
}

Download the fillable PDF from document_url (a signed link, valid 24 hours), or store the schema and fill it with values later.