PDF одним POST-запросом
Полный референс на английском — /docs/, спецификация — OpenAPI 3.1. Ниже — короткая версия на русском.
Быстрый старт
Создайте бесплатный аккаунт, подтвердите email — ключ появится в кабинете. Затем:
curl -X POST https://pdfgeny.com/api/v1/render \
-H "Authorization: Bearer $PDFGENY_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<h1>Счёт № 14</h1>"}' --output invoice.pdfPOST /api/v1/render
Ровно одно из полей: html (до 2 МБ), url (публичный http(s)) или template + data. Ответ — сам PDF, либо JSON со ссылкой при "response":"json".
| Поле | По умолчанию | Описание |
|---|---|---|
format | A4 | A3, A4, A5, Letter, Legal, Tabloid |
landscape | false | альбомная ориентация |
margin | 12mm | одно значение или объект top/right/bottom/left |
header_html, footer_html | — | колонтитулы; и подставляются |
wait_for | — | CSS-селектор или миллисекунды (до 15000) — для графиков |
engine | chromium | weasy — WeasyPrint для табличных документов |
pdfa | false | конвертация в PDF/A-2b |
store, response | false, binary | сохранить на 7 дней и вернуть JSON с подписанной ссылкой |
Асинхронно и пакетами
POST /api/v1/jobs — то же тело плюс webhook_url; ответ 202 с id, статус — GET /api/v1/jobs/{id}. POST /api/v1/batch — до 100 документов за раз, прогресс — GET /api/v1/batch/{id}. Вебхук подписан заголовком X-PDFGeny-Signature: sha256=HMAC(secret, body); секрет — в кабинете.
Python
import requests
r = requests.post("https://pdfgeny.com/api/v1/render",
headers={"Authorization": f"Bearer {KEY}"},
json={"template": "invoice", "data": {"client": "ООО Ромашка", "total": "12 400"}}, timeout=60)
open("invoice.pdf", "wb").write(r.content)Ошибки и лимиты
Единый формат {"error":{"code":"…","message":"…"}}. Коды: missing_api_key, invalid_api_key, invalid_input, payload_too_large, quota_exceeded, rate_limited, too_many_concurrent, render_failed. Лимиты: Free 1 запрос/с и 1 параллельный рендер; Starter 5 и 3; Growth 10 и 5; Scale 20 и 10.