Upload a PDF via REST API or dashboard. Get back structured text, page count, and metadata โ or an editable PowerPoint deck that imports straight into Google Slides.
pdf-parse extracts text synchronously in memory โ no temp files, no disk I/O for the PDF.
Multi-tenant isolation. Each key maps to a tenant โ jobs are never shared across tenants.
Jobs stay queryable after extraction. Archive them when done; unarchive or delete any time.
Upload PDFs, view extracted text, convert to slides, archive and delete jobs โ all from a browser UI.
Convert any PDF into an editable PowerPoint deck โ brochure spreads split into per-panel slides, images cropped to fit. Imports directly into Google Slides.
All /api/* endpoints and the dashboard require authentication.
Pass your key in the x-api-key header or as the ?apiKey= query param.
curl -H "x-api-key: pk_your_key_here" https://pdf.vinficient.com/api/jobs
cl_session)Set by the /login page. Used by the dashboard. Expires after 7 days.
Pass x-admin-key: <ADMIN_KEY> to manage API keys via /admin/keys. Set via ADMIN_KEY env var (default: admin-dev-key).
Multipart form upload. Returns a job object. Text is extracted synchronously.
curl -X POST https://pdf.vinficient.com/api/jobs \ -H "x-api-key: pk_your_key" \ -F "[email protected]" # Response { "id": "abc123", "filename": "document.pdf", "status": "done", "pages": 3, "textLength": 4821, "size": 120456, "archived": false, "createdAt": 1712000000000 }
Stateless โ no job record is created. Accepts a multipart file OR a JSON {"url"} body. Returns the .pptx binary; imports directly into Google Slides. Book-format PDFs (cover + spreads/gatefolds) are split into one slide per panel; images are cropped to the slide canvas. Large PDFs can take 1โ2 minutes.
curl -X POST https://pdf.vinficient.com/api/convert/pptx \ -H "x-api-key: pk_your_key" \ -F "[email protected]" \ -o brochure.pptx # Response headers X-Pdf-Pages: 13 # pages in the source PDF X-Pptx-Slides: 28 # slides emitted (book mode splits spreads into panels) X-Pptx-Text-Boxes: 735 # editable text boxes placed X-Pptx-Images: 132 # images embedded X-Pptx-Skipped-Images: 0 # images that could not be decoded
Returns an array of job summaries (no text). Sorted newest first.
curl https://pdf.vinficient.com/api/jobs \ -H "x-api-key: pk_your_key"
curl https://pdf.vinficient.com/api/jobs/archived \ -H "x-api-key: pk_your_key"
curl https://pdf.vinficient.com/api/jobs/abc123 \ -H "x-api-key: pk_your_key" # Response includes full "text" field
curl -X PATCH https://pdf.vinficient.com/api/jobs/abc123/archive \
-H "x-api-key: pk_your_key" \
-H "Content-Type: application/json" \
-d '{"archived": true}'
curl -X DELETE https://pdf.vinficient.com/api/jobs/abc123 \ -H "x-api-key: pk_your_key"
curl -X POST https://pdf.vinficient.com/admin/keys \
-H "x-admin-key: admin-dev-key" \
-H "Content-Type: application/json" \
-d '{"tenant": "acme", "label": "Acme Corp"}'
# Response: { "key": "pk_...", "tenant": "acme", "label": "Acme Corp" }
curl https://pdf.vinficient.com/admin/keys \ -H "x-admin-key: admin-dev-key"
curl -X DELETE https://pdf.vinficient.com/admin/keys/pk_abc123 \ -H "x-admin-key: admin-dev-key"