purchase.order: fields, relations and API
The purchase.order model ("Purchase Order") is a persistent model declared by the Purchase module, then extended by 14 other modules. It exposes 104 fields, 71 of them declared directly on the model; 14 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
purchase.order- Label
- Purchase Order
- Type
- Persistent (models.Model)
- SQL table
purchase_order- Origin module
- Purchase (
purchase) - Extended by
- purchase_stock, sale_purchase, sale_purchase_stock, stock_dropshipping, mrp_subcontracting_dropshipping, purchase_mrp, mrp_subcontracting_purchase, project_purchase, project_purchase_stock, purchase_edi_ubl_bis3, purchase_product_matrix, purchase_repair, purchase_requisition, purchase_requisition_stock
- Default order (_order)
priority desc, id desc
Model fields
71 own fields, 27 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
104 of 104 fields shown
| Technical name | Label | Type | Details |
|---|---|---|---|
| acknowledged | Acknowledged It indicates that the vendor has acknowledged the receipt of the purchase order. | boolean | |
| alternative_po_ids | Alternative POs Other potential purchase orders for purchasing products | one2many | related: added by Purchase Agreements ( |
| amount_tax | Taxes | monetary | read-onlycomputed, stored |
| amount_total | Total | monetary | read-onlycomputed, stored |
| amount_total_cc | Total in currency | monetary | read-onlycomputed, stored |
| amount_untaxed | Untaxed Amount | monetary | read-onlycomputed, stored |
| company_currency_id | Company Currency | many2one | related: |
| company_id | Company | many2one | required |
| company_price_include | Company Price Include | selection | related: |
| country_code | Country code | char | related: |
| currency_id | Currency | many2one | requiredcomputed, stored |
| currency_rate | Currency Rate | float | computed, stored |
| date_approve | Confirmation Date | datetime | read-only |
| date_calendar_start | Date Calendar Start | datetime | read-onlycomputed, stored |
| date_order | Order Deadline Depicts the date within which the Quotation should be confirmed and converted into a purchase order. | datetime | required |
| date_planned | Expected Arrival Delivery date promised by vendor. This date is used to determine expected arrival of products. | datetime | computed, stored |
| default_location_dest_id_is_subcontracting_loc | Default Location Dest Id Is Subcontracting Loc | boolean | computed added by Dropship and Subcontracting Management ( |
| default_location_dest_id_usage | Destination Location Type Technical field used to display the Drop Ship Address | selection | read-only related: added by Purchase Stock ( |
| dest_address_id | Dropship Address Put an address if you want to deliver directly from the vendor to the customer. Otherwise, keep empty to deliver to your own company. | many2one | computed, stored |
| dropship_picking_count | Dropship Count | integer | computed added by Drop Shipping ( |
| duplicated_order_ids | Duplicated Order | many2many | computed |
| effective_date | Arrival Completion date of the first receipt order. | datetime | computed, stored added by Purchase Stock ( |
| fiscal_position_id | Fiscal Position | many2one | |
| grid | Grid Technical storage of grid. If grid_update, will be loaded on the PO. If not, represents the matrix to open. | char | added by Purchase Matrix ( |
| grid_product_tmpl_id | Grid Product Tmpl Technical field for product_matrix functionalities. | many2one | added by Purchase Matrix ( |
| grid_update | Grid Update Whether the grid field contains a new matrix to apply or not. | boolean | added by Purchase Matrix ( |
| has_sale_order | Technical field for whether the purchase order has associated sale orders | boolean | computed added by Sale Purchase ( |
| incoming_picking_count | Incoming Shipment count | integer | computed added by Purchase Stock ( |
| incoterm_id | Incoterm International Commercial Terms are a series of predefined commercial terms used in international transactions. | many2one | |
| incoterm_location | Incoterm Location | char | added by Purchase Stock ( |
| invoice_count | Bill Count | integer | computed, stored |
| invoice_ids | Bills | many2many | computed, stored |
| invoice_status | Billing Status | selection | read-onlycomputed, stored Values: |
| is_late | Is Late | boolean | |
| is_shipped | Is Shipped | boolean | computed added by Purchase Stock ( |
| lock_confirmed_po | Lock Confirmed Po | selection | related: |
| locked | Locked Locked Purchase Orders cannot be modified. | boolean | |
| mrp_production_count | Count of MO Source | integer | computed added by Purchase and MRP Management ( |
| name | Order Reference | char | required |
| note | Terms and Conditions | html | |
| on_time_rate | On Time Rate | float | related: added by Purchase Stock ( |
| on_time_rate_perc | OTD | float | computed added by Purchase Requisition Stock ( |
| order_line | Order Lines | one2many | inverse: |
| origin | Source Reference of the document that generated this purchase order request (e.g. a sales order) | char | |
| partner_bill_count | Partner Bill Count | integer | related: |
| partner_id | Vendor You can find a vendor by its Name, TIN, Email or Internal Reference. | many2one | required |
| partner_ref | Vendor Reference Reference of the sales order or bid sent by the vendor. It's used to do the matching when you receive the products as this reference is usually written on the delivery order sent by your vendor. | char | |
| payment_term_id | Payment Terms | many2one | |
| picking_ids | Receptions | many2many | computed, stored added by Purchase Stock ( |
| picking_type_id | Deliver To This will determine operation type of incoming shipment | many2one | required added by Purchase Stock ( |
| priority | Priority | selection | Values: |
| product_id | Product | many2one | related: |
| project_id | Project | many2one | added by Project Purchase ( |
| purchase_group_id | Purchase Group | many2one | added by Purchase Agreements ( |
| purchase_warning_text | Purchase Warning Internal warning for the partner or the products as set by the user. | text | computed |
| receipt_reminder_email | Receipt Reminder Email | boolean | computed, stored |
| receipt_status | Receipt Status Red: Late Orange: To process today Green: On time | selection | computed, stored Values: added by Purchase Stock ( |
| reference_ids | References | many2many | added by Purchase Stock ( |
| reminder_date_before_receipt | Days Before Receipt | integer | computed, stored |
| repair_count | Count of source repairs | integer | computed added by Purchase Repair ( |
| report_grids | Print Variant Grids If set, the matrix of configurable products will be shown on the report of this order. | boolean | added by Purchase Matrix ( |
| requisition_id | Agreement | many2one | added by Purchase Agreements ( |
| requisition_type | Requisition Type | selection | related: added by Purchase Agreements ( |
| sale_order_count | Number of Source Sale | integer | computed added by Sale Purchase ( |
| show_comparison | Show Comparison | boolean | computed |
| state | Status | selection | read-only Values: |
| subcontracting_resupply_picking_count | Count of Subcontracting Resupply Count of Subcontracting Resupply for component | integer | computed added by Purchase and Subcontracting Management ( |
| tax_calculation_rounding_method | Tax calculation rounding method | selection | read-only related: |
| tax_country_id | Tax Country Technical field to filter the available taxes depending on the fiscal country and fiscal position. | many2one | computed |
| tax_totals | Tax Totals | binary | computed |
| user_id | Buyer | many2one | |
| access_token | Security Token | char | inherited from portal.mixin |
| access_url | Portal Access URL Customer Portal URL | char | computed inherited from portal.mixin |
| access_warning | Access warning | text | computed inherited from portal.mixin |
| 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 |
| 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_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
- account.fiscal.position: fiscal_position_id
- account.incoterms: incoterm_id
- account.move: invoice_ids
- account.payment.term: payment_term_id
- product.product: product_id
- product.template: grid_product_tmpl_id
- project.project: project_id
- purchase.order: alternative_po_ids, duplicated_order_ids
- purchase.order.group: purchase_group_id
- purchase.order.line: order_line
- purchase.requisition: requisition_id
- res.company: company_id
- res.country: tax_country_id
- res.currency: company_currency_id, currency_id
- res.partner: dest_address_id, partner_id
- res.users: user_id
- stock.picking: picking_ids
- stock.picking.type: picking_type_id
- stock.reference: reference_ids
Fields of other models pointing here
- account.move: purchase_id
- account.move.line: purchase_order_id
- bill.to.po.wizard: purchase_order_id
- purchase.bill.line.match: purchase_order_id
- purchase.bill.union: purchase_order_id
- purchase.order: duplicated_order_ids
- purchase.order.line: order_id
- purchase.report: order_id
- purchase.requisition.alternative.warning: alternative_po_ids, po_ids
- purchase.requisition.create.alternative: origin_po_id
- stock.lot: purchase_order_ids
- stock.picking: purchase_id
- stock.reference: purchase_ids
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/purchase.order/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: your-db" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["name","company_id","currency_id","date_order","partner_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}/purchase.order/search_read",
headers=headers,
json={"domain": [], "fields": ["name","company_id","currency_id","date_order","partner_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/purchase-order">purchase.order (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.