B2B and B2C diverge sharply on tax presentation. A consumer storefront usually shows tax-inclusive prices; a B2B buyer is almost always quoted and invoiced on net prices, with tax added as a separate line. On top of that, B2B orders carry high quantities, so the exact point at which tax is applied (and how the result is rounded) can move the invoice total by a meaningful amount. This page covers the configuration that controls all of that.
Net versus gross: the includedInPrice flag
Whether a price is net or gross is a property of the Tax Rate, set by
includedInPrice:includedInPrice: false: the price is net; tax is calculated on top and added (bottom-up). The buyer's price plus tax is the gross amount. This is the typical B2B configuration.includedInPrice: true: the price is gross; tax is already contained in the price and is calculated out of it (top-down).
After calculation, the Cart's
taxedPrice exposes both sides: totalNet (before tax) and totalGross (after tax). For a B2B invoice that quotes net and adds tax, includedInPrice: false gives you the net figure as the basis and the gross figure as the payable total.How tax is set: TaxMode
Use TaxMode to decide where rates or amounts come from. For B2B, the usual choice is between letting commercetools select straightforward rates with
Platform, or integrating a tax provider through External or ExternalAmount when the tax logic is too complex for project configuration.The built-in
Platform tax engine suits simple, rate-based regimes such as a single VAT rate per country. It is not sufficient for complex jurisdictions: United States sales tax, for example, combines state, county, and city rates and frequently changes. For those cases, integrate a dedicated tax service through External or ExternalAmount. Treating complex tax as a configuration problem inside commercetools is a common and costly modeling mistake.Where tax is applied: TaxCalculationMode
Because amounts are rounded at each calculation step, the order of "multiply by quantity" and "apply tax" changes the total. Use TaxCalculationMode to decide whether tax is calculated at Line Item level or unit-price level.
For the same Line Item, the two modes can produce different totals. On a single low-quantity line the difference is usually trivial; across a B2B invoice with high quantities it accumulates. Choose the mode your invoicing and tax authority require, and apply it consistently. The companion
taxRoundingMode (separate from the priceRoundingMode you met for high precision) determines how each tax calculation step is rounded.Worked example: Atlas EU net invoicing
Atlas Corporate's EU division buys 40 service kits at EUR 27.50 each, with an external Tax Rate of 20% and
includedInPrice: false. Under taxCalculationMode: LineItemLevel with taxRoundingMode: HalfEven:| Field | Value |
|---|---|
| Line Item price | EUR 27.50 |
| Quantity | 40 |
includedInPrice | false (net) |
| Tax rate | 0.20 |
Taxed Item Price: totalNet | EUR 1,100.00 |
Taxed Item Price: totalGross | EUR 1,320.00 |
| Calculation | 27.50 × 40 × (1 + 0.20) |
Because
includedInPrice is false, EUR 1,100.00 is the quoted net basis and tax is added on top to reach EUR 1,320.00 gross, the net-quote, tax-added shape a B2B invoice expects. Had includedInPrice been true, EUR 1,100.00 would have been treated as gross and the net derived out of it instead. Switching taxCalculationMode to UnitPriceLevel would tax the EUR 27.50 unit price before multiplying, which can produce a different gross once rounding is applied at the unit level.Key takeaways
includedInPriceon the Tax Rate sets net (false, bottom-up) versus gross (true, top-down); B2B typically uses net.- The Cart's
taxedPriceexposes bothtotalNetandtotalGrossafter calculation. TaxModedecides where rates or amounts come from; useExternalorExternalAmountwhen a dedicated tax service owns the calculation.- Complex jurisdictions such as US sales tax require an external tax provider; the built-in engine is not designed for them.
TaxCalculationMode(LineItemLevelversusUnitPriceLevel) changes when tax is applied relative to the quantity, which matters at B2B volumes;taxRoundingModecontrols rounding at each step.