docs

Quickstart — first PDF in 60 seconds

Render a real PDF without writing a single line of template code. No credit card.

✦ Speedrun: average new user reaches their first 200 OK in 47 seconds.


① Sign up — ~20s

Go to app.airpdf.io/auth/register-tenant, choose a workspace code (lowercase, e.g. acme), confirm by email.

You land on https://app.airpdf.io/<code>/app.

② Pick a starter template — ~10s

In the backoffice → Templates → ✦ Browse starters → click Use this template on Invoice (or any other).

We bootstrap a fully-working template with example variables. Editable later — but you don’t need to touch it now.

Skip this step if you’d rather build from scratch — + New blank works too. The starter just gives you a sane default in 1 click.

③ Generate a test API key — ~10s

Backoffice → API Keys → + New key → choose test environment → copy the airpdf_test_… token (shown once).

Test renders are free, unlimited, and never count against your quota — perfect for cutover.

④ Render your first PDF — ~10s

export airpdf_KEY=airpdf_test_...
export airpdf_TEMPLATE=invoice-xxxxxx   # the slug shown after creation

curl -X POST https://api.airpdf.io/api/v1/render \
  -H "Authorization: Bearer $airpdf_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "'"$airpdf_TEMPLATE"'",
    "data": {
      "customer": { "name": "Acme Inc.", "address": "123 Market St", "vat": "IT01234567890" },
      "invoice":  { "number": "2026-0042", "date": "2026-05-07" },
      "items":    [{ "label": "Pro plan", "qty": 1, "amount": 99 }],
      "totals":   { "amount": "$99.00" }
    }
  }' \
  -o invoice.pdf

open invoice.pdf

Expected: 200 OK · application/pdf · ~5 KB · <500 ms. You’re done.


What you just did

  1. Created a multi-tenant workspace.
  2. Bootstrapped a real template from a curated starter.
  3. Issued a test API key.
  4. Rendered a PDF via REST in production.

Total time: about one minute.

Same call, in your language

// Node.js
import Airpdf from '@airpdf/sdk';
import { writeFile } from 'node:fs/promises';

const client = new Airpdf({ apiKey: process.env.AIRPDF_API_KEY! });
const result = await client.render({
  template: 'invoice-xxxxxx',
  data: { customer: { name: 'Acme Inc.' }, items: [{ label: 'Pro plan', amount: 99 }] },
});
if (result.kind === 'binary') await writeFile('invoice.pdf', result.pdf);
# Python
from airpdf import Airpdf
import os

client = Airpdf(api_key=os.environ["AIRPDF_API_KEY"])
pdf = client.render(
    template="invoice-xxxxxx",
    data={"customer": {"name": "Acme Inc."}, "items": [{"label": "Pro plan", "amount": 99}]},
)
open("invoice.pdf", "wb").write(pdf)

Ruby · Go · Elixir · PHP · +8 more


Next steps

Stuck?

Email hello@airpdf.io — we reply same day. Or jump in our docs.

Welcome to Airpdf 🚀

Spotted a typo or stale claim? Open an issue or ping us in the workspace — docs are versioned with the product.

Cookie settings

Choose what you consent to. Technical cookies are always on, because the site doesn't work without them. Details in the Cookie Policy.

TechnicalRemember your cookie choice and protect the site from abuse. Always on.Always on