apyhub
Back
▣ ARTIFICIAL INTELLIGENCE · DATA EXTRACTION

Resume Parser API

What it does

The Resume Parser API turns resumes and CVs into structured JSON your software can store, search, and filter. For each candidate, you get their contact details, work history with the skills used in each role, education, spoken languages, and certifications.

Send a PDF, DOC, DOCX, TXT, or RTF file, or a scan or photo in JPG, PNG, or TIFF format, which is read with OCR automatically. Resumes in 80+ languages are supported.

Use it to fill in applicant profiles in your ATS, build a searchable talent database, or process large volumes of applications without manual data entry. Parsing runs in the background: submit the file, then check the job status until the result is ready. Once parsed, you can rank candidates against a role with the Resume/CV Job Match Score API.

You can start on ApyHub's free tier with no card required.

▣ ENDPOINT 01 / 02
POST
Submit AI Resume Parser job
https://api.eu.apyhub.com/sharpapi/parse-resume

QUICKSTART

GUIDE

Quickstart

Upload a resume file to start an asynchronous parsing job.

curl -X POST "https://api.eu.apyhub.com/sharpapi/parse-resume" \
  -H "apy-token: $APY_TOKEN" \
  -F "file=@/path/to/resume.pdf"

What you'll get back

Returns a JSON object with a job_id string — the UUID of the submitted job. Poll the job status endpoint with this id to retrieve the result.

{
  "job_id": "16e4a61a-2e1a-4ddf-87d5-8da9145144a9"
}
TRY ITLIVE · 50 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.
body*
Provide the Resume/CV file in PDF, DOC, DOCX, TXT, or RTF formats.
Specify the language of the Resume, defaults to English.

About this endpoint

What it does

Submits a resume/CV file for asynchronous AI parsing and returns identifiers you can use to check the job's progress later. The request uploads the file to process, and the response gives you the job ID.

Request Body

ParameterTypeMandatoryDescription
fileBinaryYesResume/CV file upload. Supported formats: PDF, DOC, DOCX, TXT, or RTF.
languageStringNoLanguage of the resume. Defaults to English.

Response

Returns a JSON object with a job_id string — the UUID of the submitted job. Poll the job status endpoint with this id to retrieve the result.

ParameterTypeMandatoryDescription
job_idStringYesIdentifier of the submitted asynchronous job. Format: UUID.

Notes

This endpoint kicks off an async job and returns immediately with a job identifier; the actual work runs in the background. Pair this call with the corresponding job_check endpoint — poll that until the status reaches a terminal state to retrieve the result. Use job_id from the response to track the job.

Max 100MB total per request (all files combined). Larger? Use this API's URL-based endpoint instead, if it has one.

▣ ENDPOINT 02 / 02
GET
Get AI Resume Parser job status
https://api.eu.apyhub.com/sharpapi/parse-resume/job/status/:job_id

QUICKSTART

GUIDE

Quickstart

Check the status of a parsed resume job by its job ID.

curl -X GET "https://api.eu.apyhub.com/sharpapi/parse-resume/job/status/:job_id" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with a data object. The data object includes id, type, and attributes; attributes contains the job status and, when available, a result object with the parsed resume details.

{
  "data": {
    "id": "job_123",
    "type": "job",
    "attributes": {
      "type": "resume_parse",
      "status": "completed",
      "result": {}
    }
  }
}
TRY ITLIVE · 1 ATOM
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.

About this endpoint

What it does

Retrieves the current status of an AI resume parsing job by job ID. The response returns a JSON object containing a data object with the job identifier, job type, and nested attributes including status and, when available, parsed resume results.

Path Parameter(s)

AttributeTypeMandatoryDescription
job_idStringYesUUID format. Identifies the resume parsing job.

Response

Returns a JSON object with a data object. Inside data, the response includes id and type string fields, plus an attributes object containing type, result, and status fields.

AttributeTypeMandatoryDescription
dataObjectYesWrapper object for the job status payload.
data.idStringYesJob identifier.
data.typeStringYesJob type.
data.attributesObjectYesWrapper object for the status and parsed result fields.
data.attributes.typeStringYesAttribute type.
data.attributes.statusStringYesJob status.
data.attributes.resultObjectNoParsed resume data returned by the job when available.
data.attributes.result.positionsObject ArrayNoArray of position entries extracted from the resume.
data.attributes.result.positions[].skillsString ArrayNoSkills associated with the position.
data.attributes.result.positions[].countryStringNoCountry associated with the position.
data.attributes.result.positions[].end_dateStringNoEnd date for the position. The schema marks this field as nullable.
data.attributes.result.positions[].start_dateStringNoStart date for the position.
data.attributes.result.positions[].job_detailsStringNoJob details.
data.attributes.result.positions[].company_nameStringNoCompany name.
data.attributes.result.positions[].position_nameStringNoPosition name.
data.attributes.result.candidate_nameStringNoCandidate name.
data.attributes.result.candidate_emailStringNoCandidate email.
data.attributes.result.candidate_phoneStringNoCandidate phone.
data.attributes.result.candidate_addressStringNoCandidate address.
data.attributes.result.candidate_languageStringNoCandidate language.
data.attributes.result.education_qualificationsObject ArrayNoArray of education qualification entries.
data.attributes.result.education_qualifications[].countryStringNoCountry associated with the education record.
data.attributes.result.education_qualifications[].end_dateStringNoEnd date for the education record.
data.attributes.result.education_qualifications[].start_dateStringNoStart date for the education record.
data.attributes.result.education_qualifications[].degree_typeStringNoDegree type.
data.attributes.result.education_qualifications[].school_nameStringNoSchool name.
data.attributes.result.education_qualifications[].school_typeStringNoSchool type.
data.attributes.result.education_qualifications[].learning_modeStringNoLearning mode.
data.attributes.result.education_qualifications[].education_detailsStringNoEducation details.
data.attributes.result.education_qualifications[].faculty_departmentStringNoFaculty or department.
data.attributes.result.education_qualifications[].specialization_subjectsStringNoSpecialization subjects.
data.attributes.result.candidate_spoken_languagesString ArrayNoSpoken languages for the candidate.
data.attributes.result.candidate_honors_and_awardsObject ArrayNoHonors and awards. The schema does not define the item shape.
data.attributes.result.candidate_courses_and_certificationsString ArrayNoCourses and certifications for the candidate.

Notes

This endpoint is a job status check. Poll it with the job-id path parameter returned by the matching submit call. The data.attributes.status field indicates job progress and completion state, and the parsed resume fields are carried under data.attributes.result when the job has produced output.

▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.