Skip to content

Create Job Application

The Create Job Application endpoint lets an external integration submit a candidate’s application to a specific Nextal job. It accepts a single canonical application payload, so any integration source can post the same body shape.

Resource Path

PropertyValue
url{source}/{tenant}/{jobId}
methodPOST

Headers

FieldDescription
Content-TypeMedia type of the request body. Must be application/json.
Accept-LanguageLanguage of the result; if none (or an unconfigured one) is provided, the default language will be provided

Parameters

FieldDescription
sourcethe integration source/provider key assigned to your integration; it identifies where the application originates and does not change the request body schema
tenantthe Nextal tenant the job belongs to
jobIdthe target job; the server injects this value into the application’s job.jobId, overwriting any jobId placed in the body

How source works

The source path segment only identifies the integration that is submitting the application — it is recorded for tracking and routing. It does not alter the request body schema: every source posts the same canonical payload described below. Pass the provider key your integration was assigned, the target tenant, and the jobId of the job being applied to.

A job application carries the candidate’s personal information — name, contact details, résumé, and screening answers. Before submitting an application, you must have obtained the candidate’s informed consent to collect this information and transmit it to the employer through Nextal, in accordance with applicable privacy laws, including Québec’s Law 25.

Send only the personal information needed for the application, and keep your own consent records. The receiving employer (the tenant) is responsible for the personal information once the application is submitted.

Request body

The body is a single canonical application object. All fields are optional unless noted; unknown or null fields are omitted. The top-level structure is:

FieldTypeRequiredDescription
localeStringNoLocale of the application (for example en, fr_CA).
appliedOnMillisLongNoEpoch timestamp (milliseconds) of when the application was submitted.
jobObject (Job)NoThe job the candidate applied to. See Job object.
applicantObject (Applicant)YesThe candidate and their resume. See Applicant object.
screenerQuestionsAndAnswersObject (QuestionsAndAnswers)NoScreener questions and the candidate’s answers. See QuestionsAndAnswers object.
demographicQuestionsAndAnswersObject (QuestionsAndAnswers)NoDemographic questions and answers (same shape as screener). See QuestionsAndAnswers object.
analyticsObject (Analytics)NoSource/device analytics for the application. See Analytics object.

Job object

The jobId here is overwritten by the jobId path parameter.

FieldTypeRequiredDescription
jobIdStringNoTarget job id. Overwritten by the path jobId.
jobTitleStringNoJob title at the source.
jobCompanyStringNoCompany name at the source.
jobLocationStringNoJob location at the source.
jobUrlStringNoURL of the job posting at the source.
jobMetaStringNoOpaque source metadata.

Applicant object

FieldTypeRequiredDescription
idStringNoApplicant id at the source.
fullNameStringNoCandidate full name.
emailStringNoCandidate email address.
phoneNumberStringNoCandidate phone number.
coverletterStringNoCover letter text.
resumeObject (Resume)NoThe candidate resume. See Resume object.

Resume object

Provide the resume in one or more representations; a binary file plus structured json is the most complete.

FieldTypeRequiredDescription
textStringNoPlain-text resume.
jsonObject (Json)NoStructured resume. See Resume json object.
fileObject (File)NoBinary resume file. See File object.

File object

FieldTypeRequiredDescription
contentTypeStringNoMIME type of the file (for example application/pdf).
dataStringNoBase64-encoded file content.
fileNameStringNoOriginal file name.

Resume json object

Structured resume data.

FieldTypeRequiredDescription
firstNameStringNoFirst name.
lastNameStringNoLast name.
headlineStringNoProfessional headline.
summaryStringNoProfessional summary.
publicProfileUrlStringNoPublic profile URL.
additionalInfoStringNoAdditional free-form information.
phoneNumberStringNoPhone number.
locationObject (Location)NoCandidate location. See Location object.
skillsStringNoSkills (free-form string).
positionsObject (Positions)NoWork history. List wrapper, see List wrappers.
educationsObject (Educations)NoEducation history. List wrapper.
linksObject (Links)NoExternal links. List wrapper.
awardsObject (Awards)NoAwards. List wrapper.
certificationsObject (Certifications)NoCertifications. List wrapper.
associationsObject (Associations)NoProfessional associations. List wrapper.
patentsObject (Patents)NoPatents. List wrapper.
publicationsObject (Publications)NoPublications. List wrapper.
militaryServicesObject (MilitaryServices)NoMilitary service records. List wrapper.

Location object

FieldTypeRequiredDescription
cityStringNoCity.
countryStringNoCountry.
postalCodeStringNoPostal/ZIP code.

List wrappers

Every collection inside resume.json (positions, educations, links, awards, certifications, associations, patents, publications, militaryServices) uses the same wrapper shape:

FieldTypeRequiredDescription
_totalLongNoNumber of entries in values.
valuesList of objectsNoThe entries; the element type depends on the collection (see below).

positions[].values[] (PositionValues)

FieldTypeDescription
titleStringJob title.
companyStringEmployer.
locationStringLocation.
startDateMonthStringStart month.
startDateYearStringStart year.
endDateMonthStringEnd month.
endDateYearStringEnd year.
endCurrentBooleantrue if this is the current position.
descriptionStringDescription.

educations[].values[] (EducationValues)

FieldTypeDescription
degreeStringDegree obtained.
fieldStringField of study.
schoolStringSchool name.
locationStringSchool location.
startDateStringStart date.
endDateStringEnd date.
endCurrentBooleantrue if currently enrolled.

links[].values[] (LinkValues)

FieldTypeDescription
urlStringThe link URL.

awards[].values[] (AwardValues)

FieldTypeDescription
titleStringAward title.
dateMonthStringAward month.
dateYearStringAward year.
descriptionStringDescription.

certifications[].values[] (CertificationValues)

FieldTypeDescription
titleStringCertification title.
startDateMonthStringStart month.
startDateYearStringStart year.
endDateMonthStringEnd month.
endDateYearStringEnd year.
endCurrentBooleantrue if currently valid.
descriptionStringDescription.

associations[].values[] (AssociationValues)

FieldTypeDescription
titleStringAssociation title.
startDateMonthStringStart month.
startDateYearStringStart year.
endDateMonthStringEnd month.
endDateYearStringEnd year.
endCurrentBooleantrue if currently a member.
descriptionStringDescription.

patents[].values[] (PatentValues)

FieldTypeDescription
patentNumberStringPatent number.
titleStringPatent title.
urlStringPatent URL.
dateMonthStringDate month.
dateYearStringDate year.
descriptionStringDescription.

publications[].values[] (PublicationValues)

FieldTypeDescription
titleStringPublication title.
urlStringPublication URL.
dateDayStringDate day.
dateMonthStringDate month.
dateYearStringDate year.
descriptionStringDescription.

militaryServices[].values[] (MilitaryServiceValues)

FieldTypeDescription
serviceCountryStringCountry of service.
branchStringBranch of service.
rankStringRank attained.
startDateMonthStringStart month.
startDateYearStringStart year.
endDateMonthStringEnd month.
endDateYearStringEnd year.
endCurrentBooleantrue if currently serving.
commendationsStringCommendations.
descriptionStringDescription.

QuestionsAndAnswers object

Used by both screenerQuestionsAndAnswers and demographicQuestionsAndAnswers.

FieldTypeRequiredDescription
urlStringNoSource URL where the questions were retrieved.
retrievedOnMillisLongNoEpoch timestamp (milliseconds) when the questions were retrieved.
questionsAndAnswersList of objects (QuestionsAndAnswer)NoOne entry per question/answer pair.

questionsAndAnswers[] (QuestionsAndAnswer)

FieldTypeRequiredDescription
questionObject (Question)NoThe question metadata. See Question object.
answerString, Object, or ListNoThe candidate’s answer. For free-text/number/date questions it is a string; for a single select it is an object { "label": ..., "value": ... }; for a multi-select it is a list of such objects.

Question object

FieldTypeRequiredDescription
idStringNoQuestion id.
questionStringNoThe question text.
typeStringNoQuestion type (for example text, number, date, select, multiselect).
requiredBooleanNoWhether an answer is required.
formatStringNoExpected answer format.
minStringNoMinimum value/length constraint.
maxStringNoMaximum value/length constraint.
limitStringNoAnswer limit.
optionsList of objects (Option)NoSelectable options, each { "label": ..., "value": ... }.
hierarchicalOptionsListNoHierarchical options, when applicable.

Analytics object

FieldTypeRequiredDescription
deviceStringNoDevice used to apply.
ipStringNoApplicant IP address.
refererStringNoReferer URL.
userAgentStringNoBrowser user agent.
sponsoredStringNoWhether the application came from a sponsored listing.
targetedApplyAdStringNoTargeted apply ad identifier.

Examples

A complete request example:

{
"locale": "en",
"appliedOnMillis": 1718380800000,
"job": {
"jobTitle": "Senior Software Engineer",
"jobCompany": "Acme Corp",
"jobLocation": "Montréal, QC",
"jobUrl": "https://example.com/jobs/123",
"jobMeta": "src=partner"
},
"applicant": {
"id": "appl_1029",
"fullName": "Jane Doe",
"email": "jane.doe@example.com",
"phoneNumber": "+1-514-555-0142",
"coverletter": "I am excited to apply for this role...",
"resume": {
"text": "Jane Doe — Senior Software Engineer ...",
"json": {
"firstName": "Jane",
"lastName": "Doe",
"headline": "Senior Software Engineer",
"summary": "10+ years building distributed systems.",
"publicProfileUrl": "https://example.com/in/janedoe",
"phoneNumber": "+1-514-555-0142",
"location": {
"city": "Montréal",
"country": "CA",
"postalCode": "H2X 1Y4"
},
"skills": "Java, Spring Boot, MongoDB, Kubernetes",
"positions": {
"_total": 1,
"values": [
{
"title": "Senior Software Engineer",
"company": "Globex",
"location": "Montréal, QC",
"startDateMonth": "01",
"startDateYear": "2019",
"endCurrent": true,
"description": "Lead backend engineer."
}
]
},
"educations": {
"_total": 1,
"values": [
{
"degree": "B.Sc. Computer Science",
"field": "Computer Science",
"school": "McGill University",
"location": "Montréal, QC",
"startDate": "2011",
"endDate": "2015",
"endCurrent": false
}
]
},
"links": {
"_total": 1,
"values": [
{ "url": "https://github.com/janedoe" }
]
}
},
"file": {
"contentType": "application/pdf",
"fileName": "jane-doe-resume.pdf",
"data": "JVBERi0xLjQKJ..."
}
}
},
"screenerQuestionsAndAnswers": {
"url": "https://example.com/jobs/123/questions",
"retrievedOnMillis": 1718380000000,
"questionsAndAnswers": [
{
"question": {
"id": "q1",
"question": "Are you legally authorized to work in Canada?",
"type": "select",
"required": true,
"options": [
{ "label": "Yes", "value": "yes" },
{ "label": "No", "value": "no" }
]
},
"answer": { "label": "Yes", "value": "yes" }
},
{
"question": {
"id": "q2",
"question": "Years of experience with Java?",
"type": "number",
"required": true
},
"answer": "10"
}
]
},
"demographicQuestionsAndAnswers": {
"questionsAndAnswers": [
{
"question": {
"id": "d1",
"question": "How did you hear about us?",
"type": "text",
"required": false
},
"answer": "Online job board"
}
]
},
"analytics": {
"device": "desktop",
"ip": "203.0.113.7",
"referer": "https://www.example.com",
"userAgent": "Mozilla/5.0",
"sponsored": "false",
"targetedApplyAd": "ad_55"
}
}

Responses & errors

On success the endpoint returns HTTP 200 OK with an empty body — the application is accepted and queued for processing into the target tenant. There is no response payload.

StatusMeaning
200 OKApplication accepted.
400 Bad RequestThe body is malformed or fails validation (for example missing applicant data, unparseable JSON).
404 Not FoundThe source, tenant, or jobId could not be resolved.
415 Unsupported Media TypeThe Content-Type is not application/json.
500 Internal Server ErrorUnexpected processing failure.

Error bodies are returned as JSON.

{
"timestamp": "2026-06-14T12:00:00.000+00:00",
"status": 400,
"error": "Bad Request",
"message": "Malformed application body",
"path": "/partner/demo/5c875c8b2c17ca56a9806c9f"
}