Odoo 20.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 97 fields, 56 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 20 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.mixinwebsite.structured_data.mixin

Model fields

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

97 of 97 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)

applicant_hiredApplicants Hiredinteger
computed

added by Recruitment (hr_recruitment)

applicant_matching_scoreMatching Score(%)float
computed

added by Recruitment - Skills Management (hr_recruitment_skills)

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_country_codeCompany Country Codechar

related: company_id.country_id.code

company_idCompanymany2one
required
company_partner_idCompany Partnermany2one
computed

added by Recruitment (hr_recruitment)

currency_idCurrencymany2one
read-only

related: company_id.currency_id

added by Recruitment (hr_recruitment)

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

employee_type_idEmployee Typemany2one
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_recruiter_idsFavorite Recruitermany2many

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)

matching_applicant_skill_idsMatching Skillsmany2many
computed

added by Recruitment - Skills Management (hr_recruitment_skills)

missing_applicant_skill_idsMissing Skillsmany2many
computed

added by Recruitment - Skills Management (hr_recruitment_skills)

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)

payment_intervalScheduled Payselection
required

Values: hourly (Hour), daily (Day), weekly (Week), biweekly (Bi-Week), monthly (Month), yearly (Year)

added by Recruitment (hr_recruitment)

recruiter_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
requirementsRequirementstext
salary_maxMaximum Salarymonetary

added by Recruitment (hr_recruitment)

salary_minMinimum Salarymonetary

added by Recruitment (hr_recruitment)

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)

tag_idsTagsmany2many

added by Recruitment (hr_recruitment)

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)

website_ratingWebsite ratinghtml

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_plans_idsActivity Plansmany2many
computed

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_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 20 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","company_id","payment_interval","address_id","alias_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","company_id","payment_interval","address_id","alias_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 20.0)</a>

Sources

Data verified on September 25, 2026 · Odoo 20.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.