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.

Free

Dashboard access only. No API.

Free

Basic

Single resolve only. No bulk.

  • Resolve endpoint (HTS + origin)
  • Chapter 99 & agreements
  • API calls/month (see tier)
  • Bulk Resolve
$49 /mo
Pro

Pro

Bulk Resolve + higher throughput.

  • Bulk Resolve (up to 200 HTS/request)
  • Higher rate limits
  • MCP server access
  • Priority support
$199 /mo

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.

Where does the data come from?

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.

How often is it updated?

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.

Do you cover reciprocal tariffs / special duties?

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.

How should I interpret the confidence score?

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.

Does TariffsAPI replace a customs broker?

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.

Is this legal advice or a binding tariff determination?

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.

What is an HTS code?

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.

How do trade agreements affect tariffs?

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.

What is Section 301?

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.

Can I calculate tariffs programmatically?

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.

What about Section 232 and IEEPA?

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.