API Reference
The CV Parser Pro API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes and authentication.
https://cvparserpro.com/api/v1Authentication
The CV Parser Pro API uses API keys to authenticate requests. Include your API key in theX-API-Key header with every request.
curl https://cvparserpro.com/api/v1/candidates \
-H "X-API-Key: ts_your_api_key_here"Keep your API keys secure. Do not share them in publicly accessible areas such as GitHub, client-side code, or public repositories.
Quickstart
Parse a CV in three steps:
1Upload a CV file
curl -X POST https://cvparserpro.com/api/v1/parse \
-H "X-API-Key: ts_your_api_key" \
-F "[email protected]"Response includes candidate ID and credits remaining.
2Wait for parsing (15-30 seconds)
curl https://cvparserpro.com/api/v1/candidates/{candidate_id} \
-H "X-API-Key: ts_your_api_key"
# Poll until parsing_status = "completed"3Get structured data
{
"data": {
"id": "8b212bcd-a0d0-4a08-bc29-ba932b713ec1",
"full_name": "John Smith",
"email": "[email protected]",
"current_title": "Senior Software Engineer",
"years_of_experience": 8,
"skills": ["Python", "JavaScript", "React", "AWS"],
"work_history": [...],
"education": [...],
"parsing_status": "completed",
"parsing_confidence": 0.92
}
}Rate Limits
API rate limits vary by plan. Rate limit information is included in response headers.
| Plan | Requests/min | CV Parses/month |
|---|---|---|
| Free / Trial | 60 | 100 |
| Starter | 60 | 500 |
| Growth | 120 | 2,000 |
| Scale | 300 | 10,000 |
Rate Limit Headers
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 119
X-RateLimit-Reset: 1706403200
Parsing
Upload CV files or provide URLs to parse resumes into structured data. Each parse consumes 1 credit.
/v1/parse/v1/parse/urlPOST/v1/parse
Upload one or more CV files for parsing.
Request
curl -X POST https://cvparserpro.com/api/v1/parse \
-H "X-API-Key: ts_your_api_key" \
-F "[email protected]" \
-F "[email protected]"Response
{
"success": true,
"candidates": [
{
"id": "8b212bcd-a0d0-4a08-bc29-ba932b713ec1",
"filename": "resume1.pdf",
"status": "pending"
}
],
"credits_remaining": 495
}Supported formats: PDF, DOCX, DOC (max 10MB per file)
POST/v1/parse/url
Parse CVs from publicly accessible URLs.
Request
curl -X POST https://cvparserpro.com/api/v1/parse/url \
-H "X-API-Key: ts_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://example.com/resume.pdf"
]
}'Candidates
Candidates are parsed CV records containing structured data like contact info, work history, education, and skills.
/v1/candidates/v1/candidates/{id}/v1/candidates/{id}/v1/candidates/{id}/v1/candidates/{id}/fileThe Candidate Object
{
"id": "8b212bcd-a0d0-4a08-bc29-ba932b713ec1",
"full_name": "Sarah Chen",
"email": "[email protected]",
"phone": "+1 415-555-0123",
"location": "San Francisco, CA",
"current_title": "Senior Software Engineer",
"years_of_experience": 7,
"skills": ["Python", "JavaScript", "React", "AWS", "PostgreSQL"],
"languages": ["English", "Mandarin"],
"work_history": [
{
"company": "TechCorp Inc",
"title": "Senior Software Engineer",
"start_date": "2021-03",
"end_date": "present",
"is_current": true,
"description": "Led backend development for payment systems..."
}
],
"education": [
{
"institution": "Stanford University",
"degree": "Bachelor of Science",
"field": "Computer Science",
"start_year": "2013",
"end_year": "2017"
}
],
"certifications": [
{
"name": "AWS Solutions Architect",
"issuer": "Amazon Web Services",
"date": "2022"
}
],
"linkedin_url": "https://linkedin.com/in/sarahchen",
"ai_summary": "Sarah is a software engineer with 7+ years of experience...",
"parsing_status": "completed",
"parsing_confidence": 0.94,
"created_at": "2026-01-28T01:39:09.804Z"
}GET/v1/candidates
Returns a paginated list of candidates.
Parameters
| Parameter | Default | Description |
|---|---|---|
page | 1 | Page number |
limit | 20 | Results per page (max 100) |
status | - | Filter: pending, completed, failed |
skills | - | Comma-separated skills filter |
curl "https://cvparserpro.com/api/v1/candidates?page=1&limit=10&status=completed" \
-H "X-API-Key: ts_your_api_key"Jobs
Create job positions with requirements and match candidates against them.
/v1/jobs/v1/jobs/v1/jobs/{id}/v1/jobs/{id}/v1/jobs/{id}POST/v1/jobs
Create a new job posting with skill requirements.
curl -X POST https://cvparserpro.com/api/v1/jobs \
-H "X-API-Key: ts_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Senior Backend Engineer",
"description": "We are looking for...",
"required_skills": [
{"skill": "Python", "weight": "must_have"},
{"skill": "PostgreSQL", "weight": "must_have"},
{"skill": "Docker", "weight": "nice_to_have"}
],
"min_experience_years": 3,
"max_experience_years": 8,
"preferred_locations": ["Remote", "Mexico City"]
}'Usage
Check your API usage, credit balance, and plan details.
/v1/usagecurl https://cvparserpro.com/api/v1/usage \
-H "X-API-Key: ts_your_api_key"Response
{
"plan": "growth",
"plan_name": "Growth",
"credits_total": 2000,
"credits_used": 1505,
"credits_remaining": 495,
"api_calls_this_period": 127,
"resets_at": "2026-02-12T04:15:39.058Z",
"overage_price_cents": 8
}Errors
CV Parser Pro uses conventional HTTP response codes. Codes in the 2xx range indicate success, 4xx indicate client errors, and 5xx indicate server errors.
| Code | Status | Description |
|---|---|---|
| 200 | OK | Request succeeded |
| 400 | Bad Request | Invalid parameters |
| 401 | Unauthorized | Invalid or missing API key |
| 402 | Payment Required | Insufficient credits |
| 404 | Not Found | Resource not found |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Server Error | Internal server error |
Error Response Format
{
"error": {
"code": "insufficient_credits",
"message": "Insufficient credits. You have 0 credits, but this operation requires 1."
}
}Pagination
List endpoints return paginated results with metadata.
{
"data": [...],
"meta": {
"total": 150,
"page": 1,
"limit": 20,
"total_pages": 8,
"has_next": true,
"has_prev": false
}
}| Field | Description |
|---|---|
total | Total number of results |
page | Current page number |
limit | Results per page |
total_pages | Total number of pages |
has_next | Whether more pages exist |
has_prev | Whether previous pages exist |
SDKs & Libraries
While we don't have official SDKs yet, the API is simple to use with any HTTP client.
Python
import requests
class CVParserPro:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = "https://cvparserpro.com/api/v1"
self.headers = {"X-API-Key": api_key}
def parse_cv(self, file_path):
with open(file_path, "rb") as f:
response = requests.post(
f"{self.base_url}/parse",
headers=self.headers,
files={"files": f}
)
return response.json()
def get_candidate(self, candidate_id):
response = requests.get(
f"{self.base_url}/candidates/{candidate_id}",
headers=self.headers
)
return response.json()
def list_candidates(self, page=1, limit=20):
response = requests.get(
f"{self.base_url}/candidates",
headers=self.headers,
params={"page": page, "limit": limit}
)
return response.json()
# Usage
client = CVParserPro("ts_your_api_key")
result = client.parse_cv("resume.pdf")
print(result)JavaScript / TypeScript
class CVParserPro {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseUrl = 'https://cvparserpro.com/api/v1';
}
async parseCV(file) {
const formData = new FormData();
formData.append('files', file);
const response = await fetch(`${this.baseUrl}/parse`, {
method: 'POST',
headers: { 'X-API-Key': this.apiKey },
body: formData,
});
return response.json();
}
async getCandidate(id) {
const response = await fetch(`${this.baseUrl}/candidates/${id}`, {
headers: { 'X-API-Key': this.apiKey },
});
return response.json();
}
async listCandidates(page = 1, limit = 20) {
const params = new URLSearchParams({ page, limit });
const response = await fetch(`${this.baseUrl}/candidates?${params}`, {
headers: { 'X-API-Key': this.apiKey },
});
return response.json();
}
}
// Usage
const client = new CVParserPro('ts_your_api_key');
const result = await client.listCandidates();
console.log(result);Ready to get started?
Sign up now and get 100 free CV parses with your trial.