purchase.order: fields, relations and API
The purchase.order model ("Purchase Order") is a persistent model declared by the Purchase module, then extended by 15 other modules. It exposes 107 fields, 74 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 20 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, purchase_alternative, purchase_alternative_stock, purchase_edi_ubl_bis3, purchase_product_matrix, purchase_repair, purchase_requisition, purchase_requisition_stock
- Default order (_order)
priority desc, id desc
Model fields
74 own fields, 27 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
107 of 107 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 Alternative ( |
| 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 |
| bill_matched_ratio | Bill Matched Ratio | float | computed |
| 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 | Order 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 Expected delivery date of goods by the vendor based on the latest information | datetime | computed, stored |
| date_promised | Promised Date Date promised by the vendor for at least 1 or more products to be delivered by. | datetime | computed, stored added by Purchase Stock ( |
| 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 |
| document_tax_mode | Document Tax Mode | selection | requiredcomputed, stored Values: |
| 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 last 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 | computed, stored |
| incoterm_location | Incoterm Location | char | computed, stored |
| 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 Alternative 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 Alternative ( |
| 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 | boolean | computed, stored |
| receipt_status | Receipt Status | selection | computed, stored Values: |
| 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 ( |
| 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 |
| show_receive_button | Show Receive Button | 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 | json | 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_plans_ids | Activity Plans | many2many | computed 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 |
| 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.alternative.create: origin_po_id
- purchase.alternative.warning: alternative_po_ids, po_ids
- 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
- stock.lot: purchase_order_ids
- stock.picking: purchase_id
- stock.reference: purchase_ids
Reading this model through the API
Odoo 20 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","document_tax_mode"],"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","document_tax_mode"], "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 20.0)</a>Sources
Data verified on September 25, 2026 · Odoo 20.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.