Resume Parsing API — AI CV Parser That Returns Structured JSON
Send a resume file — PDF, DOC/DOCX, RTF, TXT or even a photo — and get back one consistent JSON document: candidate profile, work history, education, skills and languages. No templates to maintain, no per-layout rules. The AI parser adapts to any CV format in 80+ languages.
14-day trial · 100,000 words included · No credit card required
See the CV Parser in Action
Run a real parsing job on a sample resume — straight from this page.
Try it live — no signup needed
Live demoPick a sample document and watch this API process it in real time.
That was a live API response. Get your own API key and 100,000 free trial words — no credit card required.
Double opt-in, unsubscribe anytime.
Try it live — no signup needed
Live demoPick a sample resume, paste a job description and watch the AI score the match.
That was a live API response. Get your own API key and 100,000 free trial words — no credit card required.
Double opt-in, unsubscribe anytime.
How the Resume Parsing API Works
One multipart POST in, structured JSON out — fully asynchronous.
POST the CV file
Send a PDF, DOC/DOCX, TXT, RTF or image (JPG/PNG/TIFF) up to 100 MB to /api/v1/hr/parse_resume with your Bearer token.
Get a status URL
The API responds immediately with 202 Accepted and a status_url for the queued parsing job — no blocking, no timeouts.
Poll or get a webhook
Poll the status URL (or pass a webhook URL header) until the job status flips to success. Typical jobs finish in seconds.
Read structured JSON
Receive the parsed candidate as a consistent JSON schema: personal details, work history, education, skills, certificates and languages.
Call it from any stack
Submit a job, poll the status URL, get structured JSON. SDKs available for PHP, Laravel, Python, Node.js, .NET and Flutter.
curl -X POST "https://sharpapi.com/api/v1/hr/parse_resume" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"file": "@resume.pdf", "language": "English"}'
$response = Http::withToken('YOUR_API_KEY')
->post('https://sharpapi.com/api/v1/hr/parse_resume', {"file": "@resume.pdf", "language": "English"});
$statusUrl = $response->json('status_url'); // poll until status = success
import requests
response = requests.post(
"https://sharpapi.com/api/v1/hr/parse_resume",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"file": "@resume.pdf", "language": "English"},
)
status_url = response.json()["status_url"] # poll until status == "success"
{
"data": {
"type": "api_job_result",
"id": "50fa96a0-3e34-4323-be84-6ed602b00925",
"attributes": {
"status": "success",
"type": "hr_parse_resume",
"result": {
"candidate_name": "Jack Doe",
"candidate_email": "johndoe@gmail.com",
"candidate_phone": "+1 888 888 8888",
"candidate_address": "",
"candidate_language": "English",
"candidate_spoken_languages": [
"English"
],
"candidate_honors_and_awards": [
"Third best project in Machine Learning Practical by IBM"
],
"candidate_courses_and_certifications": [],
"candidate_linkedin": "",
"candidate_github": "",
"candidate_twitter": "",
"candidate_website": "",
"candidate_date_of_birth": null,
"candidate_nationality": "",
"candidate_summary_objective": "",
"work_authorization": "",
"years_of_experience": 2,
"approximate_age": null,
"brief_summary": "John Doe is a skilled software engineer with experience in Android development and a strong academic background in artificial intelligence and computer science.",
"drivers_licenses": [],
"interests_hobbies": [],
"projects": [
{
"project_name": "Image Classification",
"description": "Classified images of handwritten digits and letters from the MNIST and EMNIST datasets using deep neural networks. Implemented models with different activation functions, weight initialization strategies, and learning rules.",
"url": ""
},
{
"project_name": "Speaker Independent Digit Recognition",
"description": "Recorded voiced English digits and parameterized the collected waveform files as MFCCs. Constructed a speaker-dependent, and -independent speech recognizer using the Hidden Markov Model Toolkit (HTK).",
"url": ""
}
],
"volunteer_experience": [],
"publications": [],
"references": [],
"positions": [
{
"position_name": "Software Engineer Internship",
"company_name": "Google Inc.",
"country": "Japan",
"start_date": "2017-05-01",
"end_date": "2017-07-31",
"skills": [
"Android",
"Google Maps",
"Interactive screenshot code generator"
],
"job_details": "Designed and implemented an interactive screenshot code generator for Android Google Maps."
},
{
"position_name": "Visiting Student Research Internship",
"company_name": "Brown University",
"country": "USA",
"start_date": "2017-01-01",
"end_date": "2017-04-30",
"skills": [
"Statistical analysis",
"User interactions",
"Crowdsourcing system"
],
"job_details": "Performed statistical analysis on user interactions for the crowdsourcing system 'Drafty' HCOMP 2017. Advisor: Jeff Huang."
},
{
"position_name": "Software Engineer Internship",
"company_name": "Google Inc.",
"country": "Japan",
"start_date": "2016-09-01",
"end_date": "2016-12-31",
"skills": [
"Android",
"Chrome",
"WebView",
"Language locales",
"Han character unification"
],
"job_details": "Created support for multiple language locales in Android Chrome and WebView. Fixed Han character unification in Android Nougat. Made locales consistent across all Chrome supported Android Versions."
},
{
"position_name": "Summer Trainee Engineering Program Internship",
"company_name": "Google Inc.",
"country": "Japan",
"start_date": "2015-05-01",
"end_date": "2015-09-30",
"skills": [
"Bug assignment system",
"Google's internal bug organizer"
],
"job_details": "Improved the bug assignment system in Google’s internal bug organizer."
}
],
"education_qualifications": [
{
"school_name": "The University of Edinburgh, School of Informatics",
"school_type": "University or equivalent",
"degree_type": "Master's Degree or equivalent",
"faculty_department": "",
"specialization_subjects": "Artificial Intelligence",
"country": "United Kingdom",
"start_date": "2017-09-01",
"end_date": "2018-11-30",
"learning_mode": "In-person learning",
"education_details": "Master of Science with Distinction in Artificial Intelligence."
},
{
"school_name": "University of Toronto, Faculty of Arts and Sciences",
"school_type": "University or equivalent",
"degree_type": "Bachelor's Degree or equivalent",
"faculty_department": "",
"specialization_subjects": "Computer Science and Mathematics",
"country": "Canada",
"start_date": "2012-08-01",
"end_date": "2016-06-30",
"learning_mode": "In-person learning",
"education_details": "Honors Bachelor of Science with Distinction in Computer Science and Mathematics."
},
{
"school_name": "Waseda University, School of Fundamental Science and Engineering",
"school_type": "University or equivalent",
"degree_type": "N/A",
"faculty_department": "",
"specialization_subjects": "",
"country": "Japan",
"start_date": "2014-08-01",
"end_date": "2015-07-31",
"learning_mode": "In-person learning",
"education_details": "One year Exchange Program (University of Toronto)."
}
]
}
}
}
}
Who Builds on the CV Parser API
Anywhere resumes arrive as files and your product needs data.
Applicant Tracking Systems
Auto-fill candidate profiles the moment a CV lands. Kill manual re-typing and broken upload forms.
Job Boards
Let applicants register with a resume instead of a 20-field form. Higher signup conversion, cleaner profiles.
HR SaaS Platforms
Add "import from CV" to onboarding, employee records or skills inventories without training your own models.
Staffing & Recruitment Agencies
Bulk-parse inbox attachments and legacy CV databases into a searchable, structured candidate pool.
Talent Marketplaces
Normalize freelancer and contractor CVs into comparable profiles for matching and ranking algorithms.
Background Screening Tools
Extract employers, roles and date ranges to drive verification workflows and detect employment gaps.
Looking for more HR endpoints? Browse the HR Tech API catalog →
Why Developers Pick This Resume Parser
Deterministic JSON schema
Every resume maps to the same field structure — personal data, positions, education, skills, certificates, languages. Your parser-side code never changes.
80+ languages
Parse CVs in English, German, Polish, Spanish, Arabic, Japanese and dozens more — including mixed-language documents — with optional output normalization.
Async with webhooks
202-and-poll by default; add a webhook URL header and get called back when the job finishes. Built for bulk pipelines.
OCR included
Scanned and photographed resumes go through OCR automatically — no separate OCR vendor, no extra fee, one endpoint for text and image files.
Per-word pricing, no per-page fees
You pay for processed words, not per document or per page. Long CVs, short CVs — the cost tracks the actual content.
GDPR & SOC 2 Type II
Candidate data is processed transiently, never used for model training, and covered by audited SOC 2 Type II controls.
SharpAPI est maintenant Conforme SOC 2 Type II. Vous pouvez vérifier les détails sur notre Portail du Centre de Confiance.
Vos données sont vos données. Découvrez comment nous les protégeons et respectons les normes mondiales de confidentialité dans notre Politique de gestion des données et de conformité .
Predictable pricing from $50/month
14-day free trial with 100,000 words included. No credit card required. 30-day money-back guarantee on your first payment.
Resume Parsing API — FAQ
-
PDF, DOC, DOCX, TXT, RTF and scanned images (JPG, JPEG, PNG, TIFF) up to 100 MB per file. Scanned or photographed resumes are OCR-processed before AI extraction, so image-only CVs parse just as well as text-based ones.
-
The API returns one consistent JSON schema for every resume: candidate personal details (name, email, phone, address, links), a position history with employers, roles and date ranges, education entries, skills, certificates and language proficiencies. The schema stays identical regardless of the resume layout or language.
-
The parser handles resumes in 80+ languages and mixed-language documents. You can also request the structured output normalized to a specific language using the optional language parameter.
-
Asynchronous. You POST the file, get a job status URL back immediately, then poll it or register a webhook to be notified when parsing completes. This keeps your request threads free and handles large files gracefully. Most resumes parse in a few seconds.
-
Pricing is based on processed words, not per page or per document — plans start at $50/month and a 14-day free trial includes 100,000 words with no credit card required. A typical two-page resume costs a fraction of a cent-per-page vendor lock-in model.
-
Yes. SharpAPI is SOC 2 Type II certified, GDPR compliant, and uploaded resumes are processed transiently — your data is your data and is never used to train models. See the Data Handling and Compliance policy for details.
Explore More SharpAPI
Ship Resume Parsing This Week
Grab an API key, POST your first CV, and get structured candidate JSON back in seconds.
Aucune carte de crédit requise