Read the checkout through the API, GET /cdna-api/checkout/<id>, and look at taxTotal and each item's tax. If both are zero, in order:
- Tax is switched off. The Taxes Enabled setting is off by default; switch it on for the site to calculate tax.
- The address the zone setting names was missing when tax was calculated. Tax is calculated when the items, the shipping, the email or the delivery address change, and skipped if the address it needs is not there yet. With Zone resolves to set to the billing address, a checkout that gets its billing address after shipping is created is never taxed, because a billing change on its own does not recalculate. Send the billing address before creating shipping, or send the delivery address again after it.
- The provider is not set up to collect tax there. Avalara charges tax only where the company has nexus configured, and Stripe Tax only where the account has a registration. The provider's own transaction log shows what it was asked and what it answered; the platform stores what the provider returns.
- The tax code is exempt. A tax category maps a product to the provider's tax code. A product with no category, and every variant, uses the provider's default item tax code, and an exempt code gives zero.
- The provider is the Mock provider, with a rate of 0.
- It is a form payment. A payment element on a form always records tax as 0, and its Tax Category setting is never applied (payments in a form).
- The order was imported through the API with its own totals, which are never recalculated.
Tax rate records, the rounding method and the shipping tax category setting have no effect. Entering a rate in the admin does not produce tax.