Any CV in. Clean structured data out.
Upload a resume — polished PDF, old Word file, plain text, or a photo of a printed CV — and receive a complete candidate profile as structured JSON: contact details, experience, education, projects, certificates, skills, languages and more.
One upload, one complete profile
POST a file to the parse endpoint and get back a structured candidate object. Field names are stable and camelCased, so you can map them straight onto your ATS or job board database.
- ✓ Versioned at /api/v1
- ✓ Bearer token auth
- ✓ Multipart file upload — no base64 gymnastics
- ✓ Consistent error shapes (401, 402, 413, 422, 429, 502)
POST /api/v1/parse-resume
Authorization: Bearer ...
Content-Type: multipart/form-data
file: jane-doe-cv.pdf
→ {
"fullName": "Jane Doe",
"email": "jane@doe.dev",
"jobTitle": "Senior PHP Engineer",
"experience": [ ... ],
"education": [ ... ],
"skills": ["Redis", ...]
}
Designed, scanned, or ancient — it parses
Text-based files are extracted locally and parsed as text. Scanned PDFs and images go through our vision-capable AI engine instead, so a photographed CV parses just as well as a typed one. The extraction path is chosen automatically per file.
- ✓ PDF, DOC, DOCX, TXT
- ✓ JPG, PNG, WebP, GIF images
- ✓ Automatic fallback to vision for scanned PDFs
- ✓ Configurable file size limit
resume.pdf → text path (1 credits) resume.docx → text path (1 credits) scan.pdf → vision path (1 credits) photo.jpg → vision path (1 credits) Response meta includes the path used and the exact credits consumed.
Deep extraction, not just name and email
The parser returns the complete work history word-for-word, every project it can find anywhere in the resume, plus auto-derived expertise areas and language proficiencies rated 1-5. Nothing is invented: fields missing from the CV come back empty.
- ✓ Experience, education, projects, certificates, awards
- ✓ Auto-detected expertise areas with 1-5 proficiency
- ✓ Spoken languages separated from technical skills
- ✓ Dates normalised to YYYY-MM
{
"experience": [{ company, title, dates, description }],
"education": [{ institution, degree, field, grade }],
"projects": [{ name, role, url, description }],
"certificates":[{ name, issuer, credentialId }],
"expertise": [{ "name": "Backend Development",
"level": 5 }],
"languages": [{ "name": "English", "level": 4 }]
}
Sync for one CV, async for the whole inbox
Parse a single resume in real time, or dispatch batches to the async endpoint and poll for results — ideal for bulk-importing an existing applicant database. Failed parses are refunded automatically.
- ✓ POST /parse-resume for real-time parsing
- ✓ POST /parse-resume/async for batches
- ✓ GET /jobs/{id} to poll status and results
- ✓ Uploaded files are deleted right after processing
POST /api/v1/parse-resume/async
→ 202 { "job_id": "f81a...", "status": "queued" }
GET /api/v1/jobs/f81a...
→ { "status": "completed",
"result": { "data": { ...parsed resume... } } }
Turn your CV pile into a database
Sign up, generate a key, upload a resume. Want to rank the parsed candidates too? Pair it with AI Match Scoring.
Get started