Airpdf 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 airpdf.app/auth/register-tenant, choose a workspace code (lowercase, e.g. acme), confirm by email.

You land on https://airpdf.app/<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://airpdf.app/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.app — 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.