HS Code Lookup
Search HTS (GET)
GET
/v1/hs/search$0.01 per callKeyword search of the HTS schedule loaded from the USITC. Each tariff line is searched together with its parent lines, plurals and a few everyday words are understood, and lines that contain all the words rank first. Chapters 98 and 99 (temporary and special provisions) are not searched, and a line without a rate of its own shows its parent line's rate. This is a keyword search, not a classifier: use POST /v1/hs/classify for an AI-assisted suggestion.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| qrequired | query | string | Search keyword |
| limitoptional | query | integer | default 25 |
Response fields
| Field | Type | Description |
|---|---|---|
| success | boolean | e.g. true |
| data | object | |
| data.query | string | e.g. laptop computer |
| data.totalResults | number | e.g. 6 |
| data.results | array | |
| data.results[].htsNumber | string | e.g. 9017.20.80.40 |
| data.results[].description | string | e.g. Hand operated input devices which transmit position data to c… |
| data.results[].indent | number | e.g. 3 |
| data.results[].generalDutyRate | string | e.g. 4.6% |
| data.results[].specialDutyRate | null | |
| data.results[].otherDutyRate | null | |
| data.results[].units | array | |
| data.results[].chapter | string | e.g. 90 |
| data.results[].heading | string | e.g. 9017 |
| data.results[].subheading | string | e.g. 901720 |
| meta | object | |
| meta.dataSource | object | |
| meta.dataSource.name | string | e.g. ComplianceGrid |
| meta.dataSource.provenance | string | e.g. computed |
Fields are read from a real response captured 2026-11-04, shortened. Optional fields may be absent in other responses.
Errors
- 400 invalid request
- 401 missing or bad key
- 403 not in your plan
- 429 rate limited, see Retry-After
- 402 payment required
- 5xx retry with backoff
Error bodies and codes are described in Error codes and troubleshooting.