SimplyFill.

Quickstart

Make your first filled PDF in five minutes.

5-minute quickstart

This guide gets you from zero to first filled PDF in under five minutes. No credit card required.

Step 1: Get an API key

Sign up at simplyfill.app and grab your API key from the dashboard. Your key has wide permissions — keep it secure.

export SIMPLYFILL_API_KEY="sk_test_..."

Step 2: Upload a template

Upload any fillable PDF. We'll extract the field names automatically.

curl
curl -X POST https://api.simplyfill.app/v1/templates/upload \
  -H "Authorization: Bearer $SIMPLYFILL_API_KEY" \
  -F "file=@contract.pdf"

Prefer your language's SDK? Same call:

curl -X POST https://api.simplyfill.app/v1/templates/upload \
  -H "Authorization: Bearer $SIMPLYFILL_API_KEY" \
  -F "file=@contract.pdf"
import { SimplyFill } from '@simplyfill/node'
import fs from 'node:fs'

const client = new SimplyFill({ apiKey: process.env.SIMPLYFILL_API_KEY })
const template = await client.templates.upload({
  file: fs.createReadStream('contract.pdf')
})
console.log(template.id) // Use this for generation
from simplyfill import SimplyFill
import os

client = SimplyFill(api_key=os.getenv("SIMPLYFILL_API_KEY"))
template = client.templates.upload(file=open('contract.pdf', 'rb'))
print(template.id)  # Use this for generation

Save the returned template.id — you'll use it for generation.

Step 3: Map your fields

Check what fields the PDF expects:

curl https://api.simplyfill.app/v1/templates/$TEMPLATE_ID/fields \
  -H "Authorization: Bearer $SIMPLYFILL_API_KEY"
const fields = await client.templates.getFields(template.id)
console.log(fields) // ['first_name', 'last_name', 'email', ...]
fields = client.templates.get_fields(template.id)
print(fields)  # ['first_name', 'last_name', 'email', ...]

Field names come from the PDF. Use them directly or create aliases that match your domain.

Step 4: Generate your first PDF

Send data matching the PDF fields:

curl -X POST https://api.simplyfill.app/v1/generate \
  -H "Authorization: Bearer $SIMPLYFILL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "$TEMPLATE_ID",
    "data": {
      "first_name": "Ada",
      "last_name": "Lovelace",
      "email": "ada@example.com"
    }
  }'
const result = await client.generate({
  template: template.id,
  data: {
    first_name: 'Ada',
    last_name: 'Lovelace',
    email: 'ada@example.com'
  }
})
console.log(result.url) // Signed URL to download filled PDF
result = client.generate(
    template=template.id,
    data={
        "first_name": "Ada",
        "last_name": "Lovelace",
        "email": "ada@example.com"
    }
)
print(result.url)  # Signed URL to download filled PDF

Download the PDF from the returned URL. That's it — one API call filled your document.

Next steps

On this page