Skip to content
Knowledge ERP Docs
API Reference ↗
Sales

Tax Rates

A named, percentage-based tax that you configure once and apply to invoices, quotes, purchase orders, vendor invoices, and rental agreements across every billing-capable module.

Availability — Included with the Sales or Purchasing module. Manage modules and your plan tier in Account & Billing.

A tax rate is a reusable percentage rule — a name like "Sales Tax 8.5%" and a decimal rate — that you attach to billing documents whenever tax needs to appear on a customer-facing or vendor-facing document. Tax rates are defined once under Account Administration → Tax Rates and then referenced by customer invoices, recurring invoices, quotes, purchase orders, vendor invoices, and rental agreements.

Tax is applied at the document level. You pick one tax rate per invoice or quote; the rate multiplies the document's subtotal and the result is stored separately so both the pre-tax and tax amounts are always visible.

Creating a tax rate #

New tax rates are added from Account Administration → Tax Rates → New Tax Rate. The form is intentionally short — a tax rate is a lookup value, not a transaction:

  • Name — a human-readable label that appears on customer-facing documents, e.g. Sales Tax, GST, or County Tax 1.5%. Required.
  • Rate (%) — the percentage as a decimal, e.g. 8.5 for 8.5%. Accepts up to four decimal places so you can express rates like 8.8750. Required; must be between 0 and 100.
  • Description — an optional note for your team (e.g. the jurisdiction this rate covers). Appears on the tax rate's detail page but not on customer documents.
  • Active — toggle off to retire a rate without deleting it. Inactive rates no longer appear in document dropdowns but remain on any documents that already reference them, preserving historical accuracy.

The tax rates list #

The list (Account Administration → Tax Rates) shows each rate's name, rate percentage, description, and an active indicator. Rows default to alphabetical order by name. Use the Trashed filter to surface soft-deleted rates if you need to restore one.

How tax is calculated #

When a tax rate is attached to a document, the platform computes the tax amount by multiplying the document's subtotal (in cents) by the rate percentage divided by 100, then rounding to the nearest cent:

tax = round(subtotal_cents × (rate / 100))

For example, a $1,200.00 invoice with an 8.5% tax rate produces round(120000 × 0.085) = 10200 cents = $102.00 tax, for a total of $1,302.00. Because the subtotal is an integer in cents, no floating-point rounding surprises occur during the final calculation.

Where tax rates appear #

Tax rates are reused across every billing-capable module:

  • Customer Invoices — set a tax rate when creating or editing an invoice. The tax amount is stored on the invoice record alongside the subtotal and total.
  • Recurring Invoices — the template stores the tax rate so every generated invoice inherits it automatically.
  • Quotes — add a tax rate to show the after-tax total to customers before they accept.
  • Purchase Orders — capture input tax on vendor bills in the same way.
  • Vendor Invoices — vendor invoices store a tax rate and tax amount alongside the vendor bill total.
  • Rental Agreements — rental billing cycles apply the agreement's tax rate to each generated charge.

Retiring vs. deleting a tax rate #

Toggling Active off is the right move when a rate changes or a jurisdiction is no longer applicable — it keeps the name out of new-document dropdowns while leaving every historical document intact with the original rate displayed. Deleting (via the bulk action or the edit menu) soft-deletes the record; it disappears from the list but continues to be referenced on existing documents. Use the Trashed filter to restore a rate if it was deleted by mistake.

Never hard-delete a tax rate that has been used on a live document. Soft deletion is safe; force-deletion removes the record permanently, which can break the displayed tax details on older invoices.

Doing it from the API #

# List active tax rates
curl "https://your-domain.com/api/v1/tax-rates?active=true" \
  -H "Authorization: Bearer $TOKEN"

# Create a tax rate
curl -X POST "https://your-domain.com/api/v1/tax-rates" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Sales Tax 8.5%", "rate": 8.5, "description": "State sales tax", "active": true}'

# Update a rate (partial update supported)
curl -X PATCH "https://your-domain.com/api/v1/tax-rates/{id}" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"active": false}'

The rate field is a decimal percentage value in the API (8.5, not 0.085), and is returned to four decimal places. Pass ?active=true or ?active=false to filter the list to only enabled or disabled rates.