The Odoo connector lets your AI agent act in each user's Odoo account. Each user connects their own Odoo access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 23 tools.
- Tools
- 23
- What they doRead · write · destructive
- 13 · 9 · 113 read9 write1 destructive
- Users sign in with
- Access token
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Odoo connection
In AgentKit > Connections, create an Odoo connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'odoo'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Odoo:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'odoo_get_user_context',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "odoo"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Odoo:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="odoo_get_user_context",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user opens the link once and enters their Odoo credentials there. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolodoo_count_recordsCount the records of an Odoo model that match a domain filter.Read-onlyCount Records
Count the records of an Odoo model that match a domain filter. Returns a single integer. Use this to size a result set before paging through odoo_search_read_records.
Inputs
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
domainarray- Odoo search domain: a list of [field, operator, value] conditions that are ANDed together, optionally using the prefix operators '|' (or), '&' (and) and '!' (not). Example: [["is_company", "=", true], ["name", "ilike", "deco"]]. Omit or pass [] to match every record.
limitinteger- Optional cap on the count; counting stops once this many matches are found, which is faster on very large tables.
odoo_get_model_fieldsDescribe the fields of an Odoo model: technical name, label, type, whether required or read-only, relation target and selection values.Read-onlyGet Model Fields
Describe the fields of an Odoo model: technical name, label, type, whether required or read-only, relation target and selection values. Returns an object keyed by field name. Call this before creating or filtering on an unfamiliar model so field names and valid values are correct.
Inputs
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
attributesarray- Optional list of field attributes to return for each field. Useful values are string, type, required, readonly, relation and selection. Omit for all attributes (large for big models).
fieldsarray- Optional list of field names to describe. Omit to describe every field of the model.
odoo_get_user_contextGet the context of the user that owns the API key, including their user ID (uid), language and timezone.Read-onlyGet Current User Context
Get the context of the user that owns the API key, including their user ID (uid), language and timezone. Returns an object such as {"lang": "en_US", "tz": "Europe/Brussels", "uid": 2}. Use this to learn the authenticated user's ID, for example before assigning records to yourself.
Inputs
This tool takes no inputs.
odoo_list_contactsList contacts (customers, vendors, people and companies) from Odoo, optionally filtered by text or type.Read-onlyList Contacts
List contacts (customers, vendors, people and companies) from Odoo, optionally filtered by text or type. Returns an array of partner records with id, name, email, phone, company flag and address fields. Use this to browse or find contacts. Use odoo_name_search_records when only an id and name are needed, and odoo_create_contact to add one.
Inputs
domainarray- Optional extra Odoo domain ANDed with the other filters, for conditions not covered by the named filters. Example: [["create_date", ">=", "2025-01-01"]].
fieldsarray- List of field names to return per record. Defaults to ['name', 'email', 'phone', 'is_company', 'city', 'country_id', 'parent_id']. Use odoo_get_model_fields to discover other field names.
is_companyboolean- Set true to return only companies, false to return only individuals. Omit for both.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
searchstring- Text to match case-insensitively against name, email or phone. Omit for no text filter.
odoo_list_employeesList employees from Odoo, optionally filtered by text.Read-onlyList Employees
List employees from Odoo, optionally filtered by text. Returns an array of employee records with id, name, job title, work email, work phone and department. Requires the Employees app.
Inputs
domainarray- Optional extra Odoo domain ANDed with the other filters, for conditions not covered by the named filters. Example: [["create_date", ">=", "2025-01-01"]].
fieldsarray- List of field names to return per record. Defaults to ['name', 'job_title', 'work_email', 'work_phone', 'department_id', 'parent_id']. Use odoo_get_model_fields to discover other field names.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
searchstring- Text to match case-insensitively against employee name or work email. Omit for no text filter.
odoo_list_invoicesList customer invoices, vendor bills and credit notes from Odoo, optionally filtered by type, state, payment state or partner.Read-onlyList Invoices and Bills
List customer invoices, vendor bills and credit notes from Odoo, optionally filtered by type, state, payment state or partner. Returns an array of journal entry records with id, number, partner, type, state, payment state, dates and total. Requires the Invoicing or Accounting app. Journal entries that are not invoices are excluded unless move_type is set to entry.
Inputs
domainarray- Optional extra Odoo domain ANDed with the other filters, for conditions not covered by the named filters. Example: [["create_date", ">=", "2025-01-01"]].
fieldsarray- List of field names to return per record. Defaults to ['name', 'partner_id', 'move_type', 'state', 'payment_state', 'invoice_date', 'invoice_date_due', 'amount_total', 'currency_id']. Use odoo_get_model_fields to discover other field names.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 move_typestring- Kind of document: out_invoice is a customer invoice, in_invoice a vendor bill, out_refund a customer credit note, in_refund a vendor credit note. Defaults to customer and vendor invoices and bills.one of
out_invoicein_invoiceout_refundin_refundout_receiptin_receiptentry offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
partner_idinteger- Only return documents for this partner (res.partner ID). Find IDs with odoo_list_contacts.
payment_statestring- Filter by payment state: not_paid, in_payment, paid, partial or reversed. Omit for all.one of
not_paidin_paymentpaidpartialreversed statestring- Filter by posting state: draft, posted or cancel. Omit for all.one of
draftpostedcancel
odoo_list_leadsList CRM leads and opportunities from Odoo, optionally filtered by text, type or probability.Read-onlyList CRM Leads and Opportunities
List CRM leads and opportunities from Odoo, optionally filtered by text, type or probability. Returns an array of lead records with id, name, contact, email, expected revenue, probability, stage and salesperson. Requires the CRM app. Use this to browse the pipeline and odoo_create_lead to add one.
Inputs
domainarray- Optional extra Odoo domain ANDed with the other filters, for conditions not covered by the named filters. Example: [["create_date", ">=", "2025-01-01"]].
fieldsarray- List of field names to return per record. Defaults to ['name', 'partner_id', 'email_from', 'phone', 'expected_revenue', 'probability', 'stage_id', 'user_id', 'type']. Use odoo_get_model_fields to discover other field names.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
searchstring- Text to match case-insensitively against lead name, contact name or email. Omit for no text filter.
typestring- Restrict to raw leads or to opportunities. Omit for both.one of
leadopportunity
odoo_list_productsList products and variants from Odoo, optionally filtered by text or sale availability.Read-onlyList Products
List products and variants from Odoo, optionally filtered by text or sale availability. Returns an array of product records with id, name, internal reference, barcode, sales price and type. Use this to find product IDs for sales order or invoice lines.
Inputs
domainarray- Optional extra Odoo domain ANDed with the other filters, for conditions not covered by the named filters. Example: [["create_date", ">=", "2025-01-01"]].
fieldsarray- List of field names to return per record. Defaults to ['name', 'default_code', 'barcode', 'list_price', 'standard_price', 'type']. Use odoo_get_model_fields to discover other field names.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
sale_okboolean- Set true to return only products that can be sold, false for the rest. Omit for both.
searchstring- Text to match case-insensitively against product name, internal reference or barcode. Omit for no text filter.
odoo_list_sale_ordersList quotations and sales orders from Odoo, optionally filtered by text, state or customer.Read-onlyList Sales Orders
List quotations and sales orders from Odoo, optionally filtered by text, state or customer. Returns an array of order records with id, reference, customer, state, order date and total amount. Requires the Sales app. Use odoo_confirm_sale_order to confirm a quotation.
Inputs
domainarray- Optional extra Odoo domain ANDed with the other filters, for conditions not covered by the named filters. Example: [["create_date", ">=", "2025-01-01"]].
fieldsarray- List of field names to return per record. Defaults to ['name', 'partner_id', 'state', 'date_order', 'amount_total', 'user_id']. Use odoo_get_model_fields to discover other field names.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
partner_idinteger- Only return orders for this customer (res.partner ID). Find IDs with odoo_list_contacts.
searchstring- Text to match case-insensitively against order reference or customer reference. Omit for no text filter.
statestring- Filter by order state: draft is a quotation, sent is a quotation sent, sale is a confirmed order, cancel is cancelled. Omit for all states.one of
draftsentsalecancel
odoo_list_tasksList project tasks from Odoo, optionally filtered by text, project or assignee.Read-onlyList Project Tasks
List project tasks from Odoo, optionally filtered by text, project or assignee. Returns an array of task records with id, name, project, assignees, stage, deadline and priority. Requires the Project app. Use odoo_create_task to add a task.
Inputs
domainarray- Optional extra Odoo domain ANDed with the other filters, for conditions not covered by the named filters. Example: [["create_date", ">=", "2025-01-01"]].
fieldsarray- List of field names to return per record. Defaults to ['name', 'project_id', 'user_ids', 'stage_id', 'date_deadline', 'priority', 'state']. Use odoo_get_model_fields to discover other field names.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
project_idinteger- Only return tasks of this project (project.project ID). Find IDs with odoo_search_read_records on project.project.
searchstring- Text to match case-insensitively against task name. Omit for no text filter.
user_idinteger- Only return tasks assigned to this user (res.users ID). Use odoo_get_user_context for your own ID.
odoo_name_search_recordsFind records of an Odoo model whose display name matches a text pattern, optionally narrowed by a domain.Read-onlySearch Records by Name
Find records of an Odoo model whose display name matches a text pattern, optionally narrowed by a domain. Returns a JSON array of [id, display name] pairs. Use this to resolve a name such as a customer, product or stage to its ID before linking it in a create or update call.
Inputs
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
namestringrequired- Text to match against the record display name. An empty string matches any name.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
domainarray- Odoo search domain: a list of [field, operator, value] conditions that are ANDed together, optionally using the prefix operators '|' (or), '&' (and) and '!' (not). Example: [["is_company", "=", true], ["name", "ilike", "deco"]]. Omit or pass [] to match every record.
limitinteger- Maximum number of records to return. Defaults to 100 to keep responses small; raise it or page with offset for more.default
100 operatorstring- Comparison operator used for the name match. ilike is case-insensitive substring match; = is exact match.one of
ilikelike==ilikenot ilikedefaultilike
odoo_read_recordsRead specific records of an Odoo model by their IDs.Read-onlyRead Records by ID
Read specific records of an Odoo model by their IDs. Returns a JSON array with one object per ID, containing the requested fields; many2one fields come back as [id, display name] pairs. Use this when you already have IDs. Use odoo_search_read_records to find records by filter.
Inputs
idsarrayrequired- Integer IDs of the records to act on. Get IDs from a search or list tool.
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
fieldsarray- List of field names to return per record. Defaults to every field of the model (can be large; always pass fields for a lean response). Use odoo_get_model_fields to discover other field names.
odoo_search_read_recordsSearch any Odoo model with a domain filter and return the matching records with the requested fields.Read-onlySearch and Read Records
Search any Odoo model with a domain filter and return the matching records with the requested fields. Returns a JSON array of record objects; many2one fields come back as [id, display name] pairs. Use this for custom models or complex filters. Use odoo_list_contacts, odoo_list_leads, odoo_list_sale_orders, odoo_list_invoices, odoo_list_products, odoo_list_tasks or odoo_list_employees for those common models, and odoo_count_records when only a total is needed.
Inputs
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
domainarray- Odoo search domain: a list of [field, operator, value] conditions that are ANDed together, optionally using the prefix operators '|' (or), '&' (and) and '!' (not). Example: [["is_company", "=", true], ["name", "ilike", "deco"]]. Omit or pass [] to match every record.
fieldsarray- List of field names to return per record. Defaults to every field of the model (can be large; always pass fields for a lean response). Use odoo_get_model_fields to discover other field names.
limitinteger- Maximum number of records to return. Defaults to 50 to keep responses small; raise it or page with offset for more.default
50 offsetinteger- Number of matching records to skip before returning results, used for paging together with limit.default
0 orderstring- Sort expression as comma-separated 'field asc|desc' terms, for example 'create_date desc' or 'name asc, id desc'. Omit for Odoo's default model order.
odoo_archive_recordsArchive records of an Odoo model so they are hidden from default searches without deleting them.WriteArchive Records
Archive records of an Odoo model so they are hidden from default searches without deleting them. Returns true on success (some models return an action object instead). Use this instead of odoo_delete_records for reversible removal. Only models with an active field support it.
- Idempotent
Inputs
idsarrayrequired- Integer IDs of the records to archive to act on. Get IDs from a search or list tool.
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
odoo_call_model_methodCall any public ORM method on an Odoo model, optionally on specific record IDs, with named arguments.WriteCall Model Method
Call any public ORM method on an Odoo model, optionally on specific record IDs, with named arguments. Returns whatever the method returns: true, a value, a list, or an action object. Use this for workflow actions without a dedicated tool, such as action_confirm, action_post or action_cancel. Prefer the dedicated tools for search, read, create, update and delete.
Inputs
methodstringrequired- Name of the public method to call, without a leading underscore, for example action_confirm, action_post, action_cancel or copy.
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
argumentsobject- Object of named arguments passed to the method. JSON-2 only supports named arguments, so use the exact parameter names from the Odoo method signature. Example for copy: {"default": {"name": "Copy"}}.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
idsarray- IDs of the records the method runs on. Leave empty for model-level methods that do not act on specific records.
odoo_confirm_sale_orderConfirm one or more quotations in Odoo, turning them into sales orders.WriteConfirm Sales Order
Confirm one or more quotations in Odoo, turning them into sales orders. Returns true on success. Requires the Sales app. Use odoo_list_sale_orders with state draft to find quotations.
- Idempotent
Inputs
order_idsarrayrequired- IDs of the quotations (sale.order) to confirm.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
odoo_create_contactCreate a contact (individual or company) in Odoo.WriteCreate Contact
Create a contact (individual or company) in Odoo. Returns a JSON array containing the ID of the new contact. Use odoo_list_contacts first to avoid duplicates. Use odoo_create_records for fields not covered here.
Inputs
namestringrequired- Full name of the person or company.
citystring- City name.
commentstring- Internal notes about the contact.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
emailstring- Email address of the contact.
is_companyboolean- Set true to create a company, false for an individual.default
false parent_idinteger- ID of the company this person works for (res.partner ID).
phonestring- Phone number of the contact.
streetstring- Street address line.
vatstring- VAT or tax identification number.
websitestring- Website URL of the contact.
odoo_create_leadCreate a lead or opportunity in the Odoo CRM pipeline.WriteCreate CRM Lead or Opportunity
Create a lead or opportunity in the Odoo CRM pipeline. Returns a JSON array containing the ID of the new record. Requires the CRM app. Use odoo_list_leads to review the pipeline.
Inputs
namestringrequired- Title of the lead or opportunity.
contact_namestring- Name of the person to contact, used when no customer is linked.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
descriptionstring- Internal notes for the lead.
email_fromstring- Contact email address for the lead.
expected_revenuenumber- Expected revenue of the opportunity in the company currency.
partner_idinteger- ID of an existing contact to link (res.partner ID). Find IDs with odoo_list_contacts.
phonestring- Contact phone number for the lead.
typestring- lead creates a raw lead, opportunity creates an opportunity in the pipeline. Odoo applies the database setting when omitted.one of
leadopportunity user_idinteger- ID of the salesperson (res.users ID). Use odoo_get_user_context for your own ID.
odoo_create_recordsCreate one or more records in any Odoo model from field-value objects.WriteCreate Records
Create one or more records in any Odoo model from field-value objects. Returns a JSON array with the ID of each created record. Use odoo_create_contact, odoo_create_lead or odoo_create_task for those models. Use odoo_get_model_fields first to learn required fields and valid values.
Inputs
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
recordsarrayrequired- Array of objects, one per record to create, each mapping field names to values. Many2one fields take the related record's integer ID; one2many and many2many fields use Odoo command lists such as [[0, 0, {...}]] to create lines and [[6, 0, [ids]]] to set links. Example: [{"name": "Deco Addict", "is_company": true}].
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
odoo_create_taskCreate a task in an Odoo project.WriteCreate Project Task
Create a task in an Odoo project. Returns a JSON array containing the ID of the new task. Requires the Project app. Use odoo_list_tasks to review existing tasks.
Inputs
namestringrequired- Title of the task.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
date_deadlinestring- Deadline as a date and time in UTC, formatted YYYY-MM-DD HH:MM:SS.
descriptionstring- Task description as plain text or HTML.
project_idinteger- ID of the project the task belongs to (project.project ID).
user_idsarray- IDs of the users to assign (res.users IDs). Use odoo_get_user_context for your own ID.
odoo_update_contactUpdate fields of an existing contact in Odoo; only the fields you pass are changed.WriteUpdate Contact
Update fields of an existing contact in Odoo; only the fields you pass are changed. Returns true on success. Use odoo_list_contacts to find the contact ID, and odoo_update_records for fields not covered here.
- Idempotent
Inputs
contact_idintegerrequired- ID of the contact (res.partner) to update.
citystring- New city name.
commentstring- New internal notes (replaces the existing notes).
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
emailstring- New email address.
namestring- New full name.
phonestring- New phone number.
streetstring- New street address line.
websitestring- New website URL.
odoo_update_recordsUpdate the same field values on one or more existing records of an Odoo model.WriteUpdate Records
Update the same field values on one or more existing records of an Odoo model. Returns true on success. Use odoo_update_contact for a single contact. Use odoo_archive_records to deactivate records instead of deleting them.
- Idempotent
Inputs
idsarrayrequired- Integer IDs of the records to act on. Get IDs from a search or list tool.
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
valuesobjectrequired- Object mapping field names to the new values, applied to every record in ids. Many2one fields take the related record's integer ID; one2many and many2many fields use Odoo command lists such as [[6, 0, [ids]]]. Example: {"phone": "+1 555 0100", "comment": "VIP"}.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
odoo_delete_recordsPermanently delete records of an Odoo model by ID.DestructiveDelete Records
Permanently delete records of an Odoo model by ID. Returns true on success. Odoo refuses with an error when other records still reference the targets or business rules forbid deletion. Prefer odoo_archive_records to hide records reversibly; use this only when permanent removal is intended.
- Idempotent
Inputs
idsarrayrequired- Integer IDs of the records to permanently delete to act on. Get IDs from a search or list tool.
modelstringrequired- Technical name of the Odoo model to operate on, with dots (for example res.partner, crm.lead, sale.order, account.move, product.product, project.task, hr.employee). Use odoo_get_model_fields to inspect a model.
contextobject- Optional context object passed to the ORM, for example {"lang": "fr_FR"} for translated values or {"active_test": false} to include archived records in searches.
No tools match.