Skip to content

Tax

What Wajub computes, what it records, and what it never does to the amount.

Tax answers one question on demand, "how much tax is owed on this amount in this country", and keeps a ledger of the answer for every payment you actually collect. That ledger is what you file from.

What it does not do is touch your payments. Turning Tax on changes no amount, adds no line to a charge, and is invisible to your payer unless you put it there yourself.

Three things happen around a payment, and only one of them moves money.

11 925 XAF11 925 XAFtax/calculateanswers 1 925, charges nothingthe chargesame amount, in and outtax recordCM · TVA 19.25 % · 1 925
  1. 1Asked, not applied

    The calculator answers a question. Ignoring the answer changes nothing about your payment.

  2. 2Nothing is added

    The charge stays the amount you created it for. A price that carries tax is yours to compute.

  3. 3Recorded once paid

    One row per collected payment, in a ledger of its own. That ledger is what you file from.

The question you ask before charging, the payment itself, and the row written once it is collected. The amount that leaves the checkout is the amount that reaches your balance, and the tax lives in a ledger of its own.

Two things, on two timelines

Everything in this section is one or the other, and confusing them is the source of most of the questions.

CalculationRecord
What it isAn answer to a questionA row in your tax ledger
WhenWhenever you ask, before you chargeAutomatically, once the money is credited
Triggered byPOST /tax/calculateThe payment completing
Depends on your settingsNo, except for the customer rulesYes, nothing is written while Tax is off
Changes the paymentNeverNever

The calculation is a calculator. The record is bookkeeping. You can use one without the other: ask for calculations and never enable Tax, or enable Tax and never call the endpoint.

Which country's tax

Tax follows the consumption principle: the rate is the payer's, not yours. Three steps decide, in order.

StepSource
1The country resolved from the payer's IP when the payment page opened
2Your default_country setting
3CM, the platform's home jurisdiction

The currency never decides. XAF is spent in six countries, and a payer in Paris can pay you in XAF from a French IP: the rate applied is the French one. On POST /tax/calculate there is no inference at all, the country field is required and it is the only thing read.

What a record holds

One row per collected payment, in the currency the payment was made in.

FieldWhat it holds
country_codeThe country whose rate was applied
tax_nameThe local name of the tax, TVA, VAT, IVA, GST
rateThe percentage applied
taxable_amountThe base the rate was applied to
tax_amountThe tax itself
tax_inclusiveWhether the base was extracted from the amount or added to it
charged_atWhen the payment was credited, which is what the reports group on

A refund writes a second row with both amounts negative, so the ledger nets out on its own. See Reports.

What it covers

Two hundred countries carry a standard rate, maintained by Wajub and updated without anything on your side.

CountryTaxRate
CameroonTVA19.25 %
Côte d'IvoireTVA18 %
SenegalTVA18 %
KenyaVAT16 %
GhanaVAT15 %
South AfricaVAT15 %
NigeriaVAT10 %
FranceTVA20 %

Sixteen countries are carried at 0 %, either because they levy no such tax or because their system is not a single national rate. The United States is one of them: sales tax there is set per state and per city, and Wajub does not resolve it.

One standard rate per country

There are no reduced rates, no per-product rates in effect, and no state or city level rates today. Whatever the country, the calculation applies its single standard rate. Configuration covers the two exceptions that do change the outcome, an exempt customer and a reverse charge.

Live only, and on which plan

Tax is on Growth, Scale and Enterprise, and available as a paid add-on below that.

Nothing runs in sandbox. No record is written for a test payment, and the endpoints refuse a test key, so there is no way to rehearse a tax year. Inside the Dashboard the Tax section needs the view_tax permission, and changing settings needs manage_tax.

Funding transactions, where you top up your own Wajub balance, never produce a record either. There is no VAT on moving your own money.

The endpoints

All of them take your private key and all of them are live only.

MethodEndpointUsed for
GET PUT/tax/settingsThe on switch, your country, inclusive pricing, your registration
POST/tax/calculateWhat is owed on an amount, before you charge it
GET/tax/ratesThe standard rate per country
GET/tax/reportsThe ledger, aggregated by country and by currency
GET/tax/codesThe product tax code catalogue
GET/tax/jurisdictionsSub-national rates, where they exist
GET POST PUT DELETE/tax/registrationsWhere you are registered, for your own records
GET/tax/thresholdsRegistration thresholds and how close you are
GET POST DELETE/customers/{id}/tax_idsA customer's tax IDs, and their verification

What did you think of this content?