How HTS tariff stacking actually works (with worked examples)
A duty rate is rarely one number. Most U.S. imports pay several duties at once, and some duties suppress others by law. Here is the current program roster, the carve-outs, and four worked examples you can verify against the official source.
How HTS tariff stacking actually works
Last verified against U.S. regulations as of August 30, 2026. See our live status page for current data.
Most U.S. imports pay several duties at once. This guide walks through how to calculate the full stack on a single ten-digit HTS code: the MFN (most-favoured-nation) base rate, a Section 232 product-specific duty on metals, autos, or semiconductors, one or more Section 301 duties, and, for Canadian goods, the new Section 338 duties. Two programs that dominated 2025 and early 2026, the IEEPA tariffs and the Section 122 reciprocal surcharge, are now historical; they still matter for any entry dated while they were in force, and we cover both below.
Get the stack wrong and the landed cost is off by tens of percentage points. Customs entries fail. Margins disappear. So if you are pricing imports, building an invoicing system, or just trying to understand a number, the stack matters more than any single rate.
This article walks through how it actually works.
The programs in force today
Four duty programs can apply on top of the MFN base rate. Each is enacted under different statutory authority, each targets different goods or origins, and each interacts with the others differently.
Section 232 (Trade Expansion Act of 1962). Product-specific national-security tariffs. Since April 2026, steel, aluminum, and copper are one merged regime under Chapter 99 headings 9903.82.01 through 9903.82.26; the headline rate is 50% on the full customs value of the article. The old metal-content valuation rule is dead, and the old heading families (9903.85.xx steel, 9903.78.xx copper) are deleted from the HTS. Separate 232 actions cover autos and auto parts (25%, heading family 9903.94), trucks and buses (9903.74), semiconductors (9903.79, where the default declaration lane charges 0%), timber and lumber (9903.76), and, from September 29, 2026, patented pharmaceuticals (9903.04.60-.69). Section 232 attaches to the goods, not the origin: German steel and Chinese steel pay the same rate.
Section 301 (Trade Act of 1974). This stopped being just a China program in July 2026. There are now three separate actions, and one shipment can owe more than one of them:
- The China lists, per-HTS and China-only, under
9903.88.*and9903.91.*. Current rates pulled live from our data:
| List | Chapter 99 code | Current rate | Active rows |
|---|---|---|---|
| List 1 | 9903.88.01 |
25% | 1722 |
| List 2 | 9903.88.02 |
25% | 574 |
| List 3 | 9903.88.03 |
25% | 11848 |
| List 4A | 9903.88.15 |
7.5% | 5960 |
| Semiconductors | 9903.91.05 |
50% | 20 |
-
Brazil, country-wide since July 22, 2026: +25% on all products of Brazil regardless of HTS, under
9903.05.01. -
The forced-labor action, effective July 24, 2026: an additional 10% or 12.5% on all products of 60 economies that USTR determined fail to enforce a forced-labor import prohibition, under headings
9903.05.20through9903.05.84. The rate is a property of the economy, not the product: 10% where the economy has (or committed to) an import prohibition, 12.5% otherwise. Vietnam, Thailand, India, and dozens of other origins that never carried a Section 301 duty before now do. There is a substantial exemption apparatus, including a universal product-exemption list under heading9903.05.86that relieves the duty on specific articles from every investigated economy.
Section 338 (Tariff Act of 1930). A dormant authority used for the first time in 2026, against Canada. Effective August 22, 2026 (moved from August 19, 2026 by Proclamation 11056), Canadian-origin goods in three product groups pay an additional 50%: alcoholic beverages (9903.03.12), dairy (9903.03.13), and motor vehicles (9903.03.14). It applies regardless of USMCA origination, but it does not apply to goods already subject to Section 232.
Section 201 safeguards (Trade Act of 1974). Tariff-rate quotas rather than flat duties, under the 9903.45 family: washing machines, solar cells and modules, and, since August 2026, quartz surface products. The in-quota and over-quota headings charge different rates and quota consumption is tracked per quarter by CBP, so a rate API cannot tell you which side of the quota your entry lands on. We disclose both lanes rather than guessing.
The two historical programs
Section 122 reciprocal surcharge. A flat 10% under 9903.03.01, imposed February 24, 2026 as a balance-of-payments measure. Section 122 caps that authority at 150 days, and the surcharge expired after July 23, 2026. For any as_of on or before that date the 10% still applies (unless the line was on the 9903.03.03 exemption list or carried a Section 232 duty, both of which suppressed it). From July 24 it is gone. Our sunset guide covers the boundary in detail.
IEEPA (International Emergency Economic Powers Act). Country-specific emergency tariffs active throughout 2025. The Supreme Court invalidated the underlying executive orders on February 20, 2026, and collection ceased on February 24, 2026. We preserve the historical rates for any as_of before the cutoff and stop applying them after. Importers who paid IEEPA duties in 2025 may be eligible for refunds; see our IEEPA refund guide.
Both programs illustrate the same integration rule: price the entry date, not “today”. A calculator that cannot answer for a past as_of cannot reconcile an invoice.
The stacking rules that matter
Once you know which programs apply, a handful of rules determine the math.
Duties sum, they do not compound. Each duty is applied independently to the customs value, then added. A 16.5% MFN base plus 25% Section 301 plus 12.5% Section 301 equals 54% total, not compounded.
One shipment can owe two Section 301 duties. Since July 24, 2026 a Chinese line can carry a 9903.88.* list duty and a 9903.05.* forced-labor duty at once, and a Brazilian line stacks the 25% country-wide duty with the 12.5% forced-labor duty. “Section 301” on an invoice line no longer tells you which action you are looking at; the Chapter 99 heading does.
The forced-labor duty has real carve-outs. The universal exemption list under 9903.05.86 relieves specific articles (much of the computer, semiconductor, and telecom universe among them) from every investigated economy, and thirteen economies have additional country-specific exemption lists. Miss the exemptions and you over-charge broad swaths of electronics by 10 to 12.5 points.
Section 338 excludes goods already under Section 232. A Canadian product covered by a 232 duty does not also pay the 50% Section 338 duty. Section 338 also carves out WTO civil-aircraft articles.
Within Section 232, autos primacy suppresses metals. When the autos/auto-parts 232 duty applies to an article, the steel/aluminum/copper 232 duty does not stack on top of it.
FTAs do not waive any of this. USMCA and other free-trade agreements can reduce or eliminate the MFN base rate for qualifying goods, but they do not waive Section 232 or Section 301, and Section 338 applies to Canadian goods regardless of USMCA origination.
Worked example 1: Cotton T-shirts from Vietnam
HTS 6109.10.00, origin VN, today’s date.
| Program | Chapter 99 | Rate | Why |
|---|---|---|---|
| MFN base | (none) | 16.5% | USITC general rate; textiles carry a substantial MFN base. |
| Section 301 (forced labor) | 9903.05.84 | + 12.5% | Vietnam is one of the 60 investigated economies, at the 12.5% tier. Cotton shirts are not on an exemption list. |
| Total | 29% |
Before July 24, 2026 this line paid base plus the 10% Section 122 surcharge and no Section 301 at all. The total barely moved, but the composition changed completely. A stale calculator gets this line wrong in both directions at once: it charges an expired surcharge and misses a live duty.
Worked example 2: Steel pipe from Canada
HTS 7306.30.50, origin CA, today’s date.
| Program | Chapter 99 | Rate | Why |
|---|---|---|---|
| MFN base | (none) | 0.0% | USITC general rate. |
| Section 232 (merged metals) | 9903.82.02 | + 50% | Steel pipe is in the merged metals scope (Proclamation 11021), on the full customs value. Applied regardless of origin. |
| (none) | Steel pipe is not in the alcohol, dairy, or motor-vehicle scope, and goods under Section 232 are excluded from Section 338 anyway. | ||
| Total | 50% | Plus any AD/CVD that may be specific to the producer. |
Same product from Vietnam pays the same Section 232 rate. The duty attaches to the goods, not the origin. A USMCA-qualifying Canadian steel pipe still pays it: FTA preference reaches the base rate only.
Worked example 3: Network switches from China
HTS 8517.62.00.20, origin CN, today’s date.
| Program | Chapter 99 | Rate | Why |
|---|---|---|---|
| MFN base | (none) | 0.0% | USITC general rate. |
| Section 301 (List 3) | 9903.88.04 | + 25% | CN origin, on USTR’s List 3 second tranche. Applied. |
| (exempt) | China is an investigated economy, but this article is on the universal exemption list (heading 9903.05.86). Not applied. | ||
| Total | 25% |
This is the example to test any calculator against. It has to know the China lists at the ten-digit level (the sibling statistical line 8517.62.00.90 is on List 4A at a different rate), know that a second Section 301 duty exists for China since July 2026, and know the exemption list that switches it off for this article.
Worked example 4: Cotton T-shirts from Brazil
HTS 6109.10.00, origin BR, today’s date.
| Program | Chapter 99 | Rate | Why |
|---|---|---|---|
| MFN base | (none) | 16.5% | USITC general rate. |
| Section 301 (Brazil) | 9903.05.01 | + 25% | Country-wide duty on all products of Brazil. Applied. |
| Section 301 (forced labor) | 9903.05.27 | + 12.5% | Brazil is also an investigated economy at the 12.5% tier. The two Section 301 actions stack. |
| Total | 54% |
Two duties under the same statute, on the same line, at the same time. Anything that models “the Section 301 rate” as a single number per HTS code cannot represent this entry.
How /api/v1/tariffs/resolve returns the full stack
If you are integrating duty calculation into a system, the easiest way to see the stack is to call /resolve directly:
GET /api/v1/tariffs/resolve?hts=8517.62.00.20&origin=CN&as_of=2026-08-30
The response includes base_tariff, the list of additional_measures actually applied (in the switches example, just the List 3 row), and a summary with the totals. By default, suppressed and exempted measures do not appear in additional_measures; they are filtered out before the response is built. Conditional lanes that we disclose but cannot charge for you, like the Section 201 quota pair or the 0% Section 232 semiconductor declaration lane, come back in a separate advisory_measures array so they never distort the total.
For invoicing workflows that need the full picture, pass ?include_inapplicable_measures=true. Measures that fail the origin test come back with applies_to_origin: false, and suppressed measures come back in a suppressed_measures array, each with a suppression_reason explaining which carve-out removed it, so the invoicing system can show what was carved out and why without having to guess.
What can go wrong
The stack itself is straightforward once you know the rules. Where third-party tariff data tends to drift is in four places.
Data frozen before July 24, 2026. That one date removed the Section 122 surcharge and added the forced-labor Section 301 duty on 60 origins. A source last updated in the first half of 2026 charges an expired 10% and misses a live 10 to 12.5%, and on many lines the two errors nearly cancel, which makes the staleness hard to spot from the total alone. Always check the composition, not just the number.
The dead Section 232 heading families. The 9903.85.xx steel series and 9903.78.xx copper headings were deleted from the HTS when the metals regimes merged into 9903.82.* in April 2026. Data keyed to the old headings silently stops matching.
Metal-content valuation. Since April 6, 2026 the merged metals duty applies to the full customs value of the article. Tools still computing 232 duty on the metal-content value under-charge every derivative line.
Treating “Section 301” as one thing. Sixty economies now carry a Section 301 heading of some kind. Reconciliation logic that assumes Section 301 means China, or that one HTS code has one Section 301 rate, breaks on any Brazilian entry and on every forced-labor line.
Common questions
Does the Section 122 surcharge still apply?
No. It expired after July 23, 2026, at the end of its 150-day statutory window. It still applies to historical lookups with an as_of between February 24 and July 23, 2026, where it was not suppressed by Section 232 or the 9903.03.03 exemption list.
Does Section 232 stack with Section 338? No. Goods already subject to a Section 232 duty are excluded from the Section 338 Canada duties by the proclamation itself (U.S. note 51(c)).
Can two Section 301 duties apply to one shipment?
Yes, since July 24, 2026. A Chinese article can owe a China list duty and the forced-labor duty; a Brazilian article can owe the 25% country-wide duty and the forced-labor duty. The exemption lists under 9903.05.85 and following headings are what most often switch the forced-labor leg off.
When did IEEPA tariffs end?
The Supreme Court invalidated the underlying executive orders on February 20, 2026. Collection ceased on February 24, 2026. IEEPA tariffs do not apply to imports on or after that date, but they remain applicable for any historical lookup with an as_of before the cutoff.
Are MPF and HMF included in this stack? No. This article covers duty stacking only. Merchandise Processing Fee (MPF, around 0.3464% with caps) and Harbor Maintenance Fee (HMF, 0.125%) are customs fees, not tariff duties, and are calculated separately by your customs broker.
How do I calculate the import duty for a specific HTS code?
Look up the programs in order: MFN base, then Section 232, then every applicable Section 301 action, then Section 338 for Canadian goods, applying the carve-outs above. Each is applied independently to the customs value and summed. Or call our live calculator or /api/v1/tariffs/resolve and the math runs for you.
Where the rates come from
Every rate on Tariffs API is pulled directly from the official source: the USITC Harmonized Tariff Schedule JSON for MFN base rates, USTR notices and the Federal Register for the Section 301 actions, CBP CSMS bulletins for the forced-labor heading tables, and Federal Register proclamations for Section 232 and Section 338. We keep the raw source beside the structured rate and re-test a daily regression corpus against every change. Read more on the data sourcing page.
If you spot a specific HTS where the stack on Tariffs API does not match the official source, send us the code, origin, and expected duties and we will add it to the regression corpus and investigate the same day.
Calculate the stack on your own HTS
Try /resolve against any HTS code in the live calculator, or read the API documentation for the full schema. The forced-labor exemption lists, the Section 338 carve-outs, the merged-metals regime, and the Section 122 sunset boundary are all handled correctly, verified daily by our regression corpus. Every worked-example total on this page is rendered live from the same resolver the API uses, so the numbers you see here are the numbers a client gets.