Resume & CV Parser API Documentation
This document is provided for reference and may be out-dated. For each subscription we provide an up-to-date documentation in HTML and PDF format.
General Information
API Variants
You can choose between 2 API flow variants:
- Parse API for use in back-end services
- Send a file to POST /parse with Authorization: Bearer <api-key> header and wait for returned JSON
- Upload API for use in client-side web applications
- From client-side JavaScript, upload a file to POST /upload?clientId=<your-client-id> and retrieve a unique upload ID
- Fetch the results in your backend via GET /upload-results?uploadId=<unique-upload-id>
If you process CVs as part of a server-side process or worker, using the Parse API is the easiest to use.
If you want to allow your users to upload CV files for processing straight from your web app, you can skip uploading the file to your server and upload it directly to AccuResume's server via the Upload API, and then fetch the parse results via the results endpoint. This way you don't have to deal with file uploads on your server. You will need to configure your web application hostname which will be set as an allowed CORS host for your client ID.
See below sections for documentation of the respective API methods.
Parsing Speed
Parsing time is dependent on the length of the PDF and the amount of text that is needed to be extracted from it.
Rate Limits
Types of rate limits are documented for each API endpoint.
Your exact rate limit thresholds will depend on your account limits.
Parsed Resume Schema
The parsed resume schema is:
{
"emailAddress": <string>,
"firstName": <string>,
"lastName": <string>,
"phoneNumber": <string>,
"location": <string>,
"linkedInLink": <string>,
"otherLinks": [<string>, <string>],
"workExperiences": [
{
"title": <string>,
"organization": <string>,
"location": <string>, // nullable
"skillsDescription": <string>,
"startMonth": <number>,
"startYear": <number>,
"endMonth": <number>,
"endYear": <number>,
"isOngoing": <boolean>
}
],
"workExperiencesDiscardedItems": <boolean>,
"educations": [
{
"degree": <string>,
"school": <string>,
"year": <number>,
"endYear": <number>, // nullable
"notes": <string>,
"location": <string> // nullable
}
],
"educationsDiscardedItems": <boolean>,
"fluentLanguages": [<string>, <string>],
"languages": [
{ "language": <string>, "level": <string> }
]
}
API Endpoints
Detailed documentation for each API endpoint, including request parameters, response formats, and example usage.
/parse
Endpoint
POST <base-url>/v1/parse
Headers
Authorization: Bearer <api-key>
Body
Multipart file upload (application/pdf)
Rate limits
Maximum of 30 files per minute
Body limits
File type must be application/pdf
File must be 1MB or less
Response JSON
{
"firstName": "...",
...
}
Example (curl):
curl 'https://<base-url>/v1/parse' \
-X 'POST' \
-H 'content-type: multipart/form-data' \
-H 'authorization: Bearer <api-key>' \
-F 'file=@example.pdf;type=application/pdf'
{"firstName":"...","lastName":"...", [...]
Example (JavaScript):
const formData = new FormData();
formData.append("file", fs.createReadStream("example.pdf"));
const request = await fetch("https://<base-url>/v1/parse", {
method: "POST",
headers: {
authorization: "Bearer <api-key>",
},
body: formData,
});
const data = await request.json();
/upload
Endpoint
POST <base-url>/v1/upload?clientId=<client-id>
Headers
None
Body
Multipart file upload (application/pdf)
Rate limits
Maximum of 30 files per minute
Body limits
File type must be application/pdf
File must be 1MB or less
Response JSON
{
"uploadId": "<upload-id>"
}
Example (curl):
# This endpoint is meant for client-side JavaScript only
Example (JavaScript):
const file = document.querySelector('input[type="file"]').files[0];
const formData = new FormData();
formData.append("file", file, "file.pdf");
const res = await fetch(`https://<base-url>/v1/upload?clientId=${encodeURIComponent('<client-id>')}`, {
method: "POST",
body: formData,
});
const { uploadId } = await res.json();
// Forward uploadId to server for use with GET /upload-results
/upload-results
Endpoint
GET <base-url>/v1/upload-results?uploadId=<upload-id>
Headers
Authorization: Bearer <api-key>
Body
Multipart file upload (application/pdf)
Rate limits
Maximum of 30 files per minute
Body limits
File type must be application/pdf
File must be 1MB or less
Response JSON
{
"firstName": "...",
...
}
Example (curl):
curl 'https://<base-url>/v1/upload-results?uploadId=<upload-id>' \
-H 'authorization: Bearer <api-key>'
{"firstName":"...","lastName":"...", [...]
Example (JavaScript):
const request = await fetch(`https://<base-url>/v1/upload-results?uploadId=${encodeURIComponent('<upload-id>')}`, {
headers: {
authorization: "Bearer <api-key>",
},
});
const data = await request.json();