Exemptions
Exemptions represent tax relief certificates that allow certain customers to purchase goods or services without paying tax, or at a reduced rate. Abacus Tax Engine models exemptions as first-class resources linked to a customer record.
When a transaction references a customer with an active exemption that matches the transaction's jurisdiction, the exemption is applied automatically during tax determination.
Overview
An exemption has three key attributes:
- Customer - the specific customer the exemption belongs to
- Jurisdiction - the country and state(s) where the exemption applies
- Validity period - optional start and end dates defining when the exemption is active
See the Exemptions API Reference for the full request and response schemas.
Jurisdiction Scope
The jurisdictions array controls where the exemption applies:
{ "country": "US", "jurisdictions": ["CA"] } // Single state
{ "country": "US", "jurisdictions": ["CA", "NY", "TX"] } // Multiple states
{ "country": "US", "jurisdictions": [] } // All US jurisdictions
An empty array means the exemption applies to all jurisdictions within the specified country.
Revoking an Exemption
Update exemption_status to cancelled:
Applying Exemptions to Transactions
Automatic application
Once an exemption is active and linked to a customer, it is applied automatically when a transaction references that customer and the shipping address falls within a matching jurisdiction. No additional fields are needed on the transaction.
Per-item exemption override
You can apply a specific exemption to an individual line item, overriding the customer-level lookup - useful when only certain items in an order qualify:
{
"items": [
{
"name": "Raw Materials",
"unit_price": "500.00",
"quantity": "1",
"tax_code": "MATERIALS",
"exemption_id": "<exemption-uuid>",
"exemption_reason": "resale_certificate"
},
{
"name": "Office Supplies",
"unit_price": "50.00",
"quantity": "1",
"tax_code": "SUPPLIES"
}
]
}
Only the first item is exempted. The second is taxed normally.
Exemption Application in the Response
When an exemption is applied to a line item, check these response fields:
| Field | Description |
|---|---|
items[].is_exempt |
true if the item was fully exempted |
items[].exemption_id |
UUID of the certificate that was applied |
items[].exemption_reason |
Human-readable reason (e.g., resale_certificate, customer_fully_exempt) |
items[].taxability_reason |
customer_exempt when an exemption suppressed the tax |
items[].tax.total_tax |
"0.00" for fully exempted items |
Wholesale Customers and Exemptions
Customers with customer_type: "wholesale" are taxable by default. Tax is only suppressed once an active exemption certificate is attached.
The typical flow for a wholesale/resale customer:
- Create the customer with
customer_type: "wholesale" - Create an exemption for the relevant jurisdictions
- Submit transactions - tax is suppressed automatically in matching jurisdictions
Creating a customer as wholesale alone does not suppress tax. The exemption certificate is a separate, required step.
API Reference
See the Abacus Tax Engine API Reference for the full interactive schema, including all exemption request and response fields.