product.template: fields, relations and API
The product.template model ("Product") is a persistent model declared by the Products & Pricelists module, then extended by 41 other modules. It exposes 205 fields, 156 of them declared directly on the model; 33 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
product.template- Label
- Product
- Type
- Persistent (models.Model)
- SQL table
product_template- Origin module
- Products & Pricelists (
product) - Extended by
- account, sale, stock, stock_account, sale_stock, stock_delivery, event_product, event_sale, event_booth_sale, hr_expense, point_of_sale, loyalty, mrp, mrp_account, purchase, purchase_stock, stock_landed_costs, product_expiry, repair, sale_purchase, partnership, pos_discount, pos_sale, pos_loyalty, pos_self_order, product_email_template, product_matrix, sale_project, sale_expense, sale_gelato, sale_product_matrix, sale_timesheet, website_sale, website_sale_slides, website_event_booth_sale, website_event_sale, website_sale_stock, website_sale_collect, website_sale_wishlist, website_sale_gelato, website_sale_stock_wishlist
- Default order (_order)
is_favorite desc, name- Inherits from (mixins)
- mail.threadmail.activity.mixinimage.mixinpos.load.mixinrating.mixinwebsite.seo.metadata
website.published.multi.mixinwebsite.searchable.mixin
Model fields
156 own fields, 43 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
205 of 205 fields shown
| Technical name | Label | Type | Details |
|---|---|---|---|
| accessory_product_ids | Accessory Products Accessories show up when the customer reviews the cart before payment (cross-sell strategy). | many2many | added by eCommerce ( |
| account_tag_ids | Account Tags Tags to be set on the base and tax journal items created for this product. | many2many | added by Invoicing ( |
| active | Active If unchecked, it will allow you to hide the product without removing it. | boolean | |
| alert_time | Alert Date Number of days before the Expiration Date after which an alert should be raised on the lot/serial number. It will be computed on the lot/serial number. | integer | added by Products Expiration Date ( |
| allow_out_of_stock_order | Sell when Out-of-Stock | boolean | added by Product Availability ( |
| alternative_product_ids | Alternative Products Suggest alternatives to your customer (upsell strategy). Those products show up on the product page. | many2many | added by eCommerce ( |
| attribute_line_ids | Product Attributes | one2many | inverse: |
| available_in_pos | Available in POS Check if you want this product to appear in the Point of Sale. | boolean | added by Point of Sale ( |
| available_threshold | Show Threshold | float | added by Product Availability ( |
| barcode | Barcode | char | computed |
| base_unit_count | Base Unit Count Display base unit price on your eCommerce pages. Set to 0 to hide it for this product. | float | requiredcomputed, stored added by eCommerce ( |
| base_unit_id | Custom Unit of Measure Define a custom unit to display in the price per unit of measure field. | many2one | computed, stored added by eCommerce ( |
| base_unit_name | Base Unit Name Displays the custom unit for the products if defined or the selected unit of measure otherwise. | char | computed added by eCommerce ( |
| base_unit_price | Price Per Unit | monetary | computed added by eCommerce ( |
| bom_count | # Bill of Material | integer | computed added by Manufacturing ( |
| bom_ids | Bill of Materials | one2many→ mrp.bom | inverse: added by Manufacturing ( |
| bom_line_ids | BoM Components | one2many | inverse: added by Manufacturing ( |
| can_be_expensed | Expenses Specify whether the product can be selected in an expense. | boolean | computed, stored added by Expenses ( |
| can_image_1024_be_zoomed | Can Image 1024 be zoomed | boolean | computed, stored |
| categ_id | Product Category | many2one | |
| color | Color Index | integer | computed, stored |
| combo_ids | Combo Choices | many2many | |
| company_id | Company | many2one | |
| compare_list_price | Compare to Price Add a strikethrough price to your /shop and product pages for comparison purposes.It will not be displayed if pricelists apply. | monetary | added by eCommerce ( |
| cost_currency_id | Cost Currency | many2one | computed |
| cost_method | Cost Method | selection | computed Values: added by WMS Accounting ( |
| country_of_origin | Origin of Goods Rules of origin determine where goods originate, i.e. not where they have been shipped from, but where they have been produced or manufactured. As such, the ‘origin’ is the 'economic nationality' of goods traded in commerce. | many2one | added by Delivery - Stock ( |
| currency_id | Currency | many2one | computed |
| default_code | Internal Reference | char | computed, stored |
| description | Description | html | translatable |
| description_ecommerce | eCommerce Description | html | added by eCommerce ( |
| description_picking | Description on Picking | text | translatable added by Inventory ( |
| description_pickingin | Description on Receptions | text | translatable added by Inventory ( |
| description_pickingout | Description on Delivery Orders | text | translatable added by Inventory ( |
| description_purchase | Purchase Description | text | translatable |
| description_sale | Sales Description A description of the Product that you want to communicate to your customers. This description will be copied to every Sales Order, Delivery Order and Customer Invoice/Credit Note | text | translatable |
| email_template_id | Product Email Template When validating an invoice, an email will be sent to the customer based on this template. The customer will receive an email for each product linked to an email template. | many2one | added by Product Email Template ( |
| expense_policy | Re-Invoice Costs Validated expenses, vendor bills, or stock pickings (set up to track costs) can be invoiced to the customer at either cost or sales price. | selection | computed, stored Values: added by Sales ( |
| expense_policy_tooltip | Expense Policy Tooltip | char | computed added by Sales Expense ( |
| expiration_time | Expiration Date Number of days after the receipt of the products (from the vendor or in stock after production) after which the goods may become dangerous and must not be consumed. It will be computed on the lot/serial number. | integer | added by Products Expiration Date ( |
| fiscal_country_codes | Fiscal Country Codes | char | computed added by Invoicing ( |
| gelato_image_ids | Gelato Print Images | one2many | read-only inverse: added by Gelato ( |
| gelato_missing_images | Missing Print Images | boolean | computed added by Gelato ( |
| gelato_product_uid | Gelato Product UID | char | read-onlycomputed added by Gelato ( |
| gelato_template_ref | Gelato Template Reference Synchronize to fetch variants from Gelato | char | added by Gelato ( |
| grade_id | Assigned Level | many2one | added by Partnership / Membership ( |
| has_available_route_ids | Routes can be selected on this product | boolean | computed added by Inventory ( |
| has_configurable_attributes | Is a configurable product | boolean | computed, stored |
| hs_code | HS Code Standardized code for international shipping and goods declaration. | char | added by Delivery - Stock ( |
| import_attribute_values | Product Values | char | computed |
| incoming_qty | Incoming | float | computed added by Inventory ( |
| invoice_policy | Invoicing Policy Ordered Quantity: Invoice quantities ordered by the customer. Delivered Quantity: Invoice quantities delivered to the customer. | selection | computed, stored Values: added by Sales ( |
| is_dynamically_created | Is Dynamically Created | boolean | computed |
| is_favorite | Favorite | boolean | |
| is_kits | Is Kits | boolean | computed added by Manufacturing ( |
| is_product_variant | Is a product variant | boolean | computed |
| is_storable | Track Inventory A storable product is a product for which you manage stock. | boolean | computed, stored added by Inventory ( |
| landed_cost_ok | Is a Landed Cost Indicates whether the product is a landed cost: when receiving a vendor bill, you can allocate this cost on preceding receipts. | boolean | added by WMS Landed Costs ( |
| list_price | Sales Price Price at which the product is sold to customers. | float | |
| location_id | Location | many2one | added by Inventory ( |
| lot_sequence_id | Serial/Lot Numbers Sequence Technical Field: The Ir.Sequence record that is used to generate serial/lot numbers for this product | many2one | added by Inventory ( |
| lot_valuated | Valuation by Lot/Serial If checked, the valuation will be specific by Lot/Serial number. | boolean | computed, stored added by WMS Accounting ( |
| mrp_product_qty | Manufactured | float | computed added by Manufacturing ( |
| name | Name | char | requiredtranslatable |
| nbr_moves_in | Nbr Moves In Number of incoming stock moves in the past 12 months | integer | computed added by Inventory ( |
| nbr_moves_out | Nbr Moves Out Number of outgoing stock moves in the past 12 months | integer | computed added by Inventory ( |
| nbr_reordering_rules | Reordering Rules | integer | computed added by Inventory ( |
| next_serial | Next Serial | char | computed added by Inventory ( |
| optional_product_ids | Optional Products Optional Products are suggested whenever the customer hits *Add to Cart* (cross-sell strategy, e.g. for computers: warranty, software, etc.). | many2many | added by Sales ( |
| out_of_stock_message | Out-of-Stock Message | html | added by Product Availability ( |
| outgoing_qty | Outgoing | float | computed added by Inventory ( |
| pos_categ_ids | Point of Sale Category Category used in the Point of Sale. | many2many | added by Point of Sale ( |
| pos_optional_product_ids | POS Optional Products Optional products are suggested when customers add items to their cart (e.g., adding a burger suggests cold drinks or fries). | many2many | added by Point of Sale ( |
| pos_sequence | POS Sequence Determine the display order in the POS Terminal | integer | added by Point of Sale ( |
| pricelist_rule_ids | Pricelist Rules | one2many | inverse: |
| product_add_mode | Add product mode Configurator: choose attribute values to add the matching product variant to the order. Grid: add several variants at once from the grid of attribute values | selection | Values: added by Sale Matrix ( |
| product_document_count | Documents Count | integer | computed |
| product_document_ids | Documents | one2many | inverse: |
| product_properties | Properties | properties | |
| product_tag_ids | Tags | many2many | |
| product_template_image_ids | Extra Product Media | one2many | inverse: added by eCommerce ( |
| product_tooltip | Product Tooltip | char | computed |
| product_variant_count | # Product Variants | integer | computed |
| product_variant_id | Product | many2one | computed |
| product_variant_ids | Products | one2many | required inverse: |
| project_id | Project | many2one | company-dependent added by Sales - Project ( |
| project_template_id | Project Template | many2one | company-dependent added by Sales - Project ( |
| property_account_expense_id | Expense Account Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used. | many2one | company-dependent added by Invoicing ( |
| property_account_income_id | Income Account Keep this field empty to use the default value from the product category. | many2one | company-dependent added by Invoicing ( |
| property_price_difference_account_id | Price Difference Account With perpetual valuation, this account will hold the price difference between the standard price and the bill price. | many2one | company-dependent added by WMS Accounting ( |
| property_stock_inventory | Inventory Location This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory. | many2one | company-dependent added by Inventory ( |
| property_stock_production | Production Location This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders. | many2one | company-dependent added by Inventory ( |
| public_categ_ids | Website Product Category The product will be available in each mentioned eCommerce category. Go to Shop > Edit Click on the page and enable 'Categories' to view all eCommerce categories. | many2many | added by eCommerce ( |
| public_description | Product Description | html | translatable added by Point of Sale ( |
| publish_date | Publish Date | datetime | requiredcomputed, stored added by eCommerce ( |
| purchase_line_warn_msg | Message for Purchase Order Line | text | added by Purchase ( |
| purchase_method | Control Policy On ordered quantities: Control bills based on ordered quantities. On received quantities: Control bills based on received quantities. | selection | computed, stored Values: added by Purchase ( |
| purchase_ok | Purchase | boolean | computed, stored |
| purchased_product_qty | Purchased | float | computed added by Purchase ( |
| qty_available | Quantity On Hand | float | computed added by Inventory ( |
| removal_time | Removal Date Number of days before the Expiration Date after which the goods should be removed from the stock and not be counted in the Fresh On Hand Stock anymore.It will be computed on the lot/serial number. | integer | added by Products Expiration Date ( |
| reordering_max_qty | Reordering Max Qty | float | computed added by Inventory ( |
| reordering_min_qty | Reordering Min Qty | float | computed added by Inventory ( |
| responsible_id | Responsible This user will be responsible of the next activities related to logistic operations for this product. | many2one | company-dependent added by Inventory ( |
| route_from_categ_ids | Category Routes | many2many | related: added by Inventory ( |
| route_ids | Routes Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, replenished on order, etc. | many2many | added by Inventory ( |
| sale_delay | Customer Lead Time Delivery lead time, in days. It's the number of days, promised to the customer, between the confirmation of the sales order and the delivery. | integer | added by Inventory ( |
| sale_line_warn_msg | Sales Order Line Warning | text | added by Sales ( |
| sale_ok | Sales | boolean | |
| sales_count | Sold | float | computed added by Sales ( |
| self_order_available | Available in Self Order If this product is available in the Self Order screens | boolean | added by POS Self Order ( |
| self_order_visible | Self Order Visible | boolean | computed added by POS Self Order ( |
| seller_ids | Vendors | one2many | inverse: |
| sequence | Sequence Gives the sequence order when displaying a product list | integer | |
| serial_prefix_format | Custom Lot/Serial | char | computed added by Inventory ( |
| service_policy | Service Invoicing Policy | selection | computed Values computed at runtime added by Sales - Project ( |
| service_to_purchase | Subcontract Service If ticked, each time you sell this product through a SO, a RfQ is automatically created to buy the product. Tip: don't forget to set a vendor on the product. | boolean | company-dependent added by Sale Purchase ( |
| service_tracking | Create on Order | selection | requiredcomputed, stored Values: |
| service_type | Track Service Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account. Timesheets on contract: Invoice based on the tracked hours on the related timesheet. Create a task and track hours: Create a task on the sales order validation and track the work hours. | selection | computed, stored Values: added by Sales ( |
| service_upsell_threshold | Threshold Percentage of time delivered compared to the prepaid amount that must be reached for the upselling opportunity activity to be triggered. | float | added by Sales Timesheet ( |
| service_upsell_threshold_ratio | Service Upsell Threshold Ratio | char | computed added by Sales Timesheet ( |
| show_availability | Show availability Qty | boolean | added by Product Availability ( |
| show_forecasted_qty_status_button | Show Forecasted Qty Status Button | boolean | computed added by Inventory ( |
| show_on_hand_qty_status_button | Show On Hand Qty Status Button | boolean | computed added by Inventory ( |
| show_qty_update_button | Show Qty Update Button | boolean | computed added by Inventory ( |
| split_method_landed_cost | Default Split Method Default Split Method when used for Landed Cost | selection | Values computed at runtime added by WMS Landed Costs ( |
| standard_price | Cost Value of the product (automatically computed in AVCO). Used to value the product when the purchase cost is not known (e.g. inventory adjustment). Used to compute margins on sale orders. | float | computed |
| supplier_taxes_id | Purchase Taxes Default taxes used when buying the product | many2many | added by Invoicing ( |
| task_template_id | Task Template | many2one | computed, storedcompany-dependent added by Sales - Project ( |
| tax_string | Tax String | char | computed added by Invoicing ( |
| taxes_id | Sales Taxes Default taxes used when selling the product | many2many | added by Invoicing ( |
| to_weight | To Weigh With Scale Check if the product should be weighted using the hardware scale integration. | boolean | added by Point of Sale ( |
| tracking | Tracking Ensure the traceability of a storable product in your warehouse. | selection | requiredcomputed, stored Values: added by Inventory ( |
| type | Product Type Goods are tangible materials and merchandise you provide. A service is a non-material product you provide. | selection | required Values: |
| uom_id | Unit Default unit of measure used for all stock operations. | many2one→ uom.uom | required |
| uom_ids | Packagings Additional packagings for this product which can be used for sales | many2many→ uom.uom | |
| uom_name | Unit Name | char | read-only related: |
| use_expiration_date | Use Expiration Date When this box is ticked, you have the possibility to specify dates to manage product expiration, on the product and on the corresponding lot/serial numbers | boolean | added by Products Expiration Date ( |
| use_time | Best Before Date Number of days before the Expiration Date after which the goods starts deteriorating, without being dangerous yet. It will be computed on the lot/serial number. | integer | added by Products Expiration Date ( |
| used_in_bom_count | # of BoM Where is Used | integer | computed added by Manufacturing ( |
| valid_product_template_attribute_line_ids | Valid Product Attribute Lines | many2many | computed |
| valuation | Valuation | selection | computed Values: added by WMS Accounting ( |
| variant_seller_ids | Variant Seller | one2many | inverse: |
| variants_default_code | Variants Default Code Technical field to enhance performance when looking up default code of productvariants (LIKE/ILIKE) | char | computed, stored added by eCommerce ( |
| virtual_available | Forecasted Quantity | float | computed added by Inventory ( |
| visible_expense_policy | Re-Invoice Policy visible | boolean | computed added by Sales ( |
| volume | Volume | float | computed, stored |
| volume_uom_name | Volume unit of measure label | char | computed |
| warehouse_id | Warehouse | many2one | added by Inventory ( |
| website_description | Description for the website | html | added by eCommerce ( |
| website_ribbon_id | Ribbon | many2one | added by eCommerce ( |
| website_sequence | Website Sequence Determine the display order in the Website E-commerce | integer | added by eCommerce ( |
| website_size_x | Size X | integer | added by eCommerce ( |
| website_size_y | Size Y | integer | added by eCommerce ( |
| weight | Weight | float | computed, stored |
| weight_uom_name | Weight unit of measure label | char | computed |
| 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 |
| has_message | Has Message | boolean | computed inherited from mail.thread |
| image_1024 | Image 1024 | image | related: inherited from image.mixin |
| image_128 | Image 128 | image | related: inherited from image.mixin |
| image_1920 | Image | image | inherited from image.mixin |
| image_256 | Image 256 | image | related: inherited from image.mixin |
| image_512 | Image 512 | image | related: inherited from image.mixin |
| 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_avg | Average Rating | float | computed inherited from rating.mixin |
| rating_avg_text | Rating Avg Text | selection | computed Values: inherited from rating.mixin |
| rating_count | Rating count | integer | computed inherited from rating.mixin |
| rating_ids | Ratings | one2many | inverse: inherited from mail.thread |
| rating_last_feedback | Rating Last Feedback | text | related: inherited from rating.mixin |
| rating_last_image | Rating Last Image | binary | related: inherited from rating.mixin |
| rating_last_text | Rating Text | selection | related: inherited from rating.mixin |
| rating_last_value | Rating Last Value | float | computed, stored inherited from rating.mixin |
| rating_percentage_satisfaction | Rating Satisfaction | float | computed inherited from rating.mixin |
| 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
- account.account: property_account_expense_id, property_account_income_id, property_price_difference_account_id
- account.account.tag: account_tag_ids
- account.tax: supplier_taxes_id, taxes_id
- ir.sequence: lot_sequence_id
- mail.template: email_template_id
- mrp.bom: bom_ids
- mrp.bom.line: bom_line_ids
- pos.category: pos_categ_ids
- product.category: categ_id
- product.combo: combo_ids
- product.document: gelato_image_ids, product_document_ids
- product.image: product_template_image_ids
- product.pricelist.item: pricelist_rule_ids
- product.product: accessory_product_ids, product_variant_id, product_variant_ids
- product.public.category: public_categ_ids
- product.ribbon: website_ribbon_id
- product.supplierinfo: seller_ids, variant_seller_ids
- product.tag: product_tag_ids
- product.template: alternative_product_ids, optional_product_ids, pos_optional_product_ids
- product.template.attribute.line: attribute_line_ids, valid_product_template_attribute_line_ids
- project.project: project_id, project_template_id
- project.task: task_template_id
- res.company: company_id
- res.country: country_of_origin
- res.currency: cost_currency_id, currency_id
- res.partner.grade: grade_id
- res.users: responsible_id
- stock.location: location_id, property_stock_inventory, property_stock_production
- stock.route: route_from_categ_ids, route_ids
- stock.warehouse: warehouse_id
- uom.uom: uom_id, uom_ids
- website.base.unit: base_unit_id
Fields of other models pointing here
- mrp.bom: product_tmpl_id
- mrp.bom.line: parent_product_tmpl_id, product_tmpl_id
- mrp.production: product_tmpl_id
- product.attribute: product_tmpl_ids
- product.image: product_tmpl_id
- product.label.layout: product_tmpl_ids
- product.pricelist.item: product_tmpl_id
- product.product: product_tmpl_id
- product.public.category: product_tmpl_ids
- product.replenish: product_tmpl_id
- product.supplierinfo: product_tmpl_id
- product.tag: product_template_ids
- product.template: alternative_product_ids, optional_product_ids, pos_optional_product_ids
- product.template.attribute.exclusion: product_tmpl_id
- product.template.attribute.line: product_tmpl_id
- product.template.attribute.value: product_tmpl_id
- purchase.order: grid_product_tmpl_id
- purchase.order.line: product_template_id
- purchase.report: product_tmpl_id
- report.pos.order: product_tmpl_id
- report.stock.quantity: product_tmpl_id
- sale.order: grid_product_tmpl_id
- sale.order.line: product_template_id
- sale.report: product_tmpl_id
- stock.move: product_tmpl_id
- stock.quant: product_tmpl_id
- stock.route: product_ids
- stock.rules.report: product_tmpl_id
- stock.scrap: product_template
- stock.warehouse.orderpoint: product_tmpl_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/product.template/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: your-db" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["name","base_unit_count","publish_date","service_tracking","tracking"],"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}/product.template/search_read",
headers=headers,
json={"domain": [], "fields": ["name","base_unit_count","publish_date","service_tracking","tracking"], "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/product-template">product.template (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.