Upload Resume
Upload and parse a resume file. The API automatically extracts information using AI-powered parsing and creates a new resume in your account.
Request
Headers
| Header | Value | Required |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | REQUIRED |
Content-Type | multipart/form-data | REQUIRED |
Form Data
| Field | Type | Description |
|---|---|---|
file | file | Resume file to upload REQUIRED |
File Requirements
- Accepted formats: PDF, DOC, DOCX
- Maximum size: 10 MB
- Content: Must contain valid resume information
Response
Success Response
Status Code: 200 OK
{
"id": "64f1a2b3c4d5e6f7g8h9i0j1"
}
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier of the newly created resume |
Examples
Upload with cURL
cURL
curl -X POST "https://api.enhancv.com/api/v1/resumes/upload" \
-H "Authorization: Bearer enh_live_your_api_key_here" \
-F "file=@/path/to/resume.pdf"
Upload with JavaScript (Node.js)
JavaScript - Using FormData
const FormData = require('form-data');
const fs = require('fs');
const fetch = require('node-fetch');
const form = new FormData();
form.append('file', fs.createReadStream('/path/to/resume.pdf'));
const response = await fetch('https://api.enhancv.com/api/v1/resumes/upload', {
method: 'POST',
headers: {
'Authorization': 'Bearer enh_live_your_api_key_here',
...form.getHeaders()
},
body: form
});
const data = await response.json();
console.log('Resume uploaded! ID:', data.id);
Upload with Python
Python - Using requests
import requests
api_key = 'enh_live_your_api_key_here'
with open('/path/to/resume.pdf', 'rb') as file:
files = {'file': file}
headers = {'Authorization': f'Bearer {api_key}'}
response = requests.post(
'https://api.enhancv.com/api/v1/resumes/upload',
headers=headers,
files=files
)
data = response.json()
print(f"Resume uploaded! ID: {data['id']}")
Upload from URL
JavaScript - Download and Upload
const fetch = require('node-fetch');
const FormData = require('form-data');
// Download resume from URL
const fileResponse = await fetch('https://example.com/resume.pdf');
const fileBuffer = await fileResponse.arrayBuffer();
// Upload to Enhancv
const form = new FormData();
form.append('file', Buffer.from(fileBuffer), 'resume.pdf');
const response = await fetch('https://api.enhancv.com/api/v1/resumes/upload', {
method: 'POST',
headers: {
'Authorization': 'Bearer enh_live_your_api_key_here',
...form.getHeaders()
},
body: form
});
const data = await response.json();
console.log('Resume uploaded! ID:', data.id);
Error Responses
400 Bad Request
No File Uploaded
{
"error": "No file uploaded",
"status": 400
}
File Too Large
{
"error": "File size exceeds 10MB",
"status": 400
}
Invalid File Type
{
"error": "Invalid file type. Only PDF, DOC, and DOCX are allowed",
"status": 400
}
401 Unauthorized
Missing or invalid API key.
{
"error": "Invalid API key",
"status": 401
}
403 Forbidden
Business Plan Required
{
"error": "API access requires a business plan",
"status": 403
}
Resume Limit Reached
{
"error": "Maximum resume limit reached",
"status": 403
}
Resume Parsing
How It Works
- File Upload: Your resume file is securely uploaded to our servers
- AI Parsing: We use HRFlow AI to extract structured information:
- Personal information (name, email, phone, location)
- Work experience (job titles, companies, dates, responsibilities)
- Education (degrees, institutions, dates)
- Skills (technical and soft skills)
- Certifications, languages, and other sections
- Resume Creation: A new resume is created in your account with the extracted data
- Ready to Use: You can view and edit the resume in the Enhancv editor
Supported Content
The parser can extract:
- ✅ Work experience with bullet points
- ✅ Education history
- ✅ Skills and competencies
- ✅ Certifications and courses
- ✅ Languages
- ✅ Contact information
- ✅ Professional summary
- ✅ Projects and achievements
Parsing Quality
- PDF: Best results, preserves formatting cues
- DOCX: Very good results
- DOC: Good results (converted to DOCX internally)
What Happens After Upload
- The resume is immediately accessible in your account
- You can view it in the Enhancv editor
- All sections are editable
- Original formatting is not preserved (Enhancv styling is applied)
- The resume ID can be used with other API endpoints
Performance
- Upload time: 1-3 seconds
- Parsing time: 5-15 seconds
- Total time: Usually completes in 10-20 seconds
Asynchronous Processing
While the API endpoint waits for parsing to complete, the process is non-blocking on the server side. Multiple uploads can be processed simultaneously.
Best Practices
- Validate files client-side before uploading to reduce errors
- Handle timeouts gracefully - parsing can take 10-20 seconds
- Store the returned resume ID for future operations
- Check resume quality - AI parsing may not be 100% accurate
- Inform users that they may need to review and edit the parsed content
Notes
- Uploaded resumes count toward your account's resume limit
- The parser works best with standard resume formats
- Creative or highly designed resumes may not parse perfectly
- You can always edit the resume after upload in the Enhancv editor