What Is the USITC Reststop API?
The United States International Trade Commission (USITC) publishes the Harmonized Tariff Schedule of the United States (HTSUS) as a free REST API at https://hts.usitc.gov/reststop. It requires no authentication and covers all 99 HTS chapters.
If you found this page because you are building a trade compliance integration and need HTS data programmatically, this reference documents every endpoint, parameter, and response field the USITC API exposes — along with its limitations and how TradeFacts.io compares.
Base URL
https://hts.usitc.gov/reststop
All endpoints are unauthenticated HTTP GET requests. The API returns JSON.
Endpoints
GET /searchByNumber
Look up a specific HTS code by number.
GET https://hts.usitc.gov/reststop/searchByNumber?query=8471.30.01.00
GET https://hts.usitc.gov/reststop/searchByNumber?query=0101.21.00.10
Parameters:
query— Full or partial HTS number (required). Supports prefix matching.release— Optional. Specific schedule release (e.g.2024BasicDec). Defaults to current.
Response fields: htsno, indent, description, unit1, unit2, general, special, other, footnotes, quota_quantity, additional_duties.
GET /searchByDescription
Full-text keyword search across HTS descriptions.
GET https://hts.usitc.gov/reststop/searchByDescription?query=aluminum+wire
GET https://hts.usitc.gov/reststop/searchByDescription?query=semiconductor
Parameters:
query— Keyword string (required). Space-separated terms are treated as AND.release— Optional. Specific schedule release.
GET /releaseList
Returns the list of all available schedule releases.
GET https://hts.usitc.gov/reststop/releaseList
Response is a JSON array of release identifiers (e.g. ["2024BasicDec", "2024BasicJun", ...]). Use these values in the release parameter of other endpoints.
GET /getChapter
Returns all HTS records for a given chapter number.
GET https://hts.usitc.gov/reststop/getChapter?chapter=84
GET https://hts.usitc.gov/reststop/getChapter?chapter=01
Parameters:
chapter— Two-digit chapter number, zero-padded (required).release— Optional. Specific schedule release.
Chapter responses can be large — Chapter 84 (machinery) returns several hundred records.
Response Format
All endpoints return a JSON object with an HTSDataSet array:
{
"HTSDataSet": [
{
"htsno": "8471.30.01.00",
"indent": "2",
"description": "Portable automatic data processing machines...",
"general": "Free",
"special": "Free (A,AU,BH,CL,CO,D,E,IL,JO,...)",
"other": "35%",
"unit1": "No.",
"unit2": "",
"footnotes": "",
"quota_quantity": "",
"additional_duties": ""
}
]
}
Heading nodes — short codes like 8471 that represent category headers — appear in results with empty rate fields. Actual duty rates exist only on leaf (10-digit) codes.
Known Limitations
These are the production pain points most engineering teams hit after their initial prototype.
- No change detection. There is no endpoint to tell you what changed between releases. To detect HTS updates you must download two full releases and diff them yourself.
- US-only. There is no Canadian Customs Tariff equivalent. Teams needing cross-border data — CUSMA/USMCA preferential rates, Canadian MFN rates — must source and maintain that dataset separately.
- Unstructured additional duties. Section 301, 232, and 201 surcharges appear as unstructured text in
additional_dutiesor folded intospecial. Parsing them programmatically requires regex work and ongoing maintenance as tariff actions evolve. - No published SLA. The API has no uptime guarantee. Teams have reported intermittent 500 errors, particularly around USITC schedule publication dates.
- No webhooks or push notifications. You must poll to detect schedule changes.
- Release lag. New schedule releases appear on the API with a delay after the official USITC publication date.
How TradeFacts.io Compares
TradeFacts.io is a commercial HTS and Canadian Customs Tariff API built for production trade compliance software. Here is how it maps to the USITC reststop endpoints:
| Capability | USITC Reststop | TradeFacts.io |
|---|---|---|
| US HTS lookup by code | ✓ /searchByNumber |
✓ GET /api/hts/{code} |
| US HTS keyword search | ✓ /searchByDescription |
✓ GET /api/search?q= |
| US HTS by chapter | ✓ /getChapter |
✓ GET /api/chapter/{n} |
| Canadian Customs Tariff | ✗ Not available | ✓ GET /api/ca/{code} (Tier 2+) |
| CUSMA/UST preferential rates | ✗ Not available | ✓ Included in all CA records |
| Nightly change detection | ✗ Manual diff required | ✓ GET /api/changes |
| Webhooks on tariff changes | ✗ Not available | ✓ HMAC-signed (Tier 3) |
| Uptime SLA | ✗ None published | ✓ 99.5% target |
| Cost | Free | From $199/month after 30-day free trial |
Quick Start: Migrating from USITC to TradeFacts.io
The endpoint mapping is straightforward. Request a free trial key at tradefacts.io/contact.html and swap the URLs:
# USITC: lookup by code
curl "https://hts.usitc.gov/reststop/searchByNumber?query=8471.30.01.00"
# TradeFacts: same lookup
curl -H "X-API-Key: YOUR_KEY" \
"https://tradefacts.io/api/hts/8471.30.01.00"
# USITC: keyword search
curl "https://hts.usitc.gov/reststop/searchByDescription?query=aluminum+wire"
# TradeFacts: same search
curl -H "X-API-Key: YOUR_KEY" \
"https://tradefacts.io/api/search?q=aluminum+wire"
# TradeFacts only: Canadian Customs Tariff
curl -H "X-API-Key: YOUR_KEY" \
"https://tradefacts.io/api/ca/search?q=aluminum"
# TradeFacts only: what changed since last USITC update?
curl -H "X-API-Key: YOUR_KEY" \
"https://tradefacts.io/api/changes"
Try TradeFacts.io Free for 30 Days
Full US HTS and Canadian Customs Tariff API. Nightly change detection. No credit card required.
Request Trial Access