← Docs

Tariff API

US HTS lookup. Published base rates, parent descriptions, and optional origin measures.

Look up a US HTS code with 4, 6, 8 or 10 digits, dots optional. Keep leading zeroes. Core returns the published description, base general rate and parent descriptions, with revision, immutable edition and resolution date. Unknown codes return 404. Lookup and search use pooled requests on every plan.

These are schedule records. Search does not classify a product, and a base rate of Free does not establish a duty-free entry.

Lookup

GET
api.parseapi.com/tariff/{code}
Schedule line, base general rate and edition evidence
Explore
Parameters 5
editionstring · query · optional

Immutable edition SHA-256 returned by a previous response. Without date, reads that snapshot with date: null. Unknown editions return 404; never falls back.

Length: 64 to 64 characters

Pattern: ^[a-f0-9]{64}$

datestring · query · optional

YYYY-MM-DD. Explicit dates require a reviewed effective interval; otherwise 404, never nearest/latest fallback. With neither selector, use the current edition and today. Publication dates are not effective intervals.

codestring · path · required

4, 6, 8, or 10 ASCII digits; dots and whitespace optional (0101, 0101.21.00.10)

originstring · query · optional

ISO 3166-1 country of origin of the goods, which may differ from the country of shipment. Only read with paid deep=true

deepboolean · query · optional

Additional schedule columns and statistical units. Add goods origin for matched stored tariff measures; this does not establish complete entry duty. Included on paid plans.

Example responses use an illustrative all-zero edition, not a stored fingerprint. Save a real response's edition for subsequent requests.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.tariff("8471.30.01.00");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "hts": "8471.30.01.00",
  "description": "Portable automatic data processing machines, weighing not more than 10 kg, consisting of at least a central processing unit, a keyboard and a display",
  "lineage": [
    "Automatic data processing machines and units thereof; magnetic or optical readers, machines for transcribing data onto data media in coded form and machines for processing such data, not elsewhere specified or included:"
  ],
  "general": "Free",
  "revision": "2026HTSRev19",
  "edition": "0000000000000000000000000000000000000000000000000000000000000000",
  "date": "2026-09-24"
}

Response fields

htsstring
The code you asked about, normalized with dots (8471.30.01.00)
descriptionstring or null
The schedule line, verbatim
lineagearray
Parent descriptions from the schedule outline, outermost first. Empty for top-level headings
generalstring or null
Published Column 1 general base rate, verbatim. Does not establish the complete duty owed
editionstring
Immutable edition SHA-256. Save the returned value to replay that snapshot; all-zero example fingerprints are illustrative
datestring or null
Resolution date, or null for an edition-only snapshot. Explicit dates require reviewed effective interval coverage; publication dates do not establish it
revisionstring
The official schedule revision used for this answer
linesarray
Search results for ?q=. Up to 20 candidate tariff lines, best match first, each with hts, description, lineage, and general
lines[].lineagearray
Parent descriptions for each search candidate, outermost first; disambiguates lines such as Other

Replay an edition or date

With neither selector, lookup reads the current edition and resolves measures for today. Pass ?edition={sha256} to read that exact immutable snapshot. Without a date, this is a snapshot-only response with date: null; origin detail returns deep.reason: "date_required".

Pass ?date=YYYY-MM-DD, optionally with edition, to resolve an explicitly covered day. The edition must have a reviewed effective interval covering that day. An unknown edition or uncovered date returns 404; it never falls back to the latest or nearest edition. An official publication date is not an effective interval.

Historical resolution is limited to the reviewed editions and intervals actually stored. Incomplete measure coverage keeps the combined rate null, even when a schedule snapshot is available.

GET
api.parseapi.com/tariff?q={query}
Find candidate schedule lines by product
Explore
Parameters 3
editionstring · query · optional

Immutable edition SHA-256 returned by a previous response. Without date, reads that snapshot with date: null. Unknown editions return 404; never falls back.

Length: 64 to 64 characters

Pattern: ^[a-f0-9]{64}$

datestring · query · optional

YYYY-MM-DD. Explicit dates require a reviewed effective interval; otherwise 404, never nearest/latest fallback. With neither selector, use the current edition and today. Publication dates are not effective intervals.

qstring · query · required

Product words (laptop, sunglasses, coffee)

Search includes parent descriptions and returns up to 20 candidates, best match first. Review the line before choosing its code. The envelope carries the same revision, edition and date; both selectors work here too. Chapter 99 measures are read through paid deep, not this search index.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.tariff.search("sunglasses");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "q": "sunglasses",
  "revision": "2026HTSRev19",
  "edition": "0000000000000000000000000000000000000000000000000000000000000000",
  "date": "2026-09-24",
  "lines": [
    {
      "hts": "9004.10.00.00",
      "description": "Sunglasses",
      "lineage": [
        "Spectacles, goggles and the like, corrective, protective or other:"
      ],
      "general": "2%"
    }
  ]
}

Deep

On paid plans, ?deep=true adds statistical units, special and column 2 rates. Add the goods' country of origin with origin=CN to see matched Chapter 99 measures, their dates and conditions. Origin can differ from the shipping country.

deep.effective_rate requires complete reviewed measure coverage, a verified effective date, an 8- or 10-digit code and rates that compose without unresolved conditions. Otherwise it is null and deep.reason explains why. Matched rows still ship. Zero means 0%; null is unresolved.

Reasons are open strings: origin_required, date_required, incomplete_coverage, date_unverified, broad_code, conditional_measures, non_additive_rates and overlapping_programs. Preserve unfamiliar future values. A null reason means the combined rate was resolved.

Without origin, measures is null. An empty array means no stored rows matched; it does not prove complete coverage or no applicable duties. A numeric result is not a complete duty or landed-cost calculation.

Run this Deep example with a paid-plan key. Deep is included in the pooled request, with no separate lookup charge.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.tariff("8471.30.01.00", { deep: true, origin: "CN" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "hts": "8471.30.01.00",
  "description": "Portable automatic data processing machines, weighing not more than 10 kg, consisting of at least a central processing unit, a keyboard and a display",
  "lineage": [
    "Automatic data processing machines and units thereof; magnetic or optical readers, machines for transcribing data onto data media in coded form and machines for processing such data, not elsewhere specified or included:"
  ],
  "general": "Free",
  "revision": "2026HTSRev19",
  "edition": "0000000000000000000000000000000000000000000000000000000000000000",
  "date": "2026-09-24",
  "deep": {
    "origin": "CN",
    "effective_rate": null,
    "measures": [
      {
        "heading": "9903.01.22",
        "description": "Articles the product of China and Hong Kong that are informational materials, including but not limited to, publications, films, posters, phonograph records, photographs, microfilms, microfiche, tapes, compact disks, CD ROMs, artworks, and news wire feeds",
        "rate": "The duty provided in the applicable subheading",
        "from": null,
        "until": null,
        "conditional": false
      },
      {
        "heading": "9903.01.24",
        "description": "Except for products described in headings 9903.01.21, 9903.01.22, 9903.01.23, articles the product of China and Hong Kong, as provided for in U.S. note 2(u) to this subchapter",
        "rate": "The duty provided in the applicable subheading + 10%",
        "from": null,
        "until": null,
        "conditional": false
      },
      {
        "heading": "9903.01.28",
        "description": "Articles the product of any country that (1) were loaded onto a vessel at the port of loading and in transit on the final mode of transit prior to entry into the United States, before 12:01 a.m. eastern daylight time on April 5, 2025; and (2) are entered for consumption, or withdrawn from warehouse for consumption after 12:01 a.m. eastern daylight time on April 5, 2025",
        "rate": "The duty provided in the applicable subheading",
        "from": null,
        "until": null,
        "conditional": true
      },
      {
        "heading": "9903.01.32",
        "description": "Articles the product of any country, classified in the subheadings enumerated in subdivision (v)(iii)(a) of U.S. note 2 to this subchapter",
        "rate": "The duty provided in the applicable subheading",
        "from": null,
        "until": null,
        "conditional": false
      },
      {
        "heading": "9903.01.34",
        "description": "The U.S. content of articles the product of any country, in which the U.S. content of the article provides at least 20 percent of the Customs value of the imported article, as provided for in subdivision (v)(xvii) of U.S. note 2 to this subchapter",
        "rate": "The duty provided in the applicable subheading",
        "from": null,
        "until": null,
        "conditional": false
      },
      {
        "heading": "9903.02.01",
        "description": "Articles the product of any country determined by U.S. Customs and Border Protection to have been transshipped to evade applicable duties under section 2 of Executive Order [Insert EO number], as amended [Compiler's note: [Insert EO Number] refers to Executive Order 14326, 90 Fed. Reg. 37963.]",
        "rate": "The duty provided in the applicable subheading + 40%",
        "from": null,
        "until": null,
        "conditional": true
      },
      {
        "heading": "9903.02.78",
        "description": "Articles the product of any country, as provided for in subdivision (v)(iii)(b) of U.S. note 2 to this subchapter",
        "rate": "The duty provided in the applicable subheading",
        "from": null,
        "until": null,
        "conditional": false
      },
      {
        "heading": "9903.03.04",
        "description": "Articles the product of any country, as provided for in subdivision (aa)(iii) of U.S. note 2 to this subchapter",
        "rate": "The duty provided in the applicable subheading",
        "from": null,
        "until": null,
        "conditional": false
      },
      {
        "heading": "9903.05.31",
        "description": "Except for products described in headings 9903.05.85–9903.05.92, articles the product of China, as provided for in U.S. note 52 to this subchapter",
        "rate": "The duty provided in the applicable subheading + 12.5%",
        "from": null,
        "until": null,
        "conditional": false
      }
    ],
    "reason": "incomplete_coverage",
    "units": [
      "No."
    ],
    "special": null,
    "other": "35%"
  }
}

Deep fields

deep.unitsarray
Units of quantity (No., kg, doz.). Empty when the schedule lists none
deep.specialstring or null
Column 1 special rate, verbatim. Free trade agreements and preference programs
deep.otherstring or null
Column 2 rate, verbatim. The statutory rate
deep.reasonstring or null
Why effective_rate is null: origin_required, date_required, incomplete_coverage, date_unverified, broad_code, conditional_measures, non_additive_rates, or overlapping_programs. Open string; preserve future values. Null when resolved
deep.originstring or null
Country of origin of the goods, resolved to ISO alpha-2. This can differ from the country of shipment
deep.effective_ratenumber or null
For an 8- or 10-digit code, a combined percentage for matched measures only with complete measure coverage, a verified effective date and no unresolved conditions. Otherwise null. This does not establish the complete duty owed.
deep.measuresarray or null
Chapter 99 measures matched by code and origin. Each keeps its description, rate, effective dates, and conditional flag. Read the text for product and entry requirements. These rows remain available when coverage is incomplete; an empty array does not prove no duties apply.
deep.measures[].conditionalboolean
Product or entry conditions require review. The combined effective_rate stays null.
deep.measures[].headingstring
The matched Chapter 99 heading, such as 9903.88.03
deep.measures[].descriptionstring or null
The provision text, verbatim, or null when unavailable. Read it for product and entry requirements
deep.measures[].ratestring or null
The published rate text, or null when unavailable. It may combine a base duty and an additional percentage
deep.measures[].fromstring or null
First effective calendar date as YYYY-MM-DD, or null when not stated
deep.measures[].untilstring or null
Last effective calendar date as YYYY-MM-DD, or null when not stated

Have a file?

Upload HTS codes to Bulk to append descriptions, base general rates, revision and edition beside your original rows. Use an HTS or tariff code header. Bulk preserves leading zeroes and does not guess codes from product descriptions.

Questions? Email