Drop in a CV in any format — get back clean structured JSON in <2 seconds. REST, JSON-only, bearer-token auth. Choose your AI provider (Claude, GPT-4, or local spaCy NER) at the workspace level.
cvparser converts CVs (PDF, DOCX, DOC, HTML, plain text) into a normalised candidate object validated by Zod. Every parse runs through the same extractor pipeline.
All non-demo requests must include an Authorization header with a workspace bearer token. Tokens are managed in your Dashboard. Live keys start with cvp_live_; sandbox keys with cvp_test_.
Send your first parse with a single command. The response wraps the candidate object in { success, data }. Costs 1 credit on a 2xx response. To only extract the sections you need (and cut LLM cost), see Selecting sections below.
curl -X POST https://api.cvparser.io/parse \
-H "Authorization: Bearer cvp_live_a8f...kT2" \
-F "file=@./candidate.pdf"{
"success": true,
"data": {
"fullName": "Sarah Chen",
"headline": "Senior Frontend Engineer",
"email": "sarah.chen@gmail.com",
"phone": "+44 7700 900123",
"location": "London, UK",
"linkedin": "https://linkedin.com/in/sarahchen",
"github": null,
"website": null,
"bio": "Frontend engineer with 8+ years...",
"confidence": 0.994,
"workHistory": { "confidence": 0.97, "items": [ ... ] },
"education": { "confidence": 0.99, "items": [ ... ] },
"skills": { "confidence": 0.96, "items": [ ... ] }
}
}By default a parse returns every CV section. Pass `?sections=` (on /parse) or a JSON `sections: []` field (on /parse/text) to extract only what you need — the request builds a reduced JSON schema, trims the prompt, and costs proportionally less. The response still uses the same envelope; unrequested sections are simply omitted from `data`.
curl -X POST "https://api.cvparser.io/parse?sections=workHistory,skills" \
-H "Authorization: Bearer cvp_live_a8f...kT2" \
-F "file=@./candidate.pdf"{
"success": true,
"data": {
"workHistory": { "confidence": 0.97, "items": [ ... ] },
"skills": { "confidence": 0.96, "items": [ ... ] }
}
}cvparser uses conventional HTTP status codes. 2xx for success, 4xx for client errors (validation, auth, quota), 5xx for our problems. Errors always include a JSON envelope { success: false, error: string }.
Defaults are 60 parses / minute per workspace on Starter & Pro, 600 / min on Business, custom on Enterprise. The public demo endpoint is IP-rate-limited. We return X-RateLimit-Limit and X-RateLimit-Remaining headers on every response.
Every parse returns a Candidate envelope validated by the @cvparser/types Zod schema. Below are the top-level keys. See the shared schema for the full nested shape.
Multipart upload. PDF, DOCX, DOC, HTML, plain text are all supported. Costs 1 credit per parse — charged only on a 2xx response.
curl -X POST https://api.cvparser.io/parse \
-H "Authorization: Bearer cvp_live_a8f...kT2" \
-F "file=@./candidate.pdf"{
"success": true,
"data": {
"fullName": "Sarah Chen",
"headline": "Senior Frontend Engineer",
"email": "sarah.chen@gmail.com",
"phone": "+44 7700 900123",
"location": "London, UK",
"linkedin": "https://linkedin.com/in/sarahchen",
"github": null,
"website": null,
"bio": "Frontend engineer with 8+ years...",
"confidence": 0.994,
"workHistory": { "confidence": 0.97, "items": [ ... ] },
"education": { "confidence": 0.99, "items": [ ... ] },
"skills": { "confidence": 0.96, "items": [ ... ] }
}
}Send pre-extracted CV text directly — skips file extraction. Useful when you already have the text from another source.
curl -X POST https://api.cvparser.io/parse/text \
-H "Authorization: Bearer cvp_live_a8f...kT2" \
-H "Content-Type: application/json" \
-d '{ "text": "Sarah Chen\nSenior Frontend Engineer..." }'{
"success": true,
"data": {
"fullName": "Sarah Chen",
...
}
}Unauthenticated, IP-rate-limited demo endpoint. Same response shape as /parse. Use it to wire up trial flows or evaluation harnesses without provisioning a key.
curl -X POST https://api.cvparser.io/demo/parse \
-F "file=@./candidate.pdf"{
"success": true,
"data": { ... }
}The API is plain REST — any HTTP client works. Below are the no-dependency choices for the popular languages.
global fetch + FormData (built-in)pip install requestsnet/http + mime/multipartcurl, fetch, axios — anything