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.

Base URL
https://cvparserpro.com/api/v1

Authentication

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.

PlanRequests/minCV Parses/month
Free / Trial60100
Starter60500
Growth1202,000
Scale30010,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.

POST
/v1/parse
POST
/v1/parse/url

POST/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.

GET
/v1/candidates
GET
/v1/candidates/{id}
PATCH
/v1/candidates/{id}
DELETE
/v1/candidates/{id}
GET
/v1/candidates/{id}/file

The 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

ParameterDefaultDescription
page1Page number
limit20Results 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.

GET
/v1/jobs
POST
/v1/jobs
GET
/v1/jobs/{id}
PATCH
/v1/jobs/{id}
DELETE
/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.

GET
/v1/usage
curl 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.

CodeStatusDescription
200OKRequest succeeded
400Bad RequestInvalid parameters
401UnauthorizedInvalid or missing API key
402Payment RequiredInsufficient credits
404Not FoundResource not found
429Too Many RequestsRate limit exceeded
500Server ErrorInternal 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
  }
}
FieldDescription
totalTotal number of results
pageCurrent page number
limitResults per page
total_pagesTotal number of pages
has_nextWhether more pages exist
has_prevWhether 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.