Tax
DayZero supports configurable tax rates (the percentages, by jurisdiction) and tax codes (whether a customer, product or line is taxable at all). Both apply to invoices and bills.
Tax Rates
Tax rates define specific tax percentages by jurisdiction and where the collected tax is posted.
Create a Tax Rate
curl -X POST "https://api.ondayzero.com/api/v1/tax/rates" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"name": "California Sales Tax",
"rate": 0.0725,
"tax_type": "sales",
"country": "US",
"state": "CA",
"is_default": false
}'
rateis a decimal fraction, not a percentage:0.0725= 7.25%.
| Field | Type | Description |
|---|---|---|
name |
string | Display name (required) |
rate |
number | Decimal rate, e.g. 0.0725 (required) |
tax_type |
string | sales (default), use, vat, gst, hst, pst |
country / state / county / city |
string | Jurisdiction; country defaults to US |
tax_liability_ledger_id |
UUID | Liability ledger the collected tax posts to (a default is used if omitted) |
is_default |
boolean | Make this the business default rate |
List Tax Rates
curl "https://api.ondayzero.com/api/v1/tax/rates?active_only=true&state=CA" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"| Parameter | Type | Description |
|---|---|---|
active_only |
boolean | Only return active rates (default: true) |
country |
string | Filter by country code |
state |
string | Filter by state/region |
Get Default Rate
curl "https://api.ondayzero.com/api/v1/tax/rates/default" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"PUT /api/v1/tax/rates/{rate_id} updates any field, including is_active and is_default.
Tax Codes
Tax codes classify what is taxable — TAXABLE, EXEMPT, RESALE — independently of the rate applied. Assign them to customers, products and line items.
Create a Tax Code
curl -X POST "https://api.ondayzero.com/api/v1/tax/codes" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID" \
-H "Content-Type: application/json" \
-d '{
"code": "NONPROFIT",
"name": "Non-profit exempt",
"description": "501(c)(3) customers with an exemption certificate on file",
"is_taxable": false
}'code and name are required; is_taxable defaults to true.
List Tax Codes
curl "https://api.ondayzero.com/api/v1/tax/codes?active_only=true" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"Seed Defaults
Populate the standard codes — TAXABLE, EXEMPT, NONTAXABLE, RESALE — if the business has none yet:
curl -X POST "https://api.ondayzero.com/api/v1/tax/codes/seed-defaults" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"AI Rate Suggestions
Get AI-powered tax rate suggestions based on your business location and type:
curl -X POST "https://api.ondayzero.com/api/v1/tax/suggest-rates" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"Suggestions are returned for review — nothing is created until you POST /api/v1/tax/rates with the ones you want.
Deleting Rates and Codes
Delete (deactivate) a tax rate or code:
curl -X DELETE "https://api.ondayzero.com/api/v1/tax/rates/{rate_id}" \
-H "Authorization: Bearer dz_your_token_here" \
-H "x-business-id: YOUR_BUSINESS_ID"The same works for DELETE /api/v1/tax/codes/{code_id}. This performs a soft deactivation (is_active: false) — the rate or code remains in historical records but is no longer offered for new documents. Reactivate with PUT … {"is_active": true}.
If an integration import (Shopify, Square, QuickBooks…) created duplicate rates or codes, POST /api/v1/tax/dedupe-imported deactivates the duplicates.