Data and account
Resume database
List, read, store under your own ids and erase the resumes of a workspace: every resume parsed, scored or stored there.
The resume database of a workspace holds every resume parsed by the Resume Parser, sent to the Resume Scorer or stored with PUT /resumes/{application_id}, under its application_id. Talent Pool Search searches it, and the Resume Scorer and Job Recommendations read a resume by its id. These endpoints are free.
/api/v4/resumesThe resume database of the workspace, most recently stored first. Free.
- Authentication
X-API-Keyheader- Billing
- Free
- Client timeout
- Client timeout ≥ 30 s
Headers
HireLayer-WorkspacestringYour customer's workspace id. Case-insensitive, created on first use. Absent, calls use
default.
Query parameters
limitintegerPage size.
1–100 · default
20cursorstringThe
next_cursorof the previous page.added_afterstring (date-time)Only resumes stored at or after this time.
Response
200A page of resumes.
dataobject[]›Show 6 child fieldsHide child fields
application_idstringfile_namestring | nullName of the file the resume was parsed from, as sent.
nullfor a resume sent as a text or a parsed JSON.candidate_namestring | nullmay be absentjob_titlestring | nullmay be absentcreated_atstring (date-time)updated_atstring (date-time)
next_cursorstring | null
Errors
- 400invalid_requestlimit must be an integer from 1 to 100.
param:limit.limitout of range.Fix, then retry
- 400invalid_requestcursor is not a next_cursor returned by this API.
param:cursor.cursoris not anext_cursorof this list.Fix, then retry
- 400invalid_requestadded_after must be a date or a date-time.
param:added_after.added_afteris not a date.Fix, then retry
- 400invalid_requestHireLayer-Workspace must contain letters, digits and . _ : ~ -, up to 200 characters.
param:HireLayer-Workspace.HireLayer-Workspaceis not a valid id.Fix, then retry
- 401
- 401missing_api_keyAuthorization: Bearer is not accepted: send the key in the X-API-Key header.
The key sent as
Authorization: Bearer: it goes inX-API-Key.Fix, then retry
- 401missing_api_keyThe key goes in the X-API-Key header, not in the URL.
The key sent in the URL: it goes in
X-API-Key.Fix, then retry
- 401invalid_api_keyInvalid API key: it is unknown, malformed or revoked.
The key is unknown, malformed or revoked.
Fix, then retry
- 500internal_errorInternal error: retry later. If it persists, contact support with the request_id.
An unexpected error.
Retry with backoff
- 502internal_errorThe service could not be reached: retry later.
The service could not be reached.
Retry with backoff
- 503internal_errorThe credit service is briefly unavailable: retry in a second.
The credit service is briefly unavailable. Header
Retry-After: <seconds>.Retry with backoff
- 504internal_errorThe service did not answer in time. The change may still be applied: read it before sending it again.
No answer in time.
Retry with backoff
curl -g "https://hirelayer.co/api/v4/resumes?limit=20" \
-H "X-API-Key: $HIRELAYER_API_KEY"import os
import requests
response = requests.get(
"https://hirelayer.co/api/v4/resumes?limit=20",
headers={"X-API-Key": os.environ["HIRELAYER_API_KEY"]},
timeout=30,
)
response.raise_for_status()
data = response.json()
print(data["data"])const response = await fetch('https://hirelayer.co/api/v4/resumes?limit=20', {
headers: {
'X-API-Key': process.env.HIRELAYER_API_KEY!,
},
signal: AbortSignal.timeout(30_000),
})
if (!response.ok) {
throw new Error(`HireLayer ${response.status}: ${await response.text()}`)
}
const data = await response.json()
console.log(data.data){
"error": {
"code": "invalid_request",
"message": "limit must be an integer from 1 to 100.",
"param": "limit",
"doc_url": "https://hirelayer.co/api-docs/errors#invalid_request"
},
"request_id": "6f1c2a4e-1d2b-4c3a-9e8f-0a1b2c3d4e5f"
}/api/v4/resumes/{application_id}Get a stored resume.
- Authentication
X-API-Keyheader- Billing
- Free
- Client timeout
- Client timeout ≥ 30 s
Path parameters
application_idstringrequiredThe resume's id, including one returned by the legacy
/api/v3/parserininfo_resume.application_id.
Headers
HireLayer-WorkspacestringYour customer's workspace id. Case-insensitive, created on first use. Absent, calls use
default.
Response
200The stored resume.
application_idstringworkspacestringfile_namestring | nullmay be absentName of the file the resume was parsed from, as sent.
nullfor a resume sent as a text or a parsed JSON.textstringThe resume's plain text.
resumeParsedResume | nullThe structured resume,
nullwhen only plain text was stored.job_idsstring[]Jobs the resume was scored against.
created_atstring (date-time)updated_atstring (date-time)
Errors
- 400invalid_requestapplication_id must contain letters, digits and . _ : ~ -, up to 200 characters.
param:application_id.application_idin the path is not a valid id.Fix, then retry
- 400invalid_requestHireLayer-Workspace must contain letters, digits and . _ : ~ -, up to 200 characters.
param:HireLayer-Workspace.HireLayer-Workspaceis not a valid id.Fix, then retry
- 401
- 401missing_api_keyAuthorization: Bearer is not accepted: send the key in the X-API-Key header.
The key sent as
Authorization: Bearer: it goes inX-API-Key.Fix, then retry
- 401missing_api_keyThe key goes in the X-API-Key header, not in the URL.
The key sent in the URL: it goes in
X-API-Key.Fix, then retry
- 401invalid_api_keyInvalid API key: it is unknown, malformed or revoked.
The key is unknown, malformed or revoked.
Fix, then retry
- 404not_foundNo resume cand-42 in workspace default.
param:application_id. No resume under this id in the workspace.Do not retry
- 500internal_errorInternal error: retry later. If it persists, contact support with the request_id.
An unexpected error.
Retry with backoff
- 502internal_errorThe service could not be reached: retry later.
The service could not be reached.
Retry with backoff
- 503internal_errorThe credit service is briefly unavailable: retry in a second.
The credit service is briefly unavailable. Header
Retry-After: <seconds>.Retry with backoff
- 504internal_errorThe service did not answer in time. The change may still be applied: read it before sending it again.
No answer in time.
Retry with backoff
# Example ids: replace file_2c982f413a5e9e79563f8a1fcb5c7caa with an application_id returned by POST /api/v4/resumes/parse.
curl https://hirelayer.co/api/v4/resumes/file_2c982f413a5e9e79563f8a1fcb5c7caa \
-H "X-API-Key: $HIRELAYER_API_KEY"# Example ids: replace file_2c982f413a5e9e79563f8a1fcb5c7caa with an application_id returned by POST /api/v4/resumes/parse.
import os
import requests
response = requests.get(
"https://hirelayer.co/api/v4/resumes/file_2c982f413a5e9e79563f8a1fcb5c7caa",
headers={"X-API-Key": os.environ["HIRELAYER_API_KEY"]},
timeout=30,
)
response.raise_for_status()
data = response.json()
print(data["resume"])// Example ids: replace file_2c982f413a5e9e79563f8a1fcb5c7caa with an application_id returned by POST /api/v4/resumes/parse.
const response = await fetch('https://hirelayer.co/api/v4/resumes/file_2c982f413a5e9e79563f8a1fcb5c7caa', {
headers: {
'X-API-Key': process.env.HIRELAYER_API_KEY!,
},
signal: AbortSignal.timeout(30_000),
})
if (!response.ok) {
throw new Error(`HireLayer ${response.status}: ${await response.text()}`)
}
const data = await response.json()
console.log(data.resume){
"error": {
"code": "invalid_request",
"message": "application_id must contain letters, digits and . _ : ~ -, up to 200 characters.",
"param": "application_id",
"doc_url": "https://hirelayer.co/api-docs/errors#invalid_request"
},
"request_id": "6f1c2a4e-1d2b-4c3a-9e8f-0a1b2c3d4e5f"
}/api/v4/resumes/{application_id}Stores under your application_id a resume you already have as text, or as the parsed resume JSON of POST /resumes/parse. Replaces the resume stored before. When its text changes, its scores become stale and are evaluated again only when asked; the same text sent again leaves them as they are. Free. To store a file, use POST /resumes/parse with application_id.
- Authentication
X-API-Keyheader- Billing
- Free
- Client timeout
- Client timeout ≥ 60 s
Path parameters
application_idstringrequiredThe resume's id, including one returned by the legacy
/api/v3/parserininfo_resume.application_id.
Headers
HireLayer-WorkspacestringYour customer's workspace id. Case-insensitive, created on first use. Absent, calls use
default.
Request body
Content type application/json
Send exactly one of text or resume.
textstringThe resume as plain text.
1–50,000 characters
resumeobjectThe parsed resume JSON, from
POST /resumes/parse(resume) or the legacy/api/v3/parser, kept as is, 1 MB at most (413), arrays and objects nested 100 levels deep at most (400).
Response
200Replaced.
application_idstringworkspacestringfile_namestring | nullmay be absentName of the file the resume was parsed from, as sent.
nullfor a resume sent as a text or a parsed JSON.textstringThe resume's plain text.
resumeParsedResume | nullThe structured resume,
nullwhen only plain text was stored.job_idsstring[]Jobs the resume was scored against.
created_atstring (date-time)updated_atstring (date-time)
201Created.
application_idstringworkspacestringfile_namestring | nullmay be absentName of the file the resume was parsed from, as sent.
nullfor a resume sent as a text or a parsed JSON.textstringThe resume's plain text.
resumeParsedResume | nullThe structured resume,
nullwhen only plain text was stored.job_idsstring[]Jobs the resume was scored against.
created_atstring (date-time)updated_atstring (date-time)
Errors
- 400invalid_requesttext or resume is required.
param:text. Neithertextnorresume, or both.Fix, then retry
- 400
- 400invalid_requestresume must be the JSON object returned by the Resume Parser.
param:resume.resumeis not a parsed resume, or has noinfo_resume.text.Fix, then retry
- 400invalid_requestapplication_id must contain letters, digits and . _ : ~ -, up to 200 characters.
param:application_id.application_idin the path is not a valid id.Fix, then retry
- 400invalid_requestUnknown field candidate.
param:candidate. A field the call does not take.Fix, then retry
- 400invalid_requestThe request body is not valid JSON.
The body is not valid JSON, not an object, or not sent as
application/json.Fix, then retry
- 400invalid_requestHireLayer-Workspace must contain letters, digits and . _ : ~ -, up to 200 characters.
param:HireLayer-Workspace.HireLayer-Workspaceis not a valid id.Fix, then retry
- 400storage_requiredThis workspace runs without storage (do_not_store_data): nothing can be stored in it.
param:HireLayer-Workspace. The workspace runs without storage, and the call would store something in it.Do not retry
- 401
- 401missing_api_keyAuthorization: Bearer is not accepted: send the key in the X-API-Key header.
The key sent as
Authorization: Bearer: it goes inX-API-Key.Fix, then retry
- 401missing_api_keyThe key goes in the X-API-Key header, not in the URL.
The key sent in the URL: it goes in
X-API-Key.Fix, then retry
- 401invalid_api_keyInvalid API key: it is unknown, malformed or revoked.
The key is unknown, malformed or revoked.
Fix, then retry
- 413payload_too_largetext must be 50,000 characters or less.
param:text. The text is over 50,000 characters.Fix, then retry
- 413payload_too_largeresume must be 1 MB or less.
param:resume. The parsed resume is over 1 MB.Fix, then retry
- 413
- 500internal_errorInternal error: retry later. If it persists, contact support with the request_id.
An unexpected error.
Retry with backoff
- 502internal_errorThe service could not be reached: retry later.
The service could not be reached.
Retry with backoff
- 503internal_errorThe credit service is briefly unavailable: retry in a second.
The credit service is briefly unavailable. Header
Retry-After: <seconds>.Retry with backoff
- 504internal_errorThe service did not answer in time. The change may still be applied: read it before sending it again.
No answer in time.
Retry with backoff
curl -X PUT https://hirelayer.co/api/v4/resumes/cand-1042 \
-H "X-API-Key: $HIRELAYER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Alex Morgan, Senior Software Engineer in Paris. 7 years of Node.js and TypeScript…"
}'import os
import requests
response = requests.put(
"https://hirelayer.co/api/v4/resumes/cand-1042",
headers={"X-API-Key": os.environ["HIRELAYER_API_KEY"]},
json={
"text": "Alex Morgan, Senior Software Engineer in Paris. 7 years of Node.js and TypeScript…",
},
timeout=60,
)
response.raise_for_status()
data = response.json()
print(data["application_id"])const response = await fetch('https://hirelayer.co/api/v4/resumes/cand-1042', {
method: 'PUT',
headers: {
'X-API-Key': process.env.HIRELAYER_API_KEY!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
text: 'Alex Morgan, Senior Software Engineer in Paris. 7 years of Node.js and TypeScript…',
}),
signal: AbortSignal.timeout(60_000),
})
if (!response.ok) {
throw new Error(`HireLayer ${response.status}: ${await response.text()}`)
}
const data = await response.json()
console.log(data.application_id){
"error": {
"code": "invalid_request",
"message": "text or resume is required.",
"param": "text",
"doc_url": "https://hirelayer.co/api-docs/errors#invalid_request"
},
"request_id": "6f1c2a4e-1d2b-4c3a-9e8f-0a1b2c3d4e5f"
}/api/v4/resumes/{application_id}Erases the resume, its file and all its scores (GDPR erasure). Erasing a resume that does not exist is not an error. Free.
- Authentication
X-API-Keyheader- Billing
- Free
- Client timeout
- Client timeout ≥ 30 s
Path parameters
application_idstringrequiredThe resume's id, including one returned by the legacy
/api/v3/parserininfo_resume.application_id.
Headers
HireLayer-WorkspacestringYour customer's workspace id. Case-insensitive, created on first use. Absent, calls use
default.
Response
204Erased.
Errors
- 400invalid_requestapplication_id must contain letters, digits and . _ : ~ -, up to 200 characters.
param:application_id.application_idin the path is not a valid id.Fix, then retry
- 400invalid_requestHireLayer-Workspace must contain letters, digits and . _ : ~ -, up to 200 characters.
param:HireLayer-Workspace.HireLayer-Workspaceis not a valid id.Fix, then retry
- 401
- 401missing_api_keyAuthorization: Bearer is not accepted: send the key in the X-API-Key header.
The key sent as
Authorization: Bearer: it goes inX-API-Key.Fix, then retry
- 401missing_api_keyThe key goes in the X-API-Key header, not in the URL.
The key sent in the URL: it goes in
X-API-Key.Fix, then retry
- 401invalid_api_keyInvalid API key: it is unknown, malformed or revoked.
The key is unknown, malformed or revoked.
Fix, then retry
- 500internal_errorInternal error: retry later. If it persists, contact support with the request_id.
An unexpected error.
Retry with backoff
- 502internal_errorThe service could not be reached: retry later.
The service could not be reached.
Retry with backoff
- 503internal_errorThe erasure could not be finished: send the same call again to finish it.
An erasure could not be finished: the same call finishes it. Header
Retry-After: <seconds>.Retry with backoff
- 504internal_errorThe service did not answer in time. The change may still be applied: read it before sending it again.
No answer in time.
Retry with backoff
curl -X DELETE https://hirelayer.co/api/v4/resumes/cand-1042 \
-H "X-API-Key: $HIRELAYER_API_KEY"import os
import requests
response = requests.delete(
"https://hirelayer.co/api/v4/resumes/cand-1042",
headers={"X-API-Key": os.environ["HIRELAYER_API_KEY"]},
timeout=30,
)
response.raise_for_status()
print(response.status_code)const response = await fetch('https://hirelayer.co/api/v4/resumes/cand-1042', {
method: 'DELETE',
headers: {
'X-API-Key': process.env.HIRELAYER_API_KEY!,
},
signal: AbortSignal.timeout(30_000),
})
if (!response.ok) {
throw new Error(`HireLayer ${response.status}: ${await response.text()}`)
}
console.log(response.status){
"error": {
"code": "invalid_request",
"message": "application_id must contain letters, digits and . _ : ~ -, up to 200 characters.",
"param": "application_id",
"doc_url": "https://hirelayer.co/api-docs/errors#invalid_request"
},
"request_id": "6f1c2a4e-1d2b-4c3a-9e8f-0a1b2c3d4e5f"
}