PAIM PAPYR
ES, EN, FR, DE, IT, PT, 繁中, NL, PL, CA, EU, GL, SV, DA, NB, FI, CS, SK, RO, HU, EL, TR, JA, KO
The PAPYR API
The same tools as the site, from your code: send a file over HTTP and get the result back. No storage: we process and delete, as always.
Closed beta, on purpose
The API opens gradually by design: per-account keys (rotatable and revocable), burst limits, a monthly quota and input limits. It's included in the Pro plan; if you'd like to try it or need volume, write to us and we'll set you up.
Request accessAuthentication
Every request carries your key in a header. The key is shown once at creation; keep it in a secrets manager. You can revoke it at any time.
Authorization: Bearer papyr_sk_…
Start in a minute
curl -X POST https://www.aim-papyr.ai/api/v1/pdf/merge \
-H "Authorization: Bearer papyr_sk_YOUR_KEY" \
-F "files=@report.pdf" -F "files=@annex.pdf" \
-o merged.pdf
Scan to searchable PDF bash
curl -X POST https://www.aim-papyr.ai/api/v1/pdf/ocr \
-H "Authorization: Bearer YOUR_KEY" \
-F "file=@factura.pdf" -F "lang=spa" \
-o factura-buscable.pdfExtract tables to CSV python
import requests
r = requests.post(
"https://www.aim-papyr.ai/api/v1/pdf/to-csv",
headers={"Authorization": "Bearer YOUR_KEY"},
files={"file": open("facturas.pdf", "rb")},
data={"sep": ";"}, timeout=120)
r.raise_for_status()
open("facturas.csv", "wb").write(r.content)
print(r.headers["X-Monthly-Used"], "/", r.headers["X-Monthly-Limit"])PDF to Word from the browser javascript
const fd = new FormData();
fd.append("file", archivo); // File o Blob
const r = await fetch("https://www.aim-papyr.ai/api/v1/pdf/to-word", {
method: "POST",
headers: { Authorization: "Bearer YOUR_KEY" },
body: fd,
});
if (!r.ok) throw new Error((await r.json()).detail);
const docx = await r.blob();
Endpoints (v1)
| GET | /api/v1/me | Validates your key; returns plan, usage and limits. |
| POST | /api/v1/convert/to-pdf | Office → PDF — file |
| POST | /api/v1/img/compress | Compress image — file + quality |
| POST | /api/v1/img/convert | Convert image — file + fmt, quality |
| POST | /api/v1/pdf/compress | Compress — file |
| POST | /api/v1/pdf/merge | Merge — files[] |
| POST | /api/v1/pdf/ocr | OCR — file + lang |
| POST | /api/v1/pdf/page-numbers | Page numbers — file + position, start |
| POST | /api/v1/pdf/protect | Protect — file + password |
| POST | /api/v1/pdf/rotate | Rotate — file + degrees |
| POST | /api/v1/pdf/split | Split — file + cada |
| POST | /api/v1/pdf/to-csv | PDF → CSV — file + sep |
| POST | /api/v1/pdf/to-images | PDF → images — file + dpi, fmt |
| POST | /api/v1/pdf/to-text | PDF → Text — file |
| POST | /api/v1/pdf/to-word | PDF → Word — file + lang |
| POST | /api/v1/pdf/unlock | Unlock — file + password |
| POST | /api/v1/pdf/watermark | Watermark — file + text |
Limits — clear, and in the response
- Burst: 20 requests/minute, sustained: 300/hour per key.
- Monthly quota per account by plan (Pro: 1,000 calls/month). Every response includes X-Monthly-Used and X-Monthly-Limit.
- Files up to 50 MB. Same content limits as the site.
- Honest errors: 401 invalid key, 403 no plan, 413 file too large, 429 limit reached (with Retry-After).
Your data, as always
Processed on EU servers for your operation only, and discarded with the response. The API relaxes nothing in the site's privacy policy.