Skip to content

Tax

Tax is off by default and calculated by Stripe Tax when it is on. Beluga does no tax arithmetic of its own, holds no rate tables, and files nothing on anyone’s behalf.

Under-collecting is silent. Every order goes through, the buyer pays, and the merchant owes the difference with nothing anywhere to say so. So the admin Overview says “this store is not collecting tax” while it is off, and Settings → Tax says the following before the switch.

None of them can be done from Beluga.

  1. Stripe Tax is activated on the account. It is a paid add-on, billed per transaction.
  2. Tax registrations are recorded in the dashboard, one for each place the merchant is obliged to collect. Deciding where that is remains the merchant’s job; Stripe collects nothing for a jurisdiction with no registration.
  3. Products carry tax codes. Every product uses the store default, txcd_99999999 (general tangible goods), unless it sets its own. Books, food, digital goods and clothing are taxed differently in many places.

Prices are quoted inclusive or exclusive, per store. EU and UK shops normally quote inclusive prices; US shops quote exclusive and add tax at checkout. Shipping rates carry their own behaviour. With inclusive pricing the tax line reads “Includes tax” rather than adding a row, because an additive-looking row on a total that already contains the tax reads as a second charge.

tax_behavior is immutable on a Stripe Price, like the amount. Changing how a store quotes prices reaches Stripe only when each product is published again, which mints new Prices and archives the old ones. Nothing republishes itself. The Overview lists the products that are out of date and links to each one.

The webhook reads total_details.amount_tax off the completed session into taxCents on the order, which the confirmation page, the admin, the email, the CSV export and the order.paid webhook all carry.