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.metadata
website.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 name | Label | Type | Details |
|---|---|---|---|
| active | Active | boolean | |
| activity_count | Activity Count | integer | computed added by Recruitment ( |
| address_id | Job Location Select the location where the applicant will work. Addresses listed here are defined on the company's contact information. | many2one | added by Recruitment ( |
| alias_id | Alias Email alias for this job position. New emails will automatically create new applicants for this job position. | many2one | added by Recruitment ( |
| all_application_count | All Application Count | integer | computed added by Recruitment ( |
| allowed_user_ids | Allowed User | many2many | read-onlycomputed |
| applicant_hired | Applicants Hired | integer | computed added by Recruitment ( |
| applicant_matching_score | Matching Score(%) | float | computed added by Recruitment - Skills Management ( |
| applicant_properties_definition | Applicant Properties | properties_definition | added by Recruitment ( |
| application_count | Application Count | integer | computed added by Recruitment ( |
| application_ids | Job Applications | one2many | inverse: added by Recruitment ( |
| color | Color Index | integer | added by Recruitment ( |
| company_id | Company | many2one | |
| contract_type_id | Employment Type | many2one | |
| current_job_skill_ids | Current Job Skill | one2many | computed added by Skills Management ( |
| department_id | Department | many2one | |
| description | Job Description | html | |
| document_ids | Documents | one2many | read-onlycomputed added by Recruitment ( |
| documents_count | Document Count | integer | computed added by Recruitment ( |
| employee_count | Employee Count | integer | computed added by Recruitment ( |
| employee_ids | Employees | one2many | inverse: |
| expected_degree | Expected Degree | many2one | added by Recruitment ( |
| expected_employees | Total Forecasted Employees Expected number of employees for this job position after new recruitment. | integer | computed |
| extended_interviewer_ids | Extended Interviewer | many2many | computed, stored added by Recruitment ( |
| favorite_user_ids | Favorite User | many2many | added by Recruitment ( |
| full_url | job URL | char | computed added by Online Jobs ( |
| industry_id | Industry | many2one | added by Recruitment ( |
| interviewer_ids | Interviewers 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 ( |
| is_favorite | Is Favorite | boolean | computed added by Recruitment ( |
| job_details | Process Details Complementary information that will appear on the job submission page | html | translatable added by Online Jobs ( |
| job_properties | Properties | properties | added by Recruitment ( |
| job_skill_ids | Skills | one2many | inverse: added by Skills Management ( |
| job_source_ids | Job Source | one2many | inverse: added by Recruitment ( |
| manager_id | Department Manager | many2one | read-only related: added by Recruitment ( |
| name | Job Position | char | requiredtranslatable |
| new_application_count | New Application Number of applications that are new in the flow (typically at first step of the flow) | integer | computed added by Recruitment ( |
| no_of_employee | Current Number of Employees Number of employees currently occupying this job position. | integer | computed |
| no_of_hired_employee | Hired Number of hired employees for this job position during recruitment phase. | integer | computed, stored added by Recruitment ( |
| no_of_recruitment | Target Number of new employees you expect to recruit. | integer | |
| old_application_count | Old Application | integer | computed added by Recruitment ( |
| open_application_count | Open Application Count Number of applications that are still ongoing (not hired or refused) | integer | computed added by Recruitment ( |
| published_date | Published Date | date | computed, stored added by Online Jobs ( |
| requirements | Requirements | text | |
| sequence | Sequence | integer | |
| skill_ids | Skill | many2many→ hr.skill | computed, stored added by Skills Management ( |
| survey_id | Interview 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 ( |
| user_id | Recruiter 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_description | Website description | html | added by Online Jobs ( |
| website_published | Website Published Set if the application is published on the website of the company. | boolean | added by Online Jobs ( |
| activity_calendar_event_id | Next Activity Calendar Event | many2one | computed inherited from mail.activity.mixin |
| activity_date_deadline | Next Activity Deadline | date | read-onlycomputed inherited from mail.activity.mixin |
| activity_exception_decoration | Activity Exception Decoration Type of the exception activity on record. | selection | computed Values: inherited from mail.activity.mixin |
| activity_exception_icon | Icon Icon to indicate an exception activity. | char | computed inherited from mail.activity.mixin |
| activity_ids | Activities | one2many | inverse: inherited from mail.activity.mixin |
| activity_state | Activity State Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities. | selection | computed Values: inherited from mail.activity.mixin |
| activity_summary | Next Activity Summary | char | related: inherited from mail.activity.mixin |
| activity_type_icon | Activity Type Icon | char | related: inherited from mail.activity.mixin |
| activity_type_id | Next Activity Type | many2one | related: inherited from mail.activity.mixin |
| activity_user_id | Responsible User | many2one | read-onlycomputed inherited from mail.activity.mixin |
| alias_defaults | Alias Defaults | text | inherited from mail.alias.mixin |
| alias_domain | Alias Domain Name | char | related: inherited from mail.alias.mixin.optional |
| alias_domain_id | Alias Domain | many2one | related: inherited from mail.alias.mixin.optional |
| alias_email | Email Alias | char | computed inherited from mail.alias.mixin.optional |
| alias_name | Alias Name | char | inherited from mail.alias.mixin |
| has_message | Has Message | boolean | computed inherited from mail.thread |
| is_seo_optimized | SEO optimized | boolean | computed, stored inherited from website.seo.metadata |
| message_attachment_count | Attachment Count | integer | computed inherited from mail.thread |
| message_follower_ids | Followers | one2many | inverse: inherited from mail.thread |
| message_has_error | Message Delivery error If checked, some messages have a delivery error. | boolean | computed inherited from mail.thread |
| message_has_error_counter | Number of errors Number of messages with delivery error | integer | computed inherited from mail.thread |
| message_has_sms_error | SMS Delivery error If checked, some messages have a delivery error. | boolean | computed inherited from mail.thread |
| message_ids | Messages | one2many | inverse: inherited from mail.thread |
| message_is_follower | Is Follower | boolean | computed inherited from mail.thread |
| message_needaction | Action Needed If checked, new messages require your attention. | boolean | computed inherited from mail.thread |
| message_needaction_counter | Number of Actions Number of messages requiring action | integer | computed inherited from mail.thread |
| message_partner_ids | Followers (Partners) | many2many | computed inherited from mail.thread |
| my_activity_date_deadline | My Activity Deadline | date | read-onlycomputed inherited from mail.activity.mixin |
| rating_ids | Ratings | one2many | inverse: inherited from mail.thread |
| seo_name | Seo name | char | translatable inherited from website.seo.metadata |
| website_message_ids | Website Messages Website communication history | one2many | inverse: inherited from mail.thread |
| website_meta_description | Website meta description | text | translatable inherited from website.seo.metadata |
| website_meta_keywords | Website meta keywords | char | translatable inherited from website.seo.metadata |
| website_meta_og_img | Website opengraph image | char | inherited from website.seo.metadata |
| website_meta_title | Website meta title | char | translatable inherited from website.seo.metadata |
| create_date | Created on | datetime | read-onlyautomatic |
| create_uid | Created by | many2one | read-onlyautomatic |
| display_name | Display Name | char | read-onlycomputedautomatic |
| id | ID | integer | read-onlyautomatic |
| write_date | Last Updated on | datetime | read-onlyautomatic |
| write_uid | Last Updated by | many2one | read-onlyautomatic |
Relations
Models linked from this model
- hr.applicant: application_ids
- hr.contract.type: contract_type_id
- hr.department: department_id
- hr.employee: employee_ids, manager_id
- hr.job.skill: current_job_skill_ids, job_skill_ids
- hr.recruitment.degree: expected_degree
- hr.recruitment.source: job_source_ids
- hr.skill: skill_ids
- ir.attachment: document_ids
- mail.alias: alias_id
- res.company: company_id
- res.partner: address_id
- res.partner.industry: industry_id
- res.users: allowed_user_ids, extended_interviewer_ids, favorite_user_ids, interviewer_ids, user_id
- survey.survey: survey_id
Fields of other models pointing here
- hr.applicant: job_id
- hr.employee.public: job_id
- hr.job.skill: job_id
- hr.leave.attendance.report: job_id
- hr.leave.mandatory.day: job_ids
- hr.leave.report.calendar: job_id
- hr.recruitment.source: job_id
- hr.recruitment.stage: job_ids
- hr.version: job_id
- job.add.applicants: job_ids
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 -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}'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.