Taxability Information Codes (TICs)

Product-specific tax rules for clothing, food, software, and more

Available on Pro and Enterprise plans. TICs require the product_rates entitlement on your API key. If your key doesn’t carry it, any request with a taxabilityCode parameter returns response code 113. See Response Codes for the full list.

Not every product is taxed at the default sales tax rate. Most states apply reduced rates, exemptions, or thresholds to specific categories like clothing, groceries, prescription medication, software, and digital goods. Ziptax’s Taxability Information Codes (TICs) let you attach a product category to a rate request and get back the rules that actually apply to that product in that jurisdiction.

When to use a TIC

Most integrations don’t need TICs at first. The default sales tax rate is correct for general merchandise in most places. You should attach a TIC when:

  • You sell categories that are commonly taxed differently (clothing, groceries, SaaS, digital downloads, medical items).
  • Your team is filing returns and needs line-item detail showing why a reduced rate or exemption was applied.
  • You’re operating in states with aggressive category carve-outs (Minnesota on clothing, New York on apparel under $110, Texas on food and medicine, and so on).

If you’re selling a mix, the right pattern is to store a TIC on each product in your catalog and pass it through on the rate request at checkout.

The TIC catalog

Ziptax publishes the full list of supported codes at GET /data/tic. The feed is flat. Each entry is a row with an id, a parent (for grouping into categories), a short title, and a longer label:

1{
2 "tic_list": [
3 {
4 "tic": {
5 "id": "10010",
6 "parent": "10000",
7 "title": "Clothing",
8 "label": "All types of clothing and apparel"
9 }
10 },
11 {
12 "tic": {
13 "id": "20010",
14 "parent": "20000",
15 "title": "Prescription drugs",
16 "label": "Medications dispensed pursuant to a prescription"
17 }
18 }
19 ]
20}

Pulling the feed

$curl -H "X-API-Key: YOUR_API_KEY" \
> "https://api.zip-tax.com/data/tic"

Caching

The catalog changes rarely. New categories may be added, but existing IDs are stable. Pull it once, store it in your own database, and refresh on a weekly or monthly cadence. The feed has a separate rate limit of 100 requests per minute, so don’t use it as a per-request lookup. Treat it as a reference table.

Don’t call /data/tic on every product view in your storefront. Cache the list server-side and ship a read replica to your catalog service instead.

Attaching a TIC to a rate request

Pass the taxabilityCode query parameter on any GET /request/v60 call:

1GET https://api.zip-tax.com/request/v60
2 ?address=200+Spectrum+Center+Dr+Irvine+CA
3 &taxabilityCode=20010

The base response fields (baseRates, taxSummaries) are unchanged. Ziptax adds a productDetail object with the TIC metadata and the rateRules that apply in this jurisdiction right now:

1{
2 "metadata": { "response": { "code": 100, "name": "RESPONSE_CODE_SUCCESS" } },
3 "taxSummaries": [
4 { "rate": 0.0775, "taxType": "SALES_TAX", "summaryName": "Total Base Sales Tax" }
5 ],
6 "productDetail": {
7 "id": "20010",
8 "title": "Prescription drugs",
9 "label": "Medications dispensed pursuant to a prescription",
10 "rateRules": [
11 {
12 "jurTaxCode": "06",
13 "effectiveDt": "2020-01-01",
14 "expiresDt": null,
15 "effectiveTaxRate": 0.0,
16 "percentTaxable": 0.0,
17 "exemptUnder": null,
18 "exemptOver": null,
19 "taxablePortionOver": null,
20 "isDestinationTaxType": true,
21 "isFoodDrug": true
22 }
23 ]
24 }
25}

Reading the rateRules array

Each rule describes how a single jurisdiction treats this product category, filtered to rules active on the current date:

FieldMeaning
jurTaxCodeFIPS-like code identifying the jurisdiction (state, county, city).
effectiveDt / expiresDtValidity window. A null expiresDt means “still in effect”.
effectiveTaxRateThe rate that applies to this product in this jurisdiction.
percentTaxableFraction of the sale that’s taxable (e.g. 0.5 = half-exempt).
exemptUnderLine-item exemption threshold below this dollar amount.
exemptOverExempt above this dollar amount.
taxablePortionOverOnly the amount over this threshold is taxed.
isDestinationTaxTypeWhether the rule follows destination sourcing.
isFoodDrugHint for food/drug category classification.

Common shapes

  • Fully exempt (prescription drugs in most states): effectiveTaxRate: 0, percentTaxable: 0.
  • Reduced rate (grocery food in Illinois): effectiveTaxRate: 0.0175 instead of the normal 6.25%.
  • Threshold exemption (clothing in New York under $110): exemptUnder: 110, meaning anything under $110 is exempt and anything above is taxed normally.
  • Blended (Tennessee single-article tax): use sat_item_total alongside the TIC so Ziptax can compute the blended rate.

Worked example

A California retailer selling a $120 sweater to an Orange County address passes TIC 10010 (Clothing). California doesn’t exempt clothing at this price, so productDetail.rateRules for the CA jurisdiction looks like the general merchandise rule and taxSummaries[0].rate is the standard 7.75% (at the time of writing). The same request into a New York address under $110 would return a rule with exemptUnder: 110 and a 0% effective rate, so your app should collect $0 in tax on that line.

Integration checklist

  1. Pull /data/tic once, store it, refresh weekly.
  2. Let merchants or your catalog service assign a TIC to each product (or default to “general merchandise” if unassigned).
  3. On checkout, send one /request/v60 call per taxable line or one call per destination with the dominant TIC, depending on your mix.
  4. Read productDetail.rateRules for that jurisdiction and apply the effectiveTaxRate / exemptUnder / exemptOver logic yourself, or trust taxSummaries[0].rate if Ziptax’s adjustment is sufficient.
  5. Log the raw productDetail response on every transaction. It’s the evidence trail you’ll want at filing time.