apyhub
ARTIFICIAL INTELLIGENCE · DATA EXTRACTION

Resume Parser API

What it does

Resume Parser extracts structured candidate data from a resume or CV file. Send a PDF, DOC, DOCX, TXT, or RTF file, optionally set the resume language, and the service queues an asynchronous parsing job for you.

Use the submit endpoint to upload the file and receive a job_id plus a status_url. When the job finishes, the status endpoint returns the parsed result object with candidate details such as name, email, phone, address, language, positions, education qualifications, spoken languages, honors and awards, and courses or certifications.

The extracted positions include fields like company name, position name, country, start date, end date, job details, and skills. Education entries include school name, degree type, dates, country, learning mode, department, specialization, and related details. That makes it useful for applicant tracking systems, talent pipelines, CV intake workflows, and any process where you need to turn uploaded resumes into searchable hiring data.

Resume Parser is built for developer workflows where structured output matters more than document layout. Submit the file, poll the job status, and use the parsed profile data in your hiring or enrichment pipeline.

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

QUICKSTART

GUIDE

Quickstart

Upload a resume file to start an asynchronous parse job.

curl -X POST "https://api.eu.apyverse.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 and a status_url string for the submitted job.

{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "status_url": "https://example.com/status/550e8400-e29b-41d4-a716-446655440000"
}
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 the job details needed to check processing status later.

Request Body

ParameterTypeMandatoryDescription
fileStringYesResume/CV file in PDF, DOC, DOCX, TXT, or RTF format.
languageStringNoLanguage of the resume/CV. Defaults to English.

Response

Returns a JSON object with job_id and status_url string fields. job_id is the identifier of the submitted asynchronous job, and status_url is the URL used to check the job status.

ParameterTypeMandatoryDescription
job_idStringYesIdentifier of the submitted asynchronous job. Format: UUID.
status_urlStringYesURL used to check the submitted job status. Format: URI.

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 to track the job, and status_url to check its status.

Body

Name
Type
Description
bodyREQUIRED
object

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.apyverse.com/sharpapi/parse-resume/job/status/:job-id

QUICKSTART

GUIDE

Quickstart

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

curl -X GET "https://api.eu.apyverse.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 field. Inside data, the response includes the job id, type, and an attributes object containing type, status, and a result object with the parsed resume data.

{
  "data": {
    "id": "7b3d2e2d-8b6a-4d8c-9e47-5f2c6b7d1a11",
    "type": "job",
    "attributes": {
      "type": "resume",
      "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 Parser job using the job ID in the path. The response returns a JSON object containing a data wrapper with the job identifier, type, and status attributes, and may include parsed resume results once the job is complete.

Path Parameter(s)

AttributeTypeMandatoryDescription
job-idStringYesJob identifier in UUID format.

Response

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

AttributeTypeMandatoryDescription
dataObjectYesWrapper object containing the job metadata and attributes.
data.idStringYesJob identifier.
data.typeStringYesJob type.
data.attributesObjectYesWrapper object containing the job status and parsed result.
data.attributes.typeStringYesAttribute type.
data.attributes.resultObjectNoParsed resume data returned by the job when available.
data.attributes.result.positionsObject ArrayNoArray of position entries extracted from the resume. Each item may include skills, country, end_date, start_date, job_details, company_name, and position_name.
data.attributes.result.positions[].skillsString ArrayNoSkills associated with the position.
data.attributes.result.positions[].countryStringNoCountry associated with the position.
data.attributes.result.positions[].end_dateStringNoPosition end date. The schema allows this field to be nullable.
data.attributes.result.positions[].start_dateStringNoPosition start date.
data.attributes.result.positions[].job_detailsStringNoDetails about the job.
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 address.
data.attributes.result.candidate_phoneStringNoCandidate phone number.
data.attributes.result.candidate_addressStringNoCandidate address.
data.attributes.result.candidate_languageStringNoCandidate language.
data.attributes.result.education_qualificationsObject ArrayNoArray of education qualification entries. Each item may include country, end_date, start_date, degree_type, school_name, school_type, learning_mode, education_details, faculty_department, and specialization_subjects.
data.attributes.result.education_qualifications[].countryStringNoCountry associated with the education record.
data.attributes.result.education_qualifications[].end_dateStringNoEducation end date.
data.attributes.result.education_qualifications[].start_dateStringNoEducation start date.
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 listed for the candidate.
data.attributes.result.candidate_honors_and_awardsObject ArrayNoHonors and awards array. The schema does not define the item shape.
data.attributes.result.candidate_courses_and_certificationsString ArrayNoCourses and certifications listed for the candidate.
data.attributes.statusStringYesJob status.

Path parameters

Name
Type
Description
job-idREQUIRED
string
▣ 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.