GET /tariff/{code} · /tariff?q=

US tariff & HTS lookup API

Find US import codes and published duty rates.

Start with a US HTS code. Dots are optional.

Try it

Edition and date

Optional. Leave empty for current data. Pin an edition to replay its snapshot. Dates require verified coverage.

The all-zero edition in the example is illustrative. Use an edition from a live response to replay it.

Example response/tariff/8471.30.01.00
{
  "hts": "8471.30.01.00",
  "description": "Portable automatic data processing machines, weighing not more than 10 kg, consisting of at least a central processing unit, a keyboard and a display",
  
    "Automatic data processing machines and units thereof; magnetic or optical readers, machines for transcribing data onto data media in coded form and machines for processing such data, not elsewhere specified or included:"
  ],
  "general": "Free",
  "revision": "2026HTSRev19",
  "edition": "0000000000000000000000000000000000000000000000000000000000000000",
  "date": "2026-09-24",
  ?deep=true
}

1M requests · $20/mo. Get started

What comes back.

hts

The code you asked about, normalized with dots (8471.30.01.00)

description

The schedule line, verbatim

general

Published Column 1 general base rate, verbatim. Does not establish the complete duty owed

edition

Immutable edition SHA-256. Save the returned value to replay that snapshot; all-zero example fingerprints are illustrative

1

Have a code?

Look up 4, 6, 8 or 10 digits, with or without dots. Get the schedule line and published base rate.

2

Start with a product.

Search by name. Review matching descriptions and their parent headings, then choose a code.

3

Add the country of origin.

Paid deep adds matched measures and their conditions. Unresolved rates come with a reason.

Make your first request.

One key works across the APIs. Copy a request in your language and get JSON back.

curl "https://api.parseapi.com/tariff/8471.30.01.00" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Parse-Version: 2.0.0"
// Example response · 200
{
  "hts": "8471.30.01.00",
  "description": "Portable automatic data processing machines, weighing not more than 10 kg, consisting of at least a central processing unit, a keyboard and a display",
  "lineage": ["Automatic data processing machines and units thereof; magnetic or optical readers, machines for transcribing data onto data media in coded form and machines for processing such data, not elsewhere specified or included:"],
  "general": "Free",
  "revision": "2026HTSRev19",
  "edition": "0000000000000000000000000000000000000000000000000000000000000000",
  "date": "2026-09-24"
}

API referenceSDKsKeys and authentication

Every response field

Response fields

htsstring
The code you asked about, normalized with dots (8471.30.01.00)
descriptionstring or null
The schedule line, verbatim
lineagearray
Parent descriptions from the schedule outline, outermost first. Empty for top-level headings
generalstring or null
Published Column 1 general base rate, verbatim. Does not establish the complete duty owed
editionstring
Immutable edition SHA-256. Save the returned value to replay that snapshot; all-zero example fingerprints are illustrative
datestring or null
Resolution date, or null for an edition-only snapshot. Explicit dates require reviewed effective interval coverage; publication dates do not establish it
revisionstring
The official schedule revision used for this answer
linesarray
Search results for ?q=. Up to 20 candidate tariff lines, best match first, each with hts, description, lineage, and general
lines[].lineagearray
Parent descriptions for each search candidate, outermost first; disambiguates lines such as Other

Deep fields

deep.unitsarray
Units of quantity (No., kg, doz.). Empty when the schedule lists none
deep.specialstring or null
Column 1 special rate, verbatim. Free trade agreements and preference programs
deep.otherstring or null
Column 2 rate, verbatim. The statutory rate
deep.reasonstring or null
Why effective_rate is null: origin_required, date_required, incomplete_coverage, date_unverified, broad_code, conditional_measures, non_additive_rates, or overlapping_programs. Open string; preserve future values. Null when resolved
deep.originstring or null
Country of origin of the goods, resolved to ISO alpha-2. This can differ from the country of shipment
deep.effective_ratenumber or null
For an 8- or 10-digit code, a combined percentage for matched measures only with complete measure coverage, a verified effective date and no unresolved conditions. Otherwise null. This does not establish the complete duty owed.
deep.measuresarray or null
Chapter 99 measures matched by code and origin. Each keeps its description, rate, effective dates, and conditional flag. Read the text for product and entry requirements. These rows remain available when coverage is incomplete; an empty array does not prove no duties apply.
deep.measures[].conditionalboolean
Product or entry conditions require review. The combined effective_rate stays null.
deep.measures[].headingstring
The matched Chapter 99 heading, such as 9903.88.03
deep.measures[].descriptionstring or null
The provision text, verbatim, or null when unavailable. Read it for product and entry requirements
deep.measures[].ratestring or null
The published rate text, or null when unavailable. It may combine a base duty and an additional percentage
deep.measures[].fromstring or null
First effective calendar date as YYYY-MM-DD, or null when not stated
deep.measures[].untilstring or null
Last effective calendar date as YYYY-MM-DD, or null when not stated

QUESTIONS

Code, Search or Origin?

Start with Code for the schedule line and base rate. Search finds candidates by product name. Origin adds paid detail for the country of origin of the goods, which can differ from the shipping country.

Is this worldwide?

No. This is the US import schedule. Other countries keep their own tariffs.

What is an HTS code?

An HTS code identifies a line in the US import schedule. Ten digits give the most specific statistical classification. Shorter codes cover broader categories.

How fresh are the rates?

We check USITC daily. Each response identifies the stored revision and edition. If a new release fails our checks, we keep the previous edition while it is reviewed. Effective dates are verified separately.

What does it cost?

Core lookup and search use one pooled request on every plan. Paid deep adds detailed schedule columns and origin-based duty measures. No separate tariff meter.

What does deep add?

Statistical units and the special and column 2 schedule rates. Add origin to match Chapter 99 measures, including rates, dates, and conditional flags. Paid plans. Matching a row does not establish that you meet its conditions.

When is effective_rate filled?

Only with complete reviewed measure coverage, a verified effective date, an 8- or 10-digit code, and clean percentages that stack without unresolved conditions. Compound rates, conditional measures, and overlapping catchall programs leave the rate null. Read deep.reason and the measure rows to see why. A numeric rate covers the matched measures, not necessarily every duty or charge on an entry.

Can I replay an earlier answer?

Pass the edition fingerprint from the original response. Edition without date reads that snapshot with date null. A date request works only when a stored edition has reviewed coverage for that day. Unknown editions and uncovered dates return 404; no latest or nearest substitute is used.

Is this a customs ruling?

This is the published schedule. Classification and the entry filing stay with your broker.

Can I search by product?

Yes. GET /tariff?q=sunglasses searches the schedule descriptions, outline context included, and returns up to 20 candidate lines with parent descriptions and base rates. Search does not determine the correct classification; review a candidate before using it.