Odoo 19.0 Community · Persistent

hr.applicant: fields, relations and API

The hr.applicant model ("Applicant") is a persistent model declared by the Recruitment module, then extended by 4 other modules. It exposes 109 fields, 69 of them declared directly on the model; 11 fields from other models point to it. Below you will find every field with its technical name, type, label and relations, followed by an Odoo 19 JSON-2 API call.

Model identity

Technical name
hr.applicant
Label
Applicant
Type
Persistent (models.Model)
SQL table
hr_applicant
Origin module
Recruitment (hr_recruitment)
Extended by
hr_recruitment_skills, hr_recruitment_sms, hr_recruitment_survey, website_hr_recruitment
Default order (_order)
priority desc, sequence, id desc
Display field (_rec_name)
partner_name
Inherits from (mixins)
mail.thread.ccmail.thread.main.attachmentmail.thread.blacklistmail.thread.phonemail.activity.mixinutm.mixinmail.tracking.duration.mixin

Model fields

69 own fields, 35 inherited from mixins and 5 automatic ORM fields. Click a name to get a direct link to that field.

109 of 109 fields shown

Technical nameLabelTypeDetails
activeActive

If the active field is set to false, it will allow you to hide the case without removing it.

boolean
applicant_notesApplicant Noteshtml
applicant_propertiesPropertiesproperties
applicant_skill_idsSkillsone2many

inverse: applicant_id

added by Recruitment - Skills Management (hr_recruitment_skills)

application_countApplication Count

Applications with the same email or phone or mobile

integer
computed
application_statusApplication Statusselection
computed

Values: ongoing (Ongoing), hired (Hired), refused (Refused), archived (Archived)

attachment_idsAttachmentsone2many

inverse: res_id

attachment_numberNumber of Attachmentsinteger
computed
availabilityAvailability

The date at which the applicant will be available to start working

date
campaign_idCampaignmany2one
categ_idsTagsmany2many
colorColor Indexinteger
company_idCompanymany2one
computed, stored
create_dateApplied ondatetime
read-only
current_applicant_skill_idsCurrent Applicant Skillone2many
computed

inverse: applicant_id

added by Recruitment - Skills Management (hr_recruitment_skills)

date_closedHire Datedatetime
computed, stored
date_last_stage_updateLast Stage Updatedatetime
date_openAssigneddatetime
read-only
day_closeDays to Closefloat
computed
day_openDays to Openfloat
computed
delay_closeDelay to Close

Number of days to close

float
read-onlycomputed, stored
department_idDepartmentmany2one
computed, stored
email_fromEmailchar
computed, stored
email_normalizedEmail Normalizedchar
emp_is_activeEmployee Activeboolean

related: employee_id.active

employee_idEmployee

Employee linked to the applicant.

many2one
employee_nameEmployee Namechar

related: employee_id.name

interviewer_idsInterviewersmany2many
is_applicant_in_poolIs Applicant In Poolboolean
computed
is_pool_applicantIs Pool Applicantboolean
computed
job_idJob Positionmany2one
→ hr.job
kanban_stateKanban Stateselection
required

Values: normal (In Progress), done (Ready for Next Stage), waiting (Waiting), blocked (Blocked)

last_stage_idLast Stage

Stage of the applicant before being in the current stage. Used for lost cases analysis.

many2one
legend_blockedKanban Blockedchar

related: stage_id.legend_blocked

legend_doneKanban Validchar

related: stage_id.legend_done

legend_normalKanban Ongoingchar

related: stage_id.legend_normal

legend_waitingKanban Waitingchar

related: stage_id.legend_waiting

linkedin_profileLinkedIn Profilechar
matching_scoreMatching Scoreinteger
computed

added by Recruitment - Skills Management (hr_recruitment_skills)

matching_skill_idsMatching Skillsmany2many
computed

added by Recruitment - Skills Management (hr_recruitment_skills)

medium_idMedium

This displays how the applicant has reached out, e.g. via Email, LinkedIn, Website, etc.

many2one
meeting_display_dateMeeting Display Datedate
computed
meeting_display_textMeeting Display Textchar
computed
meeting_idsMeetingsone2many

inverse: applicant_id

missing_skill_idsMissing Skillsmany2many
computed

added by Recruitment - Skills Management (hr_recruitment_skills)

partner_idContactmany2one
partner_nameApplicant's Namechar
partner_phonePhonechar
computed, stored
partner_phone_sanitizedSanitized Phone Numberchar
computed, stored
pool_applicant_idPool Applicantmany2one
priorityEvaluationselection

Values: 0 (Normal), 1 (Good), 2 (Very Good), 3 (Excellent)

probabilityProbabilityfloat
refuse_dateRefuse Datedatetime
refuse_reason_idRefuse Reasonmany2one
response_idsResponsesone2many

inverse: applicant_id

added by Hr Recruitment Interview Forms (hr_recruitment_survey)

salary_expectedExpected

Salary Expected by Applicant

float
salary_expected_extraExpected Salary Extra

Salary Expected by Applicant, extra advantages

char
salary_proposedProposed

Salary Proposed by the Organisation

float
salary_proposed_extraProposed Salary Extra

Salary Proposed by the Organisation, extra advantages

char
sequenceSequenceinteger
skill_idsSkillmany2many
computed, stored

added by Recruitment - Skills Management (hr_recruitment_skills)

source_idSourcemany2one
stage_idStagemany2one
computed, stored
survey_idSurveymany2one
read-only

related: job_id.survey_id

added by Hr Recruitment Interview Forms (hr_recruitment_survey)

talent_pool_countTalent Pool Countinteger
computed
talent_pool_idsTalent Poolsmany2many
type_idDegreemany2one
user_emailUser Emailchar
read-only

related: user_id.email

user_idRecruitermany2one
computed, stored
activity_calendar_event_idNext Activity Calendar Eventmany2one
computed

inherited from mail.activity.mixin

activity_date_deadlineNext Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

activity_exception_decorationActivity Exception Decoration

Type of the exception activity on record.

selection
computed

Values: warning (Alert), danger (Error)

inherited from mail.activity.mixin

activity_exception_iconIcon

Icon to indicate an exception activity.

char
computed

inherited from mail.activity.mixin

activity_idsActivitiesone2many

inverse: res_id

inherited from mail.activity.mixin

activity_stateActivity State

Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities.

selection
computed

Values: overdue (Overdue), today (Today), planned (Planned)

inherited from mail.activity.mixin

activity_summaryNext Activity Summarychar

related: activity_ids.summary

inherited from mail.activity.mixin

activity_type_iconActivity Type Iconchar

related: activity_ids.icon

inherited from mail.activity.mixin

activity_type_idNext Activity Typemany2one

related: activity_ids.activity_type_id

inherited from mail.activity.mixin

activity_user_idResponsible Usermany2one
read-onlycomputed

inherited from mail.activity.mixin

duration_trackingStatus time

JSON that maps ids from a many2one field to seconds spent

json
computed

inherited from mail.tracking.duration.mixin

email_ccEmail ccchar

inherited from mail.thread.cc

has_messageHas Messageboolean
computed

inherited from mail.thread

is_blacklistedBlacklist

If the email address is on the blacklist, the contact won't receive mass mailing anymore, from any list

boolean
computed

inherited from mail.thread.blacklist

is_rottingRottingboolean
computed

inherited from mail.tracking.duration.mixin

message_attachment_countAttachment Countinteger
computed

inherited from mail.thread

message_bounceBounce

Counter of the number of bounced emails for this contact

integer

inherited from mail.thread.blacklist

message_follower_idsFollowersone2many

inverse: res_id

inherited from mail.thread

message_has_errorMessage Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_has_error_counterNumber of errors

Number of messages with delivery error

integer
computed

inherited from mail.thread

message_has_sms_errorSMS Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_idsMessagesone2many

inverse: res_id

inherited from mail.thread

message_is_followerIs Followerboolean
computed

inherited from mail.thread

message_main_attachment_idMain Attachmentmany2one

inherited from mail.thread.main.attachment

message_needactionAction Needed

If checked, new messages require your attention.

boolean
computed

inherited from mail.thread

message_needaction_counterNumber of Actions

Number of messages requiring action

integer
computed

inherited from mail.thread

message_partner_idsFollowers (Partners)many2many
computed

inherited from mail.thread

my_activity_date_deadlineMy Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

phone_blacklistedBlacklisted Phone is Phone

Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model.

boolean
computed

inherited from mail.thread.phone

phone_sanitizedSanitized Number

Field used to store sanitized phone number. Helps speeding up searches and comparisons.

char
computed, stored

inherited from mail.thread.phone

phone_sanitized_blacklistedPhone Blacklisted

If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list

boolean
computed

inherited from mail.thread.phone

rating_idsRatingsone2many

inverse: res_id

inherited from mail.thread

rotting_daysDays Rotting

Day count since this resource was last updated

integer
computed

inherited from mail.tracking.duration.mixin

website_message_idsWebsite Messages

Website communication history

one2many

inverse: res_id

inherited from mail.thread

create_uidCreated bymany2one
read-onlyautomatic
display_nameDisplay Namechar
read-onlycomputedautomatic
idIDinteger
read-onlyautomatic
write_dateLast Updated ondatetime
read-onlyautomatic
write_uidLast Updated bymany2one
read-onlyautomatic

Relations

Models linked from this model

Fields of other models pointing here

Reading this model through the API

Odoo 19 JSON-2 API call reading the first five records with real fields of the model. Replace the instance, database and API key with your own.

curl
curl -X POST "https://your-instance.odoo.com/json/2/hr.applicant/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: your-db" \
  -H "Content-Type: application/json" \
  -d '{"domain":[],"fields":["partner_name","kanban_state","campaign_id","company_id","department_id"],"limit":5}'
Python (requests)
import requests

BASE_URL = "https://your-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "your-db"}

res = requests.post(
    f"{BASE_URL}/hr.applicant/search_read",
    headers=headers,
    json={"domain": [], "fields": ["partner_name","kanban_state","campaign_id","company_id","department_id"], "limit": 5},
)
res.raise_for_status()
print(res.json())
  • External API access requires Odoo's Custom plan.
  • XML-RPC and JSON-RPC will be removed in Odoo 22 (fall 2028): use JSON-2.
  • The access rights and record rules of the key's user apply.

Cite this tool

Writing a tutorial, internal documentation or a forum answer? Copy this link to send your readers to the up-to-date reference.

<a href="https://aidoo.ai/en/outils/explorateur-modeles-odoo/hr-applicant">hr.applicant (Odoo 19.0)</a>

Sources

Data verified on September 23, 2026 · Odoo 19.0 Community

Have an Odoo project, or want to put your ERP to work with AI? Let's talk

Implementation, custom module development, connecting Claude or ChatGPT to your data: tell us about your context and we will reply within 24 business hours.