Pricing & limits¶
Free to start — 250 PDFs/month, no card. Upgrade in the portal when you need more.
| Plan | Price | PDFs / month | Rate limit | Stored templates |
|---|---|---|---|---|
| Free | $0 | 250 | 30 / min | — |
| Standard | $5 / mo | 4,000 | 90 / min | — |
| Pro | $15 / mo | 15,000 | 120 / min | ✅ |
Manage your plan at app.kikidoc.dev → Settings. Billing is handled by Lemon Squeezy (Merchant of Record) — VAT/tax included, and you get a receipt.
What counts as one unit¶
Every successful render is one unit: a PDF (/pdf/v1/html, /template, /url, /async) or a
screenshot (/pdf/v1/screenshot). Failed renders and rejected requests (401/403/429) are not
counted — you're only metered on success.
Which endpoints each plan can use¶
| Endpoint | Free | Standard | Pro |
|---|---|---|---|
POST /pdf/v1/html |
✅ | ✅ | ✅ |
POST /pdf/v1/url |
✅ | ✅ | ✅ |
POST /pdf/v1/screenshot |
✅ | ✅ | ✅ |
POST /pdf/v1/async |
✅ | ✅ | ✅ |
POST /pdf/v1/template (stored templates) |
— | — | ✅ |
GET /pdf/v1/templates |
— | — | ✅ |
Limits, explained¶
- Monthly quota — the PDFs/month for your plan. Exceed it →
429until the next cycle (or upgrade). - Rate limit — a per-minute request cap (separate from the monthly quota). Burst past it →
429with aRetry-Afterheader; slow down and retry.
Status codes¶
| Code | Meaning |
|---|---|
200 |
Success — the PDF/screenshot bytes, or a JSON signed-URL response |
202 |
Async job accepted (/pdf/v1/async) |
400 |
Target URL blocked by the SSRF guard (/pdf/v1/url, /pdf/v1/screenshot) |
401 |
Missing or invalid API key |
403 |
Your plan can't use this endpoint (e.g. stored templates are Pro) |
404 |
Not found — a job that isn't yours, or an unknown template name |
422 |
Invalid request body (failed validation — e.g. screenshot with neither/both html and url) |
429 |
Monthly quota or per-minute rate limit reached |
500 |
Render failed (not metered) |
503 |
Signed-URL delivery (delivery=url) requested but storage is unavailable |