mrp.bom: fields, relations and API
The mrp.bom model ("Bill of Material") is a persistent model declared by the Manufacturing module, then extended by 4 other modules. It exposes 45 fields, 26 of them declared directly on the model; 16 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
mrp.bom- Label
- Bill of Material
- Type
- Persistent (models.Model)
- SQL table
mrp_bom- Origin module
- Manufacturing (
mrp) - Extended by
- mrp_subcontracting, purchase_mrp, project_mrp, sale_mrp
- Default order (_order)
sequence, id- Display field (_rec_name)
product_tmpl_id- Inherits from (mixins)
- mail.threadproduct.catalog.mixin
Model fields
26 own fields, 13 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
45 of 45 fields shown
| Technical name | Label | Type | Details |
|---|---|---|---|
| active | Active | boolean | |
| allow_operation_dependencies | Operation Dependencies Create operation level dependencies that will influence both planning and the status of work orders upon MO confirmation. If this feature is ticked, and nothing is specified, Odoo will assume that all operations can be started simultaneously. | boolean | |
| batch_size | Batch Size All automatically generated manufacturing orders for this product will be of this size. | float | |
| bom_line_ids | BoM Lines | one2many | inverse: |
| byproduct_ids | By-products | one2many | inverse: |
| code | Reference | char | |
| company_id | Company | many2one | |
| consumption | Flexible Consumption Defines if you can consume more or less components than the quantity defined on the BoM: * Allowed: allowed for all manufacturing users. * Allowed with warning: allowed for all manufacturing users with summary of consumption differences when closing the manufacturing order. Note that in the case of component Highlight Consumption, where consumption is registered manually exclusively, consumption warnings will still be issued when appropriate also. * Blocked: only a manager can close a manufacturing order when the BoM consumption is not respected. | selection | required Values: |
| days_to_prepare_mo | Days to prepare Manufacturing Order Create and confirm Manufacturing Orders this many days in advance, to have enough time to replenish components or manufacture semi-finished products. | integer | |
| enable_batch_size | Enable Batch Size | boolean | |
| operation_count | Operations Count | integer | computed |
| operation_ids | Operations | one2many | inverse: |
| picking_type_id | Operation Type When a procurement has a ‘produce’ route with a operation type set, it will try to create a Manufacturing Order for that product using a BoM of the same operation type.If not,the operation type is not taken into account in the BoM search. That allows to define stock rules which trigger different manufacturing orders with different BoMs. | many2one | |
| possible_product_template_attribute_value_ids | Possible Product Template Attribute Value | many2many | computed |
| produce_delay | Manufacturing Lead Time Average lead time in days to manufacture this product. In the case of multi-level BOM, the manufacturing lead times of the components will be added. In case the product is subcontracted, this can be used to determine the date at which components should be sent to the subcontractor. | integer | |
| product_id | Product Variant If a product variant is defined the BOM is available only for this product. | many2one | |
| product_qty | Quantity This should be the smallest quantity that this product can be produced in. If the BOM contains operations, make sure the work center capacity is accurate. | float | required |
| product_tmpl_id | Product | many2one | required |
| product_uom_id | Unit Unit of Measure (Unit of Measure) is the unit of measurement for the inventory control | many2one→ uom.uom | required |
| project_id | Project | many2one | added by MRP Project ( |
| ready_to_produce | Manufacturing Readiness | selection | required Values: |
| sequence | Sequence | integer | |
| show_copy_operations_button | Show Copy Operations Button Technical field used to control the visibility of the 'Copy Existing Operations' button. | boolean | computed |
| show_set_bom_button | Show Set Bom Button | boolean | computed |
| subcontractor_ids | Subcontractors | many2many | added by MRP Subcontracting ( |
| type | BoM Type | selection | required Values: |
| 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 |
| 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
- mrp.bom.byproduct: byproduct_ids
- mrp.bom.line: bom_line_ids
- mrp.routing.workcenter: operation_ids
- product.product: product_id
- product.template: product_tmpl_id
- product.template.attribute.value: possible_product_template_attribute_value_ids
- project.project: project_id
- res.company: company_id
- res.partner: subcontractor_ids
- stock.picking.type: picking_type_id
- uom.uom: product_uom_id
Fields of other models pointing here
- account.analytic.account: bom_ids
- mrp.bom.byproduct: bom_id
- mrp.bom.line: bom_id, child_bom_id
- mrp.production: bom_id
- mrp.routing.workcenter: bom_id
- mrp.unbuild: bom_id, mo_bom_id
- mrp.workorder: production_bom_id
- res.partner: bom_ids
- stock.replenish.mixin: bom_id
- stock.replenishment.info: bom_id, bom_ids
- stock.scrap: bom_id
- stock.warehouse.orderpoint: bom_id, effective_bom_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/mrp.bom/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: your-db" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["product_tmpl_id","consumption","product_qty","product_uom_id","ready_to_produce"],"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}/mrp.bom/search_read",
headers=headers,
json={"domain": [], "fields": ["product_tmpl_id","consumption","product_qty","product_uom_id","ready_to_produce"], "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/mrp-bom">mrp.bom (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.