API Reference
Integrate SynthPDF into your workflows. All endpoints accept multipart form data and return files or JSON.
API Key — Ultra Max only
Programmatic API access requires an Ultra Max plan. Generate a key to authenticate requests via the X-API-Key header.
Base URL
https://synthpdf.app/api/v1
Authentication
Use X-API-Key for machine-to-machine requests (Ultra Max). Browser sessions use Authorization: Bearer automatically.
# Bearer token (from /auth/signin) curl -H "Authorization: Bearer <access_token>" ... # API key (Ultra Max plans) curl -H "X-API-Key: spdf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ...
PDF Tools
/compressCompress a PDF. Form fields: file (PDF), quality (low|medium|high).
/mergeMerge multiple PDFs. Form field: files[] (multiple PDFs).
/splitSplit a PDF by page ranges. Form fields: file, pages.
/pdf-to-wordConvert PDF to .docx.
/pdf-to-imageConvert PDF pages to images. Form fields: file, format (png|jpg), dpi.
/protectPassword-protect a PDF. Form fields: file, password.
/unlockRemove PDF password. Form fields: file, password.
/repairRepair a corrupted PDF.
/grayscaleConvert PDF to greyscale.
/redactRedact text from PDF. Form fields: file, phrases (comma-separated).
AI Tools(Pro+ plan)
/ai/summarizeAI-summarize a PDF. Form fields: file, language.
/ai/translateAI-translate a PDF. Form fields: file, target_language.
/ai/chatChat with a PDF. Form fields: file, message, history (JSON).
/ai/resume/checkATS resume check. Form field: file.
Account
/auth/signinSign in. Body: { email, password }. Returns access_token + refresh_token.
/auth/signupCreate account. Body: { email, password }.
/auth/refreshRefresh access token. Body: { refresh_token }.
/auth/meGet current user profile.
/auth/api-keyRetrieve your API key.
/auth/api-keyGenerate a new API key.
/auth/api-keyRevoke your API key.
Example: Compress a PDF
Response headers include X-Original-Size and X-Compressed-Size (bytes).
curl -X POST https://synthpdf.app/api/v1/compress \ -H "X-API-Key: YOUR_API_KEY" \ -F "file=@document.pdf" \ -F "quality=medium" \ --output compressed.pdf
Example: AI Summarize
Returns { "summary": "..." }. Consumes 1 AI credit.
curl -X POST https://synthpdf.app/api/v1/ai/summarize \ -H "X-API-Key: YOUR_API_KEY" \ -F "file=@document.pdf" \ -F "language=English"
Python Example
Uses httpx. Works with requests too.
import httpx
API_KEY = "spdf_your_key_here"
BASE = "https://synthpdf.app/api/v1"
with open("document.pdf", "rb") as f:
r = httpx.post(
f"{BASE}/compress",
headers={"X-API-Key": API_KEY},
files={"file": ("document.pdf", f, "application/pdf")},
data={"quality": "medium"},
)
r.raise_for_status()
with open("compressed.pdf", "wb") as out:
out.write(r.content)
print("Original:", r.headers["X-Original-Size"], "bytes")
print("Compressed:", r.headers["X-Compressed-Size"], "bytes")Rate Limits
| Plan | Daily ops | Monthly AI credits | Max file size |
|---|---|---|---|
| Free | 5 | — | 10 MB |
| Pro | 75 | 75 | 50 MB |
| Max | 300 | 300 | 200 MB |
| Ultra Max | Unlimited | Unlimited | 500 MB |
Rate limit errors return HTTP 429 with a JSON body describing the limit and reset time.
Error codes
| HTTP | Code | Meaning |
|---|---|---|
| 400 | — | Bad request — invalid file type or missing field |
| 401 | — | Missing or expired auth token |
| 403 | PLAN_REQUIRED | Feature requires a higher plan |
| 413 | — | File exceeds plan limit |
| 429 | DAILY_LIMIT | Daily operation limit reached |
| 429 | MONTHLY_LIMIT | Monthly AI credit limit reached |
| 502 | — | Backend unavailable |