Odoo 19.0 Community · Persistent

hr.job: fields, relations and API

The hr.job model ("Job Position") is a persistent model declared by the Employees module, then extended by 5 other modules. It exposes 90 fields, 49 of them declared directly on the model; 10 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.job
Label
Job Position
Type
Persistent (models.Model)
SQL table
hr_job
Origin module
Employees (hr)
Extended by
hr_recruitment, hr_skills, hr_recruitment_skills, hr_recruitment_survey, website_hr_recruitment
Default order (_order)
sequence, name asc
Inherits from (mixins)
mail.threadmail.alias.mixinmail.activity.mixinwebsite.seo.metadatawebsite.published.multi.mixinwebsite.searchable.mixin

Model fields

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

90 of 90 fields shown

Technical nameLabelTypeDetails
activeActiveboolean
activity_countActivity Countinteger
computed

added by Recruitment (hr_recruitment)

address_idJob Location

Select the location where the applicant will work. Addresses listed here are defined on the company's contact information.

many2one

added by Recruitment (hr_recruitment)

alias_idAlias

Email alias for this job position. New emails will automatically create new applicants for this job position.

many2one

added by Recruitment (hr_recruitment)

all_application_countAll Application Countinteger
computed

added by Recruitment (hr_recruitment)

allowed_user_idsAllowed Usermany2many
read-onlycomputed
applicant_hiredApplicants Hiredinteger
computed

added by Recruitment (hr_recruitment)

applicant_matching_scoreMatching Score(%)float
computed

added by Recruitment - Skills Management (hr_recruitment_skills)

applicant_properties_definitionApplicant Propertiesproperties_definition

added by Recruitment (hr_recruitment)

application_countApplication Countinteger
computed

added by Recruitment (hr_recruitment)

application_idsJob Applicationsone2many

inverse: job_id

added by Recruitment (hr_recruitment)

colorColor Indexinteger

added by Recruitment (hr_recruitment)

company_idCompanymany2one
contract_type_idEmployment Typemany2one
current_job_skill_idsCurrent Job Skillone2many
computed

added by Skills Management (hr_skills)

department_idDepartmentmany2one
descriptionJob Descriptionhtml
document_idsDocumentsone2many
read-onlycomputed

added by Recruitment (hr_recruitment)

documents_countDocument Countinteger
computed

added by Recruitment (hr_recruitment)

employee_countEmployee Countinteger
computed

added by Recruitment (hr_recruitment)

employee_idsEmployeesone2many

inverse: job_id

expected_degreeExpected Degreemany2one

added by Recruitment (hr_recruitment)

expected_employeesTotal Forecasted Employees

Expected number of employees for this job position after new recruitment.

integer
computed
extended_interviewer_idsExtended Interviewermany2many
computed, stored

added by Recruitment (hr_recruitment)

favorite_user_idsFavorite Usermany2many

added by Recruitment (hr_recruitment)

full_urljob URLchar
computed

added by Online Jobs (website_hr_recruitment)

industry_idIndustrymany2one

added by Recruitment (hr_recruitment)

interviewer_idsInterviewers

The Interviewers set on the job position can see all Applicants in it. They have access to the information, the attachments, the meeting management and they can refuse him. You don't need to have Recruitment rights to be set as an interviewer.

many2many

added by Recruitment (hr_recruitment)

is_favoriteIs Favoriteboolean
computed

added by Recruitment (hr_recruitment)

job_detailsProcess Details

Complementary information that will appear on the job submission page

html
translatable

added by Online Jobs (website_hr_recruitment)

job_propertiesPropertiesproperties

added by Recruitment (hr_recruitment)

job_skill_idsSkillsone2many

inverse: job_id

added by Skills Management (hr_skills)

job_source_idsJob Sourceone2many

inverse: job_id

added by Recruitment (hr_recruitment)

manager_idDepartment Managermany2one
read-only

related: department_id.manager_id

added by Recruitment (hr_recruitment)

nameJob Positionchar
requiredtranslatable
new_application_countNew Application

Number of applications that are new in the flow (typically at first step of the flow)

integer
computed

added by Recruitment (hr_recruitment)

no_of_employeeCurrent Number of Employees

Number of employees currently occupying this job position.

integer
computed
no_of_hired_employeeHired

Number of hired employees for this job position during recruitment phase.

integer
computed, stored

added by Recruitment (hr_recruitment)

no_of_recruitmentTarget

Number of new employees you expect to recruit.

integer
old_application_countOld Applicationinteger
computed

added by Recruitment (hr_recruitment)

open_application_countOpen Application Count

Number of applications that are still ongoing (not hired or refused)

integer
computed

added by Recruitment (hr_recruitment)

published_datePublished Datedate
computed, stored

added by Online Jobs (website_hr_recruitment)

requirementsRequirementstext
sequenceSequenceinteger
skill_idsSkillmany2many
computed, stored

added by Skills Management (hr_skills)

survey_idInterview Form

Choose an interview form for this job position and you will be able to print/answer this interview from all applicants who apply for this job

many2one

added by Hr Recruitment Interview Forms (hr_recruitment_survey)

user_idRecruiter

The Recruiter will be the default value for all Applicants in this job position. The Recruiter is automatically added to all meetings with the Applicant.

many2one
website_descriptionWebsite descriptionhtml

added by Online Jobs (website_hr_recruitment)

website_publishedWebsite Published

Set if the application is published on the website of the company.

boolean

added by Online Jobs (website_hr_recruitment)

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

alias_defaultsAlias Defaultstext

inherited from mail.alias.mixin

alias_domainAlias Domain Namechar

related: alias_id.alias_domain

inherited from mail.alias.mixin.optional

alias_domain_idAlias Domainmany2one

related: alias_id.alias_domain_id

inherited from mail.alias.mixin.optional

alias_emailEmail Aliaschar
computed

inherited from mail.alias.mixin.optional

alias_nameAlias Namechar

inherited from mail.alias.mixin

has_messageHas Messageboolean
computed

inherited from mail.thread

is_seo_optimizedSEO optimizedboolean
computed, stored

inherited from website.seo.metadata

message_attachment_countAttachment Countinteger
computed

inherited from mail.thread

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_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

rating_idsRatingsone2many

inverse: res_id

inherited from mail.thread

seo_nameSeo namechar
translatable

inherited from website.seo.metadata

website_message_idsWebsite Messages

Website communication history

one2many

inverse: res_id

inherited from mail.thread

website_meta_descriptionWebsite meta descriptiontext
translatable

inherited from website.seo.metadata

website_meta_keywordsWebsite meta keywordschar
translatable

inherited from website.seo.metadata

website_meta_og_imgWebsite opengraph imagechar

inherited from website.seo.metadata

website_meta_titleWebsite meta titlechar
translatable

inherited from website.seo.metadata

create_dateCreated ondatetime
read-onlyautomatic
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

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.job/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: your-db" \
  -H "Content-Type: application/json" \
  -d '{"domain":[],"fields":["name","address_id","alias_id","company_id","contract_type_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.job/search_read",
    headers=headers,
    json={"domain": [], "fields": ["name","address_id","alias_id","company_id","contract_type_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-job">hr.job (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.