Multi-Tax Handling
Extract detected tax tiers from a receipt — rates, net, tax, and gross amounts when available — for VAT, GST, sales tax, and regional systems.
Many receipts carry more than one tax rate — a restaurant bill with standard-rate alcohol and reduced-rate food, or a retail receipt spanning tax categories. Multi-Tax Handling returns detected tax tiers separately, with rate, net, tax, and gross amounts for each detected tier when available.
Availability
AvailabilityThis feature is included on the Startup plan and above. Enable Regional → Multi-Tax in your account Feature Settings when the control is available. See Plans & Feature Access.
How It Works
- Returns detected tax rates and amounts when available for a receipt or invoice.
- Recognises global tax systems — VAT, GST, sales tax, and region-specific taxes — adapting to local naming conventions (e.g. TVA in France, MwSt. in Germany).
- Returns the breakdown in the standard JSON response — no extra request parameters needed once enabled.
Multi-Tax Handling is available on the verbose extraction endpoints:
Response
The breakdown can be returned in the multiTaxLineItems array inside the entities object. The array may be omitted or empty; the generated extraction schema does not define the array itself as null. Within a returned item, its data object and individual tax properties may be omitted. Tax entity envelopes may be null; taxType.data may be null, while numeric .data values are numbers when present:
| Field | Type | Description | Access Path |
|---|---|---|---|
| taxType | String | null | The type of tax (e.g. "TVA" for France), when identified | entities.multiTaxLineItems[].data.taxType.data |
| taxRate | Number | The tax rate as a decimal (e.g. 0.2 for 20%) | entities.multiTaxLineItems[].data.taxRate.data |
| netAmount | Number | The amount before tax | entities.multiTaxLineItems[].data.netAmount.data |
| taxAmount | Number | The tax amount | entities.multiTaxLineItems[].data.taxAmount.data |
| grossAmount | Number | The total amount including tax | entities.multiTaxLineItems[].data.grossAmount.data |
An entry can also include confidenceLevel and index. See Understanding Your Results for how confidence levels work.
Example
Two TVA tiers extracted from a French receipt:
{
"entities": {
"multiTaxLineItems": [
{
"data": {
"taxType": { "text": "TVA", "data": "TVA" },
"taxRate": { "text": "20.00", "data": 0.2 },
"netAmount": { "text": "83.33", "data": 83.33 },
"taxAmount": { "text": "16.67", "data": 16.67 },
"grossAmount": { "text": "100.00", "data": 100 }
},
"confidenceLevel": 0.95,
"index": 1
},
{
"data": {
"taxType": { "text": "TVA", "data": "TVA" },
"taxRate": { "text": "5.50", "data": 0.055 },
"netAmount": { "text": "47.39", "data": 47.39 },
"taxAmount": { "text": "2.61", "data": 2.61 },
"grossAmount": { "text": "50.00", "data": 50 }
},
"confidenceLevel": 0.93,
"index": 2
}
]
}
}Supported Countries
Multi-Tax Handling adapts to the tax systems and naming conventions of the countries Taggun supports — see Supported Countries & Languages for each country's tax system. If you work with a tax system or requirement that isn't currently covered, contact us and we'll look at expanding support.
Best Practices
- Use the document-level fallback when appropriate: if tier details are incomplete, use top-level
taxAmount.dataas the detected document-level total when available. - Treat incomplete tiers as incomplete: do not infer a missing tier amount or allocate product-line prices to tax tiers. The public response does not map product line items to individual tax tiers.
Need something not covered here? Contact [email protected] — see Contacting Support.
Updated 1 day ago