calendar.event: fields, relations and API
The calendar.event model ("Calendar Event") is a persistent model declared by the Calendar module, then extended by 7 other modules. It exposes 114 fields, 79 of them declared directly on the model; 8 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
calendar.event- Label
- Calendar Event
- Type
- Persistent (models.Model)
- SQL table
calendar_event- Origin module
- Calendar (
calendar) - Extended by
- calendar_sms, crm, google_calendar, hr_calendar, hr_holidays, hr_recruitment, microsoft_calendar
- Default order (_order)
start desc- Inherits from (mixins)
- mail.threadmail.activity.mixingoogle.event.syncmicrosoft.calendar.sync
Model fields
79 own fields, 29 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
114 of 114 fields shown
| Technical name | Label | Type | Details |
|---|---|---|---|
| accepted_count | Accepted Count | integer | computed |
| access_token | Invitation Token | char | read-only |
| active | Active If the active field is set to false, it will allow you to hide the event alarm information without removing it. | boolean | |
| alarm_ids | Reminders Notifications sent to all attendees to remind of the meeting. | many2many | computed, stored |
| allday | All Day Duration | boolean | |
| applicant_id | Applicant | many2one | added by Recruitment ( |
| attendee_ids | Participant | one2many | inverse: |
| attendees_count | Attendees Count | integer | computed |
| awaiting_count | Awaiting Count | integer | computed |
| byday | By day | selection | computed Values: |
| calendar_color | Calendar Color | integer | related: |
| calendar_id | Calendar | many2one | computed, stored |
| categ_ids | Tags | many2many | |
| count | Number of Repetitions Repeat x times | integer | computed |
| current_attendee | Current Attendee | many2one | computed |
| current_status | Attending? | selection | related: |
| day | Date of month | integer | computed |
| declined_count | Declined Count | integer | computed |
| description | Description When synchronization with an external calendar is active, this description is synchronized with the one of the associated meeting in that external calendar. Any update will be propagated there and vice versa. | html | |
| display_description | Display Description | boolean | computed |
| display_time | Event Time | char | computed |
| duration | Duration | float | computed, stored |
| effective_privacy | Effective Privacy Whether the event is private, considering the user privacy | selection | computed Values: |
| end_type | Recurrence Termination | selection | computed Values: |
| event_tz | Timezone | selection | computed Values computed at runtime |
| follow_recurrence | Follow Recurrence | boolean | |
| fri | Fri | boolean | computed |
| google_calendar_url | Google Calendar URL Link to manually add the meeting to Google Calendar | char | computed |
| google_id | Google Calendar Event Id | char | computed, stored added by Google Calendar ( |
| guests_readonly | Guests Event Modification Permission | boolean | added by Google Calendar ( |
| interval | Repeat On Repeat every (Days/Week/Month/Year) | integer | computed |
| invalid_email_partner_ids | Invalid Email Partner | many2many | computed |
| is_draft | Is draft When True, this field mutes the notifications of the event. It allows to save the event without confirming it and avoids notifying attendees with update messages because some information was unknown at the creation of the event. To prevent event's flow issues, the draft state should be set at the creation of the event and never reset once it is removed. | boolean | |
| is_highlighted | Is the Event Highlighted | boolean | computed |
| is_organizer_alone | Is the Organizer Alone Check if the organizer is alone in the event, i.e. if the organizer is the only one that hasn't declined the event (only if the organizer is not the only attendee) | boolean | computed |
| location | Location | char | |
| meeting_activity_ids | Meeting Activities | one2many | inverse: |
| microsoft_recurrence_master_id | Microsoft Recurrence Master Id | char | added by Outlook Calendar ( |
| microsoft_sync_active | Microsoft Sync Active | boolean | computed added by Outlook Calendar ( |
| mon | Mon | boolean | computed |
| month_by | Option | selection | computed Values: |
| name | Meeting Subject | char | required |
| notes | Notes | html | |
| opportunity_id | Opportunity | many2one→ crm.lead | added by CRM ( |
| partner_id | Scheduled by | many2one | read-only related: |
| partner_ids | Attendees | many2many | |
| privacy | Privacy People to whom this event will be visible. | selection | Values: |
| privacy_placeholder | Privacy Placeholder | char | computed |
| recurrence_id | Recurrence Rule | many2one | |
| recurrence_update | Recurrence Update Choose what to do with other events in the recurrence. Updating All Events is not allowed when dates or time is modified | selection | Values: |
| recurrency | Recurrent | boolean | |
| res_id | Document ID | many2one_reference | |
| res_model | Document Model Name | char | read-only related: |
| res_model_id | Document Model | many2one→ ir.model | |
| res_model_name | Res Model Name | char | related: |
| res_record | Linked to | reference | computed |
| rrule | Recurrent Rule | char | computed |
| rrule_type | Recurrence Let the event automatically repeat at that interval | selection | computed Values: |
| rrule_type_ui | Repeat Let the event automatically repeat at that interval | selection | computed Values: |
| sat | Sat | boolean | computed |
| should_show_status | Should Show Status | boolean | computed |
| show_as | Show as If the time is shown as 'busy', this event will be visible to other people with either the full information or simply 'busy' written depending on its privacy. Use this option to let other people know that you are unavailable during that period of time. If the event is shown as 'free', other users know that you are available during that period of time. | selection | required Values: |
| start | Start Start date of an event, without time for full days events | datetime | required |
| start_date | Start Date | date | computed, stored |
| stop | Stop Stop date of an event, without time for full days events | datetime | requiredcomputed, stored |
| stop_date | End Date | date | computed, stored |
| sun | Sun | boolean | computed |
| tentative_count | Tentative Count | integer | computed |
| thu | Thu | boolean | computed |
| tue | Tue | boolean | computed |
| unavailable_partner_ids | Unavailable Attendees | many2many | computed |
| until | Until | date | computed |
| user_can_edit | User Can Edit | boolean | computed |
| user_id | Organizer | many2one | |
| videocall_channel_id | Discuss Channel | many2one | |
| videocall_location | Meeting URL | char | computed, stored |
| videocall_source | Videocall Source | selection | computed Values: |
| wed | Wed | boolean | computed |
| weekday | Weekday | selection | computed Values: |
| 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 |
| last_google_calendar_sync_path | Last Google Calendar Sync Path | char | inherited from google.event.sync |
| 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 |
| microsoft_id | Organizer event Id | char | inherited from microsoft.calendar.sync |
| ms_universal_event_id | Universal event Id | char | inherited from microsoft.calendar.sync |
| my_activity_date_deadline | My Activity Deadline | date | read-onlycomputed inherited from mail.activity.mixin |
| need_sync | Need Sync | boolean | inherited from google.sync |
| need_sync_m | Need Sync M | boolean | inherited from microsoft.calendar.sync |
| 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
- calendar.alarm: alarm_ids
- calendar.attendee: attendee_ids, current_attendee
- calendar.calendar: calendar_id
- calendar.event.type: categ_ids
- calendar.recurrence: recurrence_id
- crm.lead: opportunity_id
- discuss.channel: videocall_channel_id
- hr.applicant: applicant_id
- ir.model: res_model_id
- mail.activity: meeting_activity_ids
- res.partner: invalid_email_partner_ids, partner_id, partner_ids, unavailable_partner_ids
- res.users: user_id
Fields of other models pointing here
- calendar.attendee: event_id
- calendar.event.archive.or.unlink.wizard: calendar_event_id
- calendar.event.multi.archive.or.unlink.wizard: calendar_event_ids
- calendar.recurrence: base_event_id
- hr.leave: meeting_id
- mail.activity: calendar_event_id
- mail.activity.mixin: activity_calendar_event_id
- res.partner: meeting_ids
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/calendar.event/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: your-db" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["name","show_as","start","stop","applicant_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}/calendar.event/search_read",
headers=headers,
json={"domain": [], "fields": ["name","show_as","start","stop","applicant_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/calendar-event">calendar.event (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.