U.S. Tariff Resolution API for Developers
Resolve HTS + country into structured, explainable duty calculations — including Chapter 99 and additional measures.
The HTS is messy. We prioritize transparency over black-box answers.
The problem
U.S. tariff logic is messy. The HTS is dense, Chapter 99 references stack on top of base duties, and rules change. Building trade-aware systems means wrestling with formatting, inheritance, and measure stacking—or trusting black-box answers.
- Formatting & inheritance — HTS codes have different formats; subheadings inherit from headings. Manual lookups break on typos and truncation.
- Chapter 99 & measure stacking — Additional duties (Section 301, 232, etc.) often reference Chapter 99. Base + special + additional measures stack; resolving them correctly is non-trivial.
- Changing rules — Rates and measures update. Static tables and spreadsheets go stale. You need a source that tracks changes and returns what applies for a given date.
What you get
Compliance-grade resolution: HTS + origin country → deterministic JSON with warnings and a confidence score. No black box.
Resolve endpoint
Single HTS + origin country. Returns base duty, trade agreement treatment, additional measures (Section 301, 232, IEEPA), and Chapter 99 resolution when applicable.
Bulk Resolve endpoint Pro
Up to 200 HTS codes per request. Same resolution logic, batched. Ideal for catalogs, ERPs, and compliance workflows.
Agreements support
USMCA, KORUS, GSP, and other FTAs/preference programs. The API returns the applicable special rate for the origin country you pass.
Transparency
- Warnings — When something is ambiguous or truncated
- Confidence score — How certain the match is
- match_type / match_level — Exact, inherited, or normalized
- attempted_candidates — What we tried when resolution wasn’t exact
Example
Request: GET /api/v1/tariffs/resolve?hts=8541.10.00.80&origin=CN
{
"hts": "8541.10.00.80",
"hts_normalized": "8541.10.00.80",
"origin": "CN",
"match_type": "exact",
"match_level": "10",
"confidence": 1.0,
"base_duty": { "rate": "2.5%", "rate_type": "general" },
"additional_measures": [
{ "description": "Section 301", "rate": "25%", "chapter_99_ref": "9903.88.04" }
],
"warnings": [],
"attempted_candidates": []
}
HTS normalization, match metadata, additional measures, and warnings—all in one response.
Data Sourcing
Tariffs API uses the U.S. Harmonized Tariff Schedule (HTS) as the primary source. We never invent rates—what you get is traceable to official data.
Base rates & hierarchy
General (Column 1), Special (FTAs), and Column 2 rates come from the official HTS schedule. Structural hierarchy (headings, subheadings) is preserved for inheritance and lookup.
Chapter 99 resolution
Section 301, Section 232, IEEPA, and other additional duties reference Chapter 99 codes. We resolve these to numeric rates from our database when the line exists.
Updates
We track USTR and CBP updates. Data is refreshed as official changes are published. Pass as_of to the API to get rates effective on a specific date.
Pricing
Simple plans for developers building trade-aware systems.
Basic
Single resolve only. No bulk.
- Resolve endpoint (HTS + origin)
- Chapter 99 & agreements
- API calls/month (see tier)
- Bulk Resolve
Pro
Bulk Resolve + higher throughput.
- Bulk Resolve (up to 200 HTS/request)
- Higher rate limits
- MCP server access
- Priority support
What developers say
"Saved us days of building our own tariff lookup. One endpoint, clear JSON."
— Early user, trade tech
"This new endpoint is great!"
— Early user, compliance tooling
"Bulk resolve is a game-changer for our catalog. 200 HTS per request."
— Early user, procurement platform
Tariff resolution
Frequently Asked Questions
Plain-English answers about HTS codes, trade agreements, data sourcing, and programmatic tariff lookup.
We use the U.S. Harmonized Tariff Schedule (HTS) as the primary source. Base rates, special rates under trade agreements, and structural hierarchy come from the official schedule. Chapter 99 references (Section 301, 232, IEEPA) are resolved from our database when the line exists. See the Data Sourcing section above for details.
We track USTR and CBP updates. Data is refreshed as official changes are published. The API returns what applies for a given date when you pass as_of.
Yes. Section 301, Section 232, IEEPA, and other additional duties are returned as separate measures with clear labels. When they reference Chapter 99, we resolve to numeric rates when available. See Section 301, Section 232, and IEEPA for background.
The confidence score reflects how well the input HTS matched our data: exact match (1.0), inherited from a parent heading, or normalized from a variant format. Low confidence means you should verify—we surface warnings and attempted_candidates when resolution isn't exact.
No. TariffsAPI provides structured tariff data and indicative duty rates based on publicly available U.S. government sources. We do not act as a customs broker, file entries, or transact customs business. Classification, valuation, and customs clearance require a licensed customs broker. Use our API to build trade-aware features—calculators, ERPs, compliance tools—and verify final duties with CBP or a licensed broker.
No. TariffsAPI does not provide legal advice or binding classification rulings. Our tariff data and calculations are indicative only, based on published schedules and trade measures that may change. You are responsible for determining the correct HTS classification and verifying final duties with CBP or a licensed customs broker.
An HTS (Harmonized Tariff Schedule) code is a number that classifies goods for U.S. customs. It determines which duty rate applies. Codes are hierarchical (e.g. 8541 is a heading; 8541.10.00 is a subheading). Tariffs API uses the full code and country of origin to return the applicable rate. You can browse codes in our HTS index.
Countries with a U.S. trade agreement or preference program often get a lower “special” rate instead of the general rate. The API takes the country of origin you pass and returns the correct rate—e.g. USMCA for Canada/Mexico, KORUS for Korea, and other FTAs. You get one resolved rate per HTS and country.
Section 301 refers to additional U.S. tariffs imposed on certain products from specific countries (notably China) following trade investigations. These appear as extra duties on top of the base HTS rate. Tariffs API returns them as separate measures with clear labels. See our Section 301 explainer for more.
Yes. The resolve endpoint accepts an HTS code and country of origin and returns base duty, trade agreement treatment, and any additional duties (e.g. Section 301, 232). You can build calculators, spreadsheets, or compliance tools on top. For a no-code check, use the Tariff Calculator.
Section 232 covers tariffs based on national security (e.g. steel and aluminum). IEEPA relates to sanctions and other restrictions. Tariffs API includes these when they apply to a given HTS and origin. Details: Section 232, IEEPA.
Ship trade-aware features without building a tariff engine
One API. HTS + country. Deterministic JSON. No black box.
Tariffs API