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

📘

Availability

This 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

  1. Returns detected tax rates and amounts when available for a receipt or invoice.
  2. 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).
  3. 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:

FieldTypeDescriptionAccess Path
taxTypeString | nullThe type of tax (e.g. "TVA" for France), when identifiedentities.multiTaxLineItems[].data.taxType.data
taxRateNumberThe tax rate as a decimal (e.g. 0.2 for 20%)entities.multiTaxLineItems[].data.taxRate.data
netAmountNumberThe amount before taxentities.multiTaxLineItems[].data.netAmount.data
taxAmountNumberThe tax amountentities.multiTaxLineItems[].data.taxAmount.data
grossAmountNumberThe total amount including taxentities.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.data as 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.


Did this page help you?