hr.leave.allocation: fields, relations and API
The hr.leave.allocation model ("Time Off Allocation") is a persistent model declared by the Time Off module, then extended by 1 other module. It exposes 67 fields, 37 of them declared directly on the model; 3 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.leave.allocation- Label
- Time Off Allocation
- Type
- Persistent (models.Model)
- SQL table
hr_leave_allocation- Origin module
- Time Off (
hr_holidays) - Extended by
- hr_holidays_attendance
- Default order (_order)
create_date desc- Inherits from (mixins)
- mail.threadmail.activity.mixin
Model fields
37 own fields, 24 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
67 of 67 fields shown
| Technical name | Label | Type | Details |
|---|---|---|---|
| accrual_plan_id | Accrual Plan | many2one | |
| active_employee | Active Employee | boolean | read-only related: |
| allowed_work_entry_type_ids | Allowed Work Entry Type | many2many | computed |
| approver_id | First Approval This area is automatically filled by the user who validates the allocation | many2one | read-only |
| can_approve | Can Approve | boolean | computed |
| can_refuse | Can Refuse | boolean | computed |
| can_validate | Can Validate | boolean | computed |
| carried_over_days_expiration_date | Carried over days expiration date | date | |
| date_from | Start Date | date | required |
| date_to | End Date | date | |
| department_id | Department | many2one | computed, stored |
| duration_display | Allocated (Days/Hours) Field allowing to see the allocation duration in days or hours depending on the type_request_unit | char | computed |
| employee_company_id | Employee Company | many2one | read-only related: |
| employee_id | Employee | many2one | required |
| hide_accrual_plan_id | Hide Accrual Plan | boolean | computed |
| is_name_custom | Is Name Custom | boolean | read-only |
| is_officer | Is Officer | boolean | computed |
| last_accrual | Date of the last accrual allocation | date | |
| lastcall | Date of the last executed accrual event (accrual, carryover date, expiring carriedover days, ...) | date | |
| leaves_taken | Time off Taken | float | computed |
| manager_id | Manager | many2one | computed, stored |
| max_leaves | Max Leaves | float | computed |
| name | Description | char | computed, stored |
| name_validity | Description with validity | char | computed |
| nextcall | Date of the closest next accrual event (accrual, carryover date, expiring carriedover days, ...) | date | |
| notes | Reasons | text | |
| number_of_days | Number of Days Duration in days. Reference field to use when necessary. | float | |
| number_of_days_display | Duration (days) For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited. | float | computed |
| number_of_hours | Duration (hours) For an Accrual Allocation, this field contains the theorical amount of time given to the employee, due to a previous start date, on the first run of the plan. This can be manually edited. | float | computed, stored |
| previous_carryover_number_of_days | The number of days on previous carryover date | float | |
| second_approver_id | Second Approval This area is automatically filled by the user who validates the allocation with second level (If time type need second validation) | many2one | read-only |
| state | Status The status is 'To Approve', when an allocation request is created. The status is 'Refused', when an allocation request is refused by manager. The status is 'Approved', when an allocation request is approved by manager. | selection | read-only Values: |
| type_request_unit | Type Request Unit | selection | computed Values: |
| validation_type | Validation Type | selection | read-only related: |
| virtual_remaining_leaves | Available Time Off | float | computed |
| work_entry_type_id | Time Type | many2one | requiredcomputed, stored |
| yearly_accrued_days | Number of accrued days since the last carryover | float | |
| 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_plans_ids | Activity Plans | many2many | computed 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 |
| has_message | Has Message | boolean | computed inherited from mail.thread |
| 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 |
| 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.department: department_id
- hr.employee: approver_id, employee_id, manager_id, second_approver_id
- hr.leave.accrual.plan: accrual_plan_id
- hr.work.entry.type: allowed_work_entry_type_ids, work_entry_type_id
- res.company: employee_company_id
Fields of other models pointing here
- hr.leave.report: allocation_id
- hr.time.rule.allocation.log: allocation_id
- hr.version: allocation_from_working_schedule_id
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 -X POST "https://your-instance.odoo.com/json/2/hr.leave.allocation/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: your-db" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["name","date_from","employee_id","work_entry_type_id","state"],"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.leave.allocation/search_read",
headers=headers,
json={"domain": [], "fields": ["name","date_from","employee_id","work_entry_type_id","state"], "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-leave-allocation">hr.leave.allocation (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.