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 generationfrom 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 generationSave 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 PDFresult = client.generate(
template=template.id,
data={
"first_name": "Ada",
"last_name": "Lovelace",
"email": "ada@example.com"
}
)
print(result.url) # Signed URL to download filled PDFDownload the PDF from the returned URL. That's it — one API call filled your document.
Next steps
- Authentication deep dive — Key rotation and security
- Detailed walkthrough — Templates, mappings, and field aliases
- API reference — All generation options