ir.actions.server: fields, relations and API
The ir.actions.server model ("Server Action") is a persistent model declared by the Base module, then extended by 4 other modules. It exposes 89 fields, 57 of them declared directly on the model; 5 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
ir.actions.server- Label
- Server Action
- Type
- Persistent (models.Model)
- SQL table
ir_act_server- Origin module
- Base (
base) - Extended by
- mail, sms, base_automation, website
- Default order (_order)
sequence,name,id- Inherits from (mixins)
- ir.actions.actionsmail.threadmail.activity.mixin
Model fields
57 own fields, 26 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
89 of 89 fields shown
| Technical name | Label | Type | Details |
|---|---|---|---|
| activity_date_deadline_range | Due Date In | integer | computed, stored added by Discuss ( |
| activity_date_deadline_range_type | Due type | selection | computed, stored Values: added by Discuss ( |
| activity_note | Note | html | computed, stored added by Discuss ( |
| activity_summary | Title | char | computed, stored added by Discuss ( |
| activity_type_id | Activity Type | many2one | computed, stored added by Discuss ( |
| activity_user_field_name | User Field | char | computed, stored added by Discuss ( |
| activity_user_id | Responsible | many2one | computed, stored added by Discuss ( |
| activity_user_type | User Type Use 'Specific User' to always assign the same user on the next activity. Use 'Dynamic User' to specify the field name of the user to choose on the record. | selection | computed, stored Values: added by Discuss ( |
| allowed_states | Allowed states | json | computed |
| automated_name | Automated Name | char | computed, stored |
| available_model_ids | Available Models | many2many→ ir.model | computed |
| base_automation_id | Automation Rule | many2one | added by Automation Rules ( |
| child_ids | Child Actions Child server actions that will be executed. Note that the last return returned action value will be used as global return value. | one2many | inverse: |
| code | Python Code Write Python code that the action will execute. Some variables are available for use; help about python expression is given in the help tab. | text | |
| crud_model_id | Record to Create Specify which kind of record should be created. Set this field only to specify a different model than the base model. | many2one→ ir.model | computed, stored |
| crud_model_name | Target Model Name | char | read-only related: |
| evaluation_type | Value Type | selection | Values: |
| followers_partner_field_name | Followers Field | char | computed, stored added by Discuss ( |
| followers_type | Followers Type - Specific Followers: select specific contacts to add/remove from record's followers. - Dynamic Followers: all contacts of the chosen record's field will be added/removed from followers. | selection | computed, stored Values: added by Discuss ( |
| group_ids | Allowed Groups Groups that can execute the server action. Leave empty to allow everybody. | many2many | |
| html_value | Html Value | html | |
| ir_cron_ids | Scheduled Action | one2many→ ir.cron | inverse: |
| link_field_id | Link Field Specify a field used to link the newly created record on the record used by the server action. | many2one | |
| mail_post_autofollow | Subscribe Recipients | boolean | computed, stored added by Discuss ( |
| mail_post_method | Send Email As | selection | computed, stored Values: added by Discuss ( |
| model_id | Model Model on which the server action runs. | many2one→ ir.model | required |
| model_name | Model Name | char | related: |
| name | Name | char | computed, stored |
| parent_id | Parent Action | many2one | |
| partner_ids | Partner | many2many | computed, stored added by Discuss ( |
| resource_ref | Record | reference | |
| selection_value | Custom Value | many2one | |
| sequence | Sequence When dealing with multiple actions, the execution order is based on the sequence. Low number means high priority. | integer | |
| sequence_id | Sequence to use | many2one | |
| show_code_history | Show Code History | boolean | computed |
| sms_method | Send SMS As | selection | computed, stored Values: added by SMS gateway ( |
| sms_template_id | SMS Template | many2one | computed, stored added by SMS gateway ( |
| state | Type Type of server action. The following values are available: - 'Update a Record': update the values of a record - 'Create Activity': create an activity (Discuss) - 'Send Email': post a message, a note or send an email (Discuss) - 'Send SMS': send SMS, log them on documents (SMS)- 'Add/Remove Followers': add or remove followers to a record (Discuss) - 'Create Record': create a new record with new values - 'Execute Code': a block of Python code that will be executed - 'Send Webhook Notification': send a POST request to an external system, also known as a Webhook - 'Multi Actions': define an action that triggers several other server actions | selection | required Values: |
| template_id | Email Template | many2one | computed, stored added by Discuss ( |
| type | Type | char | |
| update_boolean_value | Boolean Value | selection | Values: |
| update_field_id | Field to Update | many2one | computed, stored |
| update_field_type | Update Field Type | selection | read-only related: |
| update_m2m_operation | Many2many Operations | selection | Values: |
| update_path | Field to Update Path Path to the field to update, e.g. 'partner_id.name' | char | |
| update_related_model_id | Update Related Model | many2one→ ir.model | computed, stored |
| usage | Usage | selection | required Values: |
| value | Value For Python expressions, this field may hold a Python expression that can use the same values as for the code field on the server action,e.g. `env.user.name` to set the current user's name as the value or `record.id` to set the ID of the record on which the action is run. For Static values, the value will be used directly without evaluation, e.g.`42` or `My custom name` or the selected record. | text | |
| value_field_to_show | Value Field To Show | selection | computed Values: |
| warning | Warning | text | computed |
| webhook_field_ids | Webhook Fields Fields to send in the POST request. The id and model of the record are always sent as '_id' and '_model'. The name of the action that triggered the webhook is always sent as '_name'. | many2many | |
| webhook_sample_payload | Sample Payload | text | computed |
| webhook_url | Webhook URL URL to send the POST request to. | char | |
| website_path | Website Path | char | added by Website ( |
| website_published | Available on the Website A code server action can be executed from the website, using a dedicated controller. The address is <base>/website/action/<website_path>. Set this field as True to allow users to run this action. If it is set to False the action cannot be run through the website. | boolean | added by Website ( |
| website_url | Website Url The full URL to access the server action through the website. | char | computed added by Website ( |
| xml_id | External ID ID of the action if defined in a XML file | char | computed added by Website ( |
| 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_type_icon | Activity Type Icon | char | related: inherited from mail.activity.mixin |
| binding_model_id | Binding Model Setting a value makes this action available in the sidebar for the given model. | many2one→ ir.model | inherited from ir.actions.actions |
| binding_type | Binding Type | selection | required Values: inherited from ir.actions.actions |
| binding_view_types | Binding View Types | char | inherited from ir.actions.actions |
| has_message | Has Message | boolean | computed inherited from mail.thread |
| help | Action Description Optional help text for the users with a description of the target view, such as its usage and purpose. | html | translatable inherited from ir.actions.actions |
| 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 |
| path | Path to show in the URL | char | inherited from ir.actions.actions |
| rating_ids | Ratings | one2many | inverse: inherited from mail.thread |
| website_message_ids | Website Messages Website communication history | 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
- base.automation: base_automation_id
- ir.actions.server: child_ids, parent_id
- ir.cron: ir_cron_ids
- ir.model: available_model_ids, crud_model_id, model_id, update_related_model_id
- ir.model.fields: link_field_id, update_field_id, webhook_field_ids
- ir.model.fields.selection: selection_value
- ir.sequence: sequence_id
- mail.activity.type: activity_type_id
- mail.template: template_id
- res.groups: group_ids
- res.partner: partner_ids
- res.users: activity_user_id
- sms.template: sms_template_id
Fields of other models pointing here
- ir.actions.server: parent_id
- ir.actions.server.history: action_id
- ir.cron: ir_actions_server_id
- server.action.history.wizard: action_id
- website.snippet.filter: action_server_id
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/ir.actions.server/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: your-db" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["name","model_id","state","usage","activity_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}/ir.actions.server/search_read",
headers=headers,
json={"domain": [], "fields": ["name","model_id","state","usage","activity_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/ir-actions-server">ir.actions.server (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.