account.tax: fields, relations and API
The account.tax model ("Tax") is a persistent model declared by the Invoicing module, then extended by 6 other modules. It exposes 66 fields, 47 of them declared directly on the model; 23 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
account.tax- Label
- Tax
- Type
- Persistent (models.Model)
- SQL table
account_tax- Origin module
- Invoicing (
account) - Extended by
- account_edi_ubl_cii, account_tax_python, hr_expense, point_of_sale, purchase, pos_account_tax_python
- Default order (_order)
sequence,id- Inherits from (mixins)
- mail.threadpos.load.mixin
Model fields
47 own fields, 13 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.
66 of 66 fields shown
| Technical name | Label | Type | Details |
|---|---|---|---|
| account_move_line_ids | Account Move Line | many2many | read-only |
| account_reconcile_model_line_ids | Account Reconcile Model Line | many2many | read-only |
| active | Active Set active to false to hide the tax without removing it. | boolean | |
| amount | Amount | float | required |
| amount_type | Tax Computation - Group of Taxes: The tax is a set of sub taxes. - Fixed: The tax amount stays the same whatever the price. - Percentage: The tax amount is a % of the price: e.g 100 * (1 + 10%) = 110 (not price included) e.g 110 / (1 + 10%) = 100 (price included) - Percentage Tax Included: The tax amount is a division of the price: e.g 180 / (1 - 10%) = 200 (not price included) e.g 200 * (1 - 10%) = 180 (price included) | selection | required Values: |
| analytic | Include in Analytic Cost If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any) | boolean | |
| cash_basis_transition_account_id | Cash Basis Transition Account Account used to transition the tax amount for cash basis taxes. It will contain the tax amount as long as the original invoice has not been reconciled ; at reconciliation, this amount cancelled on this account and put on the regular tax account. | many2one | |
| children_tax_ids | Children Taxes | many2many | |
| company_country_code | Fiscal Country Code of the Company | char | related: |
| company_id | Company | many2one | requiredread-only |
| company_price_include | Company Price Include | selection | related: |
| country_code | Country Code | char | read-only related: |
| country_id | Country The country for which this tax is applicable. | many2one | requiredcomputed, stored |
| description | Description | html | |
| display_alternative_taxes_field | Display Alternative Taxes Field | boolean | computed |
| fiscal_position_ids | Fiscal Position | many2many | |
| formula | Formula Compute the amount of the tax. :param base: float, actual amount on which the tax is applied :param price_unit: float :param quantity: float :param product: A object representing the product | text | added by Define Taxes as Python Code ( |
| formula_decoded_info | Formula Decoded Info | json | computed added by Define Taxes as Python Code ( |
| has_negative_factor | Has Negative Factor | boolean | computed |
| hide_tax_exigibility | Hide Use Cash Basis Option | boolean | read-only related: |
| hr_expense_ids | Hr Expense | many2many | read-only added by Expenses ( |
| include_base_amount | Affect Base of Subsequent Taxes If set, taxes with a higher sequence than this one will be affected by it, provided they accept it. | boolean | |
| invoice_label | Label on Invoices | char | translatable |
| invoice_legal_notes | Legal Notes Legal mentions that have to be printed on the invoices. | html | translatable |
| invoice_repartition_line_ids | Distribution for Invoices Distribution when the tax is used on an invoice | one2many | computed, stored inverse: |
| is_base_affected | Base Affected by Previous Taxes If set, taxes with a lower sequence might affect this one, provided they try to do it. | boolean | |
| is_domestic | Is Domestic | boolean | computed, stored |
| is_used | Tax used | boolean | computed |
| name | Tax Name | char | requiredtranslatable |
| original_tax_ids | Replaces List of taxes to replace when applying any of the stipulated fiscal positions. | many2many | |
| pos_order_line_ids | Pos Order Line | many2many | read-only added by Point of Sale ( |
| price_include | Price Include Determines whether the price you use on the product and invoices includes this tax. | boolean | computed |
| price_include_override | Included in Price Overrides the Company's default on whether the price you use on the product and invoices includes this tax. | selection | Values: |
| purchase_order_line_ids | Purchase Order Line | many2many | read-only added by Purchase ( |
| refund_repartition_line_ids | Distribution for Refund Invoices Distribution when the tax is used on a refund | one2many | computed, stored inverse: |
| repartition_line_ids | Distribution | one2many | inverse: |
| repartition_lines_str | Repartition Lines | char | computed |
| replacing_tax_ids | Replaced by | many2many | read-only |
| sequence | Sequence The sequence field is used to define order in which the tax lines are applied. | integer | required |
| tax_exigibility | Tax Exigibility Based on Invoice: the tax is due as soon as the invoice is validated. Based on Payment: the tax is due as soon as the payment of the invoice is received. | selection | Values: |
| tax_group_id | Tax Group | many2one | requiredcomputed, stored |
| tax_label | Tax Label | char | computed |
| tax_scope | Tax Scope | selection | Values: |
| type_tax_use | Tax Type Determines where the tax is selectable. Note: 'None' means a tax can't be used by itself, however it can still be used in a group. 'adjustment' is used to perform tax adjustment. | selection | required Values: |
| ubl_cii_requires_exemption_reason | Ubl Cii Requires Exemption Reason | boolean | computed added by Import/Export electronic invoices with UBL/CII ( |
| ubl_cii_tax_category_code | Tax Category Code The VAT category code used for electronic invoicing purposes. | selection | Values: added by Import/Export electronic invoices with UBL/CII ( |
| ubl_cii_tax_exemption_reason_code | Tax Exemption Reason Code The reason why the amount is exempted from VAT or why no VAT is being charged, used for electronic invoicing purposes. | selection | Values: added by Import/Export electronic invoices with UBL/CII ( |
| 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
- account.account: cash_basis_transition_account_id
- account.fiscal.position: fiscal_position_ids
- account.move.line: account_move_line_ids
- account.reconcile.model.line: account_reconcile_model_line_ids
- account.tax: children_tax_ids, original_tax_ids, replacing_tax_ids
- account.tax.group: tax_group_id
- account.tax.repartition.line: invoice_repartition_line_ids, refund_repartition_line_ids, repartition_line_ids
- hr.expense: hr_expense_ids
- pos.order.line: pos_order_line_ids
- purchase.order.line: purchase_order_line_ids
- res.company: company_id
- res.country: country_id
Fields of other models pointing here
- account.account: tax_ids
- account.fiscal.position: tax_ids
- account.move.line: group_tax_id, tax_ids, tax_line_id
- account.reconcile.model.line: tax_ids
- account.tax: children_tax_ids, original_tax_ids, replacing_tax_ids
- account.tax.repartition.line: tax_id
- hr.expense: tax_ids
- hr.expense.split: tax_ids
- mail.message: account_audit_log_tax_id
- pos.order.line: tax_ids, tax_ids_after_fiscal_position
- product.template: supplier_taxes_id, taxes_id
- purchase.order.line: tax_ids
- res.company: account_purchase_tax_id, account_sale_tax_id
- res.config.settings: purchase_tax_id, sale_tax_id
- sale.order.line: tax_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/account.tax/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: your-db" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["name","amount","amount_type","company_id","country_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}/account.tax/search_read",
headers=headers,
json={"domain": [], "fields": ["name","amount","amount_type","company_id","country_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/account-tax">account.tax (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.