TariffTrust API

API reference

Every operation of the TariffTrust API with its fields, its answer and its errors, read from the OpenAPI description the API serves.

Calling the API

Base URL
https://api.tarifftrust.com
Authentication
An API key of your workspace in Authorization: Bearer (or X-API-Key), kept on your server. A key has the read permission, for the catalog and the saved estimates, and the calculate permission, for the estimates. Create a key in your workspace.
Format
JSON in, JSON out. Amounts are strings in US dollars; null is unknown, never zero. The responses shown are taken from real answers, shortened.
Limits
A number of requests per minute and a quota of estimates per period, by plan: see errors and limits.
Clients
Official clients: pip install tarifftrust for Python, npm install tarifftrust for Node.js, with examples on GitHub. From Java or any other language, the API is plain HTTP and JSON, described in OpenAPI.
MCP
The same operations as tools for AI agents, at https://api.tarifftrust.com/mcp/. Connect an MCP client.

Estimates

Estimate one product

POST/v1/estimatesTry it in the console

Every US duty and fee that applies to one product at a date, each with its official source. Without a customs value, the duty rate. Not saved: an unsaved estimate cannot be replayed, reported or notified in an incident; save it with POST /v1/saved-estimates. Needs the calculate permission; counted in the quota unless it gives no figure of the duty: a question asked without any duty amount or rate (status needs_information), a code the tariff does not have or that names no product, a regime the service does not calculate. A question that gives the duty of each answer (scenarios), their bounds or the subtotal already known is counted.

The MCP server offers it as the tool estimate.

curl -X POST "https://api.tarifftrust.com/v1/estimates" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hts": "6109.10.00.12",
    "origin": "CN",
    "customs_value": "10000"
  }'
Response 200
{
  "hts": "6109100012",
  "origin": "CN",
  "reference": "",
  "as_of": "2026-11-03",
  "as_of_instant": null,
  "currency": "USD",
  "engine_version": "2.18",
  "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
  "publication_label": "2026 HTS Revision 22",
  "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
  "knowledge_at": "2026-10-31T00:46:32.836Z",
  "status": "calculated",
  "components": [
    {
      "id": "base_rate",
      "label": "Base duty",
      "program": "base",
      "heading": null,
      "expression": "16.5%",
      "terms": [
        {
          "kind": "ad_valorem",
          "rate": "0.165"
        }
      ],
      "amount": "1650.00",
      "status": "calculated",
      "required_fields": [],
      "source": {
        "authority": "USITC",
        "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
        "title": "2026 HTS Revision 22",
        "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
        "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
      }
    },
    {
      "id": "9903.05.31#9903.05.31",
      "label": "Note 52 additional duty — China — 9903.05.31",
      "program": "note52_country",
      "heading": "9903.05.31",
      "rule": "9903.05.31",
      "expression": null,
      "terms": [
        {
          "kind": "ad_valorem",
          "rate": "0.125"
        }
      ],
      "amount": "1250.00",
      "status": "calculated",
      "required_fields": [],
      "source": {
        "authority": "USITC",
        "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
        "title": "2026 HTS Revision 20",
        "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
      }
    },
    {
      "id": "9903.88.15#9903.88.15-list",
      "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
      "program": "301",
      "heading": "9903.88.15",
      "rule": "9903.88.15",
      "expression": null,
      "terms": [
        {
          "kind": "ad_valorem",
          "rate": "0.075"
        }
      ],
      "amount": "750.00",
      "status": "calculated",
      "required_fields": [],
      "source": {
        "authority": "USITC",
        "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_21_json.json",
        "title": "2026 HTS Revision 21",
        "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
      }
    }
  ],
  "reserved_components": [],
  "review_pending": [],
  "warnings": [],
  "alerts": [],
  "required_fields": [],
  "sources": [
    {
      "authority": "USITC",
      "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
      "title": "2026 HTS Revision 22",
      "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
      "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
    }
  ],
  "known_duty_subtotal": "3650.00",
  "estimated_duty": "3650.00",
  "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
  "base_rate": "16.5%",
  "match": {
    "type": "exact",
    "level": 10,
    "rate_basis": "parent",
    "matched_hts": "6109100012",
    "rate_hts": "61091000"
  },
  "duty_rate": {
    "status": "complete",
    "estimated_ad_valorem_rate": "0.365",
    "total_ad_valorem_rate": "0.365",
    "basis": "Decimal fraction of customs value; implemented duties only, excluding fees and AD/CVD."
  },
  "assumptions": [
    {
      "fact": "donation_exemption_claimed",
      "value": false,
      "label": "Donation exemption claimed",
      "question": "Do you claim the exemption for donations intended to relieve human suffering?",
      "type": "boolean",
      "choices": null,
      "reason": "Donation exemption claimed: not declared",
      "measures": [
        {
          "heading": "9903.05.91",
          "label": "Note 52 — donations — 9903.05.91"
        }
      ],
      "alternatives": [
        {
          "value": true,
          "status": "calculated",
          "estimated_duty": "2400.00"
        }
      ]
    }
  ],
  "answers": [],
  "description": "T-shirts, singlets, tank tops and similar garments, knitted or crocheted: › Of cotton › Men's or boys': › Other T-shirts: › Men's (338)",
  "statistical_units": [
    "doz.",
    "kg"
  ],
  "column_rates": {
    "general": "16.5%",
    "special": "Free (AU,BH,CL,CO,IL,JO,KR,MA,OM,P,PA,PE,S,SG)",
    "other": "90%"
  },
  "input_guidance": [],
  "fees": [],
  "total_fees": null,
  "known_fee_subtotal": null,
  "fees_status": "not_requested",
  "estimated_landed_cost": "13650.00",
  "freshness": {
    "checked_at": "2026-11-03T02:25:05.924778+00:00",
    "age_hours": 5.13,
    "stale": false,
    "basis": "Official sources verified every 6 hours; stale after 48 hours"
  },
  "scenarios": null,
  "policies": []
}

Request

Idempotency-Key
header · stringMakes a request safe to retry, after a timeout for instance.
More

Send a new unique value with each request (a UUID). If no response comes back, send the same request again with the same key: within 7 days, you get the first response, and the request counts once. The same key with a different request is refused (409). An error response is not kept: the request sent again is calculated anew. A key belongs to its operation: on another route, it is a new key.

A JSON body, EstimateInput:

htsrequired
stringThe HTS code of the goods: 4, 6, 8 or 10 digits, dots and spaces ignored. A rate needs the 10-digit statistical line or its 8-digit subheading. Example: "6109100012".
originrequired
stringCountry of origin: where the goods were produced, not where they ship from. ISO 3166-1 alpha-2 (XK for Kosovo), or a code U.S. Customs files with (BU, GZ, KV, WE). Example: "CN".
as_of
date or date-timeWhen the goods are entered for consumption. A day, in New York time ("2026-04-05"); or, on a day when a measure takes effect at a stated hour, the instant of entry with its UTC offset ("2026-04-05T00:01:00-04:00"). Unset: today. Example: "2026-10-15".
customs_value
number or stringCustoms value in US dollars: the transaction value declared, not a retail price. Unset: the duty rate is given, and an amount only where the duty does not depend on the value. Example: "10000".
entry_type
one of formal, informalA formal entry pays the merchandise processing fee (MPF) on its value; an informal one, the fixed informal fee. Default: "formal".
facts
objectAnswers to the questions of the facts catalogue (GET /v1/facts), by name. A name outside the catalogue is reported in the result and never used. Example: {"section301_exclusion_claimed": false}.
freight
number or stringInternational freight in US dollars: no duty on it, it adds to the landed cost. Default: "0".
include_fees
booleanCount the entry fees (MPF, HMF) of a declaration of this product alone; the landed cost includes them only then. The MPF is charged once on a declaration: for several products entered together, use POST /v1/estimates/entry. Default: false.
insurance
number or stringInsurance of the shipment in US dollars: no duty on it, it adds to the landed cost. Default: "0".
preference
stringA trade agreement's symbol from the HTS special column (S for USMCA, KR for KORUS…; GET /v1/agreements). Giving it declares that the goods meet its rules of origin and that you hold the proof. Example: "S".
publication_id
stringCalculate with this publication of the rules rather than the one in force on the date: a saved result's publication_id replays it.
quantities
objectQuantities in the units a duty counts (kg, l, item, dozen, pair, proof_liter…), nonnegative. A result names the quantity it needs in required_fields ("quantities.kg"). Example: {"kg": "120"}.
transport_mode
one of air, ocean, landHow the goods arrive; by sea they also pay the harbor maintenance fee (HMF). Unset: land for goods of Canada or Mexico, ocean otherwise.

Response

200 CalculationResult · 47 fields

Errors400401402403409413422429503

Estimate up to 200 products

POST/v1/estimates/batchTry it in the console

Each item calculated on its own, as POST /v1/estimates would, in the order given. An invalid item refuses the whole batch (422, error.fields naming items.<index>.<field>); an item that cannot be calculated (a date no edition covers) has its own error in results, the others are calculated. The batch's publication_id, if any, holds for every item. Counted as one request, whatever its number of items, unless none of them gives a figure of the duty (questions without any duty amount or rate, and errors, only). When the data is unavailable for every item, the batch is a 503 to send again, neither counted nor kept for its Idempotency-Key; when only for some, they have their error (data_unavailable) in results: send those items again.

The MCP server offers it as the tool estimate_batch.

curl -X POST "https://api.tarifftrust.com/v1/estimates/batch" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "hts": "6109.10.00.12",
        "origin": "CN",
        "customs_value": "10000"
      },
      {
        "hts": "6109.10.00.12",
        "origin": "VN",
        "customs_value": "10000"
      }
    ]
  }'
Response 200
{
  "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
  "publication_ids": [
    "27592d41-33b8-428b-b91e-f7846635fa44"
  ],
  "results": [
    {
      "index": 0,
      "result": {
        "hts": "6109100012",
        "origin": "CN",
        "as_of": "2026-11-03",
        "currency": "USD",
        "engine_version": "2.18",
        "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
        "publication_label": "2026 HTS Revision 22",
        "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
        "knowledge_at": "2026-10-31T00:46:32.836Z",
        "status": "calculated",
        "components": [
          {
            "id": "base_rate",
            "label": "Base duty",
            "program": "base",
            "heading": null,
            "expression": "16.5%",
            "terms": [
              {
                "kind": "ad_valorem",
                "rate": "0.165"
              }
            ],
            "amount": "1650.00",
            "status": "calculated",
            "required_fields": [],
            "source": {
              "authority": "USITC",
              "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
              "title": "2026 HTS Revision 22",
              "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
              "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
            }
          },
          {
            "id": "9903.05.31#9903.05.31",
            "label": "Note 52 additional duty — China — 9903.05.31",
            "program": "note52_country",
            "heading": "9903.05.31",
            "rule": "9903.05.31",
            "expression": null,
            "terms": [
              {
                "kind": "ad_valorem",
                "rate": "0.125"
              }
            ],
            "amount": "1250.00",
            "status": "calculated",
            "required_fields": [],
            "source": {
              "authority": "USITC",
              "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
              "title": "2026 HTS Revision 20",
              "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
            }
          },
          {
            "id": "9903.88.15#9903.88.15-list",
            "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
            "program": "301",
            "heading": "9903.88.15",
            "rule": "9903.88.15",
            "expression": null,
            "terms": [
              {
                "kind": "ad_valorem",
                "rate": "0.075"
              }
            ],
            "amount": "750.00",
            "status": "calculated",
            "required_fields": [],
            "source": {
              "authority": "USITC",
              "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_21_json.json",
              "title": "2026 HTS Revision 21",
              "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
            }
          }
        ],
        "warnings": [],
        "required_fields": [],
        "sources": [
          {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
            "title": "2026 HTS Revision 22",
            "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
            "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
          }
        ],
        "known_duty_subtotal": "3650.00",
        "estimated_duty": "3650.00",
        "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
        "base_rate": "16.5%",
        "match": {
          "type": "exact",
          "level": 10,
          "rate_basis": "parent",
          "matched_hts": "6109100012",
          "rate_hts": "61091000"
        },
        "fees": [],
        "total_fees": null,
        "fees_status": "not_requested",
        "estimated_landed_cost": "13650.00"
      }
    },
    {
      "index": 1,
      "result": {
        "hts": "6109100012",
        "origin": "VN",
        "as_of": "2026-11-03",
        "currency": "USD",
        "engine_version": "2.18",
        "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
        "publication_label": "2026 HTS Revision 22",
        "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
        "knowledge_at": "2026-10-31T00:46:32.836Z",
        "status": "calculated",
        "components": [
          {
            "id": "base_rate",
            "label": "Base duty",
            "program": "base",
            "heading": null,
            "expression": "16.5%",
            "terms": [
              {
                "kind": "ad_valorem",
                "rate": "0.165"
              }
            ],
            "amount": "1650.00",
            "status": "calculated",
            "required_fields": [],
            "source": {
              "authority": "USITC",
              "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
              "title": "2026 HTS Revision 22",
              "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
              "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
            }
          },
          {
            "id": "9903.05.84#9903.05.84",
            "label": "Note 52 additional duty — Vietnam — 9903.05.84",
            "program": "note52_country",
            "heading": "9903.05.84",
            "rule": "9903.05.84",
            "expression": null,
            "terms": [
              {
                "kind": "ad_valorem",
                "rate": "0.125"
              }
            ],
            "amount": "1250.00",
            "status": "calculated",
            "required_fields": [],
            "source": {
              "authority": "USITC",
              "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
              "title": "2026 HTS Revision 20",
              "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
            }
          }
        ],
        "warnings": [],
        "required_fields": [],
        "sources": [
          {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
            "title": "2026 HTS Revision 22",
            "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
            "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
          }
        ],
        "known_duty_subtotal": "2900.00",
        "estimated_duty": "2900.00",
        "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
        "base_rate": "16.5%",
        "match": {
          "type": "exact",
          "level": 10,
          "rate_basis": "parent",
          "matched_hts": "6109100012",
          "rate_hts": "61091000"
        },
        "fees": [],
        "total_fees": null,
        "fees_status": "not_requested",
        "estimated_landed_cost": "12900.00"
      }
    }
  ],
  "freshness": {
    "27592d41-33b8-428b-b91e-f7846635fa44": {
      "checked_at": "2026-11-03T02:25:05.924778+00:00",
      "age_hours": 5.13,
      "stale": false,
      "basis": "Official sources verified every 6 hours; stale after 48 hours"
    }
  }
}

Request

Idempotency-Key
header · stringMakes a request safe to retry, after a timeout for instance.
More

Send a new unique value with each request (a UUID). If no response comes back, send the same request again with the same key: within 7 days, you get the first response, and the request counts once. The same key with a different request is refused (409). An error response is not kept: the request sent again is calculated anew. A key belongs to its operation: on another route, it is a new key.

A JSON body, BatchRequest:

itemsrequired
array of BatchItemThe products, each calculated on its own.
Fields of BatchItem

BatchItem

publication_id
stringCalculate with this publication of the rules rather than the one in force on the date: a saved result's publication_id replays it.

Response

200 BatchResult · 4 fields

Errors400401402403409413422429503

Estimate a whole import declaration

POST/v1/estimates/entryTry it in the console

Every line, then the MPF and the HMF once on the declaration: adding the estimates of the lines of one declaration gives a wrong MPF. Not saved: save it with POST /v1/saved-estimates (entry) to replay or report it. Counted as one request, whatever its number of lines, unless it gives no figure of the duty (a question without any duty amount or rate).

The MCP server offers it as the tool estimate_entry.

curl -X POST "https://api.tarifftrust.com/v1/estimates/entry" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "lines": [
      {
        "hts": "6109.10.00.12",
        "origin": "CN",
        "customs_value": "1000",
        "reference": "PO-1042-1"
      },
      {
        "hts": "6109.10.00.12",
        "origin": "CN",
        "customs_value": "2500",
        "reference": "PO-1042-2"
      }
    ],
    "transport_mode": "ocean"
  }'
Response 200
{
  "kind": "entry",
  "reference": "",
  "as_of": "2026-11-03",
  "as_of_instant": null,
  "transport_mode": "ocean",
  "entry_type": "formal",
  "currency": "USD",
  "engine_version": "2.18",
  "status": "calculated",
  "fees": [
    {
      "label": "MPF",
      "amount": "34.58",
      "source": {
        "authority": "CBP",
        "url": "https://www.govinfo.gov/content/pkg/FR-2026-07-31/html/2026-15530.htm",
        "title": "Formal-entry fee limits — FY2027",
        "checksum": "695e43e1bec377688f6fe5ffb63e0bddd2823b63966a75f66a5c209a92441fee",
        "sha256": "695e43e1bec377688f6fe5ffb63e0bddd2823b63966a75f66a5c209a92441fee"
      },
      "basis": "3500.00"
    },
    {
      "label": "HMF",
      "amount": "4.38",
      "source": {
        "authority": "CBP",
        "url": "https://www.govinfo.gov/content/pkg/CFR-2025-title19-vol1/xml/CFR-2025-title19-vol1-sec24-24.xml",
        "title": "19 CFR 24.24 — Harbor maintenance fee",
        "checksum": "ae35ab88100b5bd409b485bdc9270701c6f3f149495e7544c694f44cc3c652af",
        "sha256": "ae35ab88100b5bd409b485bdc9270701c6f3f149495e7544c694f44cc3c652af"
      },
      "basis": "3500.00"
    }
  ],
  "fees_status": "estimated",
  "total_fees": "38.96",
  "known_duty_subtotal": "1277.50",
  "estimated_duty": "1277.50",
  "estimated_landed_cost": "4816.46",
  "required_fields": [],
  "input_guidance": [],
  "warnings": [
    "Fees are computed once for this formal entry; exemptions apply only when explicitly declared, the MPF exemption of goods originating under an agreement claimed excepted. Ocean HMF assumes a taxable port unless declared exempt. Other entry fees and taxes are not included."
  ],
  "scenarios": null,
  "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
  "publication_label": "2026 HTS Revision 22",
  "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
  "knowledge_at": "2026-10-31T00:46:32.836Z",
  "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
  "freshness": {
    "checked_at": "2026-11-03T02:25:05.924778+00:00",
    "age_hours": 5.13,
    "stale": false,
    "basis": "Official sources verified every 6 hours; stale after 48 hours"
  },
  "policies": [],
  "lines": [
    {
      "hts": "6109100012",
      "origin": "CN",
      "reference": "PO-1042-1",
      "as_of": "2026-11-03",
      "currency": "USD",
      "engine_version": "2.18",
      "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
      "publication_label": "2026 HTS Revision 22",
      "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
      "knowledge_at": "2026-10-31T00:46:32.836Z",
      "status": "calculated",
      "components": [
        {
          "id": "base_rate",
          "label": "Base duty",
          "program": "base",
          "heading": null,
          "expression": "16.5%",
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.165"
            }
          ],
          "amount": "165.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
            "title": "2026 HTS Revision 22",
            "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
            "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
          }
        },
        {
          "id": "9903.05.31#9903.05.31",
          "label": "Note 52 additional duty — China — 9903.05.31",
          "program": "note52_country",
          "heading": "9903.05.31",
          "rule": "9903.05.31",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.125"
            }
          ],
          "amount": "125.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
            "title": "2026 HTS Revision 20",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        },
        {
          "id": "9903.88.15#9903.88.15-list",
          "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
          "program": "301",
          "heading": "9903.88.15",
          "rule": "9903.88.15",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.075"
            }
          ],
          "amount": "75.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_21_json.json",
            "title": "2026 HTS Revision 21",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        }
      ],
      "warnings": [],
      "required_fields": [],
      "sources": [
        {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
          "title": "2026 HTS Revision 22",
          "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
          "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
        }
      ],
      "known_duty_subtotal": "365.00",
      "estimated_duty": "365.00",
      "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
      "base_rate": "16.5%",
      "match": {
        "type": "exact",
        "level": 10,
        "rate_basis": "parent",
        "matched_hts": "6109100012",
        "rate_hts": "61091000"
      }
    },
    {
      "hts": "6109100012",
      "origin": "CN",
      "reference": "PO-1042-2",
      "as_of": "2026-11-03",
      "currency": "USD",
      "engine_version": "2.18",
      "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
      "publication_label": "2026 HTS Revision 22",
      "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
      "knowledge_at": "2026-10-31T00:46:32.836Z",
      "status": "calculated",
      "components": [
        {
          "id": "base_rate",
          "label": "Base duty",
          "program": "base",
          "heading": null,
          "expression": "16.5%",
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.165"
            }
          ],
          "amount": "412.50",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
            "title": "2026 HTS Revision 22",
            "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
            "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
          }
        },
        {
          "id": "9903.05.31#9903.05.31",
          "label": "Note 52 additional duty — China — 9903.05.31",
          "program": "note52_country",
          "heading": "9903.05.31",
          "rule": "9903.05.31",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.125"
            }
          ],
          "amount": "312.50",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
            "title": "2026 HTS Revision 20",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        },
        {
          "id": "9903.88.15#9903.88.15-list",
          "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
          "program": "301",
          "heading": "9903.88.15",
          "rule": "9903.88.15",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.075"
            }
          ],
          "amount": "187.50",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_21_json.json",
            "title": "2026 HTS Revision 21",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        }
      ],
      "warnings": [],
      "required_fields": [],
      "sources": [
        {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
          "title": "2026 HTS Revision 22",
          "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
          "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
        }
      ],
      "known_duty_subtotal": "912.50",
      "estimated_duty": "912.50",
      "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
      "base_rate": "16.5%",
      "match": {
        "type": "exact",
        "level": 10,
        "rate_basis": "parent",
        "matched_hts": "6109100012",
        "rate_hts": "61091000"
      }
    }
  ]
}

Request

Idempotency-Key
header · stringMakes a request safe to retry, after a timeout for instance.
More

Send a new unique value with each request (a UUID). If no response comes back, send the same request again with the same key: within 7 days, you get the first response, and the request counts once. The same key with a different request is refused (409). An error response is not kept: the request sent again is calculated anew. A key belongs to its operation: on another route, it is a new key.

A JSON body, EntryInput:

linesrequired
array of LineInputThe lines of the declaration, each a product.
Fields of LineInput

LineInput

as_of
date or date-timeWhen the goods are entered for consumption. A day, in New York time ("2026-04-05"); or, on a day when a measure takes effect at a stated hour, the instant of entry with its UTC offset ("2026-04-05T00:01:00-04:00"). Unset: today. Example: "2026-10-15".
entry_type
one of formal, informalA formal entry pays the merchandise processing fee (MPF) on its value; an informal one, the fixed informal fee. Default: "formal".
facts
objectAnswers that hold for the whole declaration (GET /v1/facts, scope entry or shipment).
freight
number or stringInternational freight in US dollars: no duty on it, it adds to the landed cost. Default: "0".
include_fees
booleanCount the entry fees (MPF, HMF) of the declaration. Default: true.
insurance
number or stringInsurance of the shipment in US dollars: no duty on it, it adds to the landed cost. Default: "0".
publication_id
stringCalculate with this publication of the rules rather than the one in force on the date: a saved result's publication_id replays it.
reference
stringYour reference for the declaration.
transport_mode
one of air, ocean, landHow the goods arrive; by sea they also pay the harbor maintenance fee (HMF). Unset: land for goods of Canada or Mexico, ocean otherwise.

Response

200 EntryResult · 30 fields

Errors400401402403409413422429503

Estimate one product at every change of the tariff

POST/v1/estimates/historyTry it in the console

The product calculated on each first day of an edition, on each day a measure or a fee that covers it begins or ends, and on each day an incident or a notice not yet read begins or stops withholding its estimate, over the period asked, with the rules approved today. Counted as one request, whatever its number of points, unless no point gives a figure of the duty (a question without any duty amount or rate).

The MCP server offers it as the tool estimate_history.

curl -X POST "https://api.tarifftrust.com/v1/estimates/history" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hts": "6109.10.00.12",
    "origin": "CN",
    "customs_value": "10000",
    "from": "2025-01-01"
  }'
Response 200
{
  "basis": "Historical calculations from dated official sources using the approvals in force today; gaps are not interpolated",
  "points": [
    {
      "hts": "6109100012",
      "origin": "CN",
      "as_of": "2026-09-28",
      "currency": "USD",
      "engine_version": "2.18",
      "publication_id": "e2f14b01-a513-4ce9-b81f-515c505239a4",
      "publication_label": "2026 HTS Revision 20",
      "publication_checksum": "d495c51eec90e90093c2882427e9f98727c3abd5de1a162e541e8a1771d94671",
      "knowledge_at": "2026-10-19T09:53:15.485Z",
      "status": "calculated",
      "components": [
        {
          "id": "base_rate",
          "label": "Base duty",
          "program": "base",
          "heading": null,
          "expression": "16.5%",
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.165"
            }
          ],
          "amount": "1650.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
            "title": "2026 HTS Revision 20",
            "checksum": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        },
        {
          "id": "9903.05.31#9903.05.31",
          "label": "Note 52 additional duty — China — 9903.05.31",
          "program": "note52_country",
          "heading": "9903.05.31",
          "rule": "9903.05.31",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.125"
            }
          ],
          "amount": "1250.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
            "title": "2026 HTS Revision 20",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        },
        {
          "id": "9903.88.15#9903.88.15",
          "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
          "program": "301",
          "heading": "9903.88.15",
          "rule": "9903.88.15",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.075"
            }
          ],
          "amount": "750.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
            "title": "2026 HTS Revision 20",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        }
      ],
      "warnings": [],
      "required_fields": [],
      "sources": [
        {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
          "title": "2026 HTS Revision 20",
          "checksum": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09",
          "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
        }
      ],
      "known_duty_subtotal": "3650.00",
      "estimated_duty": "3650.00",
      "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
      "base_rate": "16.5%",
      "match": {
        "type": "exact",
        "level": 10,
        "rate_basis": "parent",
        "matched_hts": "6109100012",
        "rate_hts": "61091000"
      },
      "fees": [],
      "total_fees": null,
      "fees_status": "not_requested",
      "estimated_landed_cost": "13650.00"
    },
    {
      "hts": "6109100012",
      "origin": "CN",
      "as_of": "2026-10-30",
      "currency": "USD",
      "engine_version": "2.18",
      "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
      "publication_label": "2026 HTS Revision 22",
      "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
      "knowledge_at": "2026-10-31T00:46:32.836Z",
      "status": "calculated",
      "components": [
        {
          "id": "base_rate",
          "label": "Base duty",
          "program": "base",
          "heading": null,
          "expression": "16.5%",
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.165"
            }
          ],
          "amount": "1650.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
            "title": "2026 HTS Revision 22",
            "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
            "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
          }
        },
        {
          "id": "9903.05.31#9903.05.31",
          "label": "Note 52 additional duty — China — 9903.05.31",
          "program": "note52_country",
          "heading": "9903.05.31",
          "rule": "9903.05.31",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.125"
            }
          ],
          "amount": "1250.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
            "title": "2026 HTS Revision 20",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        },
        {
          "id": "9903.88.15#9903.88.15-list",
          "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
          "program": "301",
          "heading": "9903.88.15",
          "rule": "9903.88.15",
          "expression": null,
          "terms": [
            {
              "kind": "ad_valorem",
              "rate": "0.075"
            }
          ],
          "amount": "750.00",
          "status": "calculated",
          "required_fields": [],
          "source": {
            "authority": "USITC",
            "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_21_json.json",
            "title": "2026 HTS Revision 21",
            "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
          }
        }
      ],
      "warnings": [],
      "required_fields": [],
      "sources": [
        {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
          "title": "2026 HTS Revision 22",
          "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
          "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
        }
      ],
      "known_duty_subtotal": "3650.00",
      "estimated_duty": "3650.00",
      "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
      "base_rate": "16.5%",
      "match": {
        "type": "exact",
        "level": 10,
        "rate_basis": "parent",
        "matched_hts": "6109100012",
        "rate_hts": "61091000"
      },
      "fees": [],
      "total_fees": null,
      "fees_status": "not_requested",
      "estimated_landed_cost": "13650.00"
    }
  ],
  "covered_windows": [
    {
      "publication_id": "e2f14b01-a513-4ce9-b81f-515c505239a4",
      "from": "2026-09-28",
      "through": "2026-10-08"
    },
    {
      "publication_id": "e0067898-dd6f-4220-93d5-a91107227b25",
      "from": "2026-10-09",
      "through": "2026-10-29"
    },
    {
      "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
      "from": "2026-10-30",
      "through": "2026-11-03"
    }
  ]
}

Request

Idempotency-Key
header · stringMakes a request safe to retry, after a timeout for instance.
More

Send a new unique value with each request (a UUID). If no response comes back, send the same request again with the same key: within 7 days, you get the first response, and the request counts once. The same key with a different request is refused (409). An error response is not kept: the request sent again is calculated anew. A key belongs to its operation: on another route, it is a new key.

A JSON body, HistoryRequest:

htsrequired
stringThe HTS code of the goods: 4, 6, 8 or 10 digits, dots and spaces ignored. A rate needs the 10-digit statistical line or its 8-digit subheading. Example: "6109100012".
originrequired
stringCountry of origin: where the goods were produced, not where they ship from. ISO 3166-1 alpha-2 (XK for Kosovo), or a code U.S. Customs files with (BU, GZ, KV, WE). Example: "CN".
customs_value
number or stringCustoms value in US dollars: the transaction value declared, not a retail price. Unset: the duty rate is given, and an amount only where the duty does not depend on the value. Example: "10000".
entry_type
one of formal, informalA formal entry pays the merchandise processing fee (MPF) on its value; an informal one, the fixed informal fee. Default: "formal".
facts
objectAnswers to the questions of the facts catalogue (GET /v1/facts), by name. A name outside the catalogue is reported in the result and never used. Example: {"section301_exclusion_claimed": false}.
freight
number or stringInternational freight in US dollars: no duty on it, it adds to the landed cost. Default: "0".
from
dateFirst day of the period. Unset: the first edition the service holds.
include_fees
booleanCount the entry fees (MPF, HMF) of a declaration of this product alone; the landed cost includes them only then. The MPF is charged once on a declaration: for several products entered together, use POST /v1/estimates/entry. Default: false.
insurance
number or stringInsurance of the shipment in US dollars: no duty on it, it adds to the landed cost. Default: "0".
preference
stringA trade agreement's symbol from the HTS special column (S for USMCA, KR for KORUS…; GET /v1/agreements). Giving it declares that the goods meet its rules of origin and that you hold the proof. Example: "S".
quantities
objectQuantities in the units a duty counts (kg, l, item, dozen, pair, proof_liter…), nonnegative. A result names the quantity it needs in required_fields ("quantities.kg"). Example: {"kg": "120"}.
through
dateLast day of the period, at most today. Unset: today.
transport_mode
one of air, ocean, landHow the goods arrive; by sea they also pay the harbor maintenance fee (HMF). Unset: land for goods of Canada or Mexico, ocean otherwise.

Response

200 HistoryResult · 3 fields

Errors400401402403409413422429503

Saved estimates

List the saved estimates

GET/v1/saved-estimatesTry it in the console

The workspace's saved estimates, the latest first, saved from the API, the MCP or the portal. Needs the read permission; not counted.

The MCP server offers it as the tool list_saved_estimates.

curl "https://api.tarifftrust.com/v1/saved-estimates?limit=20" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY"
Response 200
{
  "count": 1,
  "offset": 0,
  "limit": 20,
  "results": [
    {
      "id": "5d0e8c1a-7b42-4f6e-9a13-2c8f4b7d1e90",
      "kind": "single",
      "source": "api",
      "label": "Cotton T-shirts, spring order",
      "author": "API key Production",
      "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
      "engine_version": "2.18",
      "image_digest": null,
      "status": "calculated",
      "estimated_duty": "3650.00",
      "created_at": "2026-11-03T08:14:27.513Z",
      "incidents": []
    }
  ]
}

Request

offset
query · integerHow many saved estimates to skip.
limit
query · integerHow many saved estimates to return, from 1 to 100.

Response

200 SavedList · 4 fields

Errors401402403422429503

Calculate and save an estimate

POST/v1/saved-estimatesTry it in the console

Calculate one product (estimate) or a declaration (entry) as POST /v1/estimates or POST /v1/estimates/entry would, and save it: only a saved estimate can be replayed, reported or notified in an incident. Needs the calculate permission; counted as the estimate is. Whichever is saved, an Idempotency-Key holds for one request of this route.

curl -X POST "https://api.tarifftrust.com/v1/saved-estimates" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "estimate": {
      "hts": "6109.10.00.12",
      "origin": "CN",
      "customs_value": "10000"
    },
    "label": "Cotton T-shirts, spring order"
  }'
Response 200
{
  "id": "5d0e8c1a-7b42-4f6e-9a13-2c8f4b7d1e90",
  "kind": "single",
  "result": {
    "hts": "6109100012",
    "origin": "CN",
    "as_of": "2026-11-03",
    "currency": "USD",
    "engine_version": "2.18",
    "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
    "publication_label": "2026 HTS Revision 22",
    "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
    "knowledge_at": "2026-10-31T00:46:32.836Z",
    "status": "calculated",
    "components": [
      {
        "id": "base_rate",
        "label": "Base duty",
        "program": "base",
        "heading": null,
        "expression": "16.5%",
        "terms": [
          {
            "kind": "ad_valorem",
            "rate": "0.165"
          }
        ],
        "amount": "1650.00",
        "status": "calculated",
        "required_fields": [],
        "source": {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
          "title": "2026 HTS Revision 22",
          "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
          "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
        }
      },
      {
        "id": "9903.05.31#9903.05.31",
        "label": "Note 52 additional duty — China — 9903.05.31",
        "program": "note52_country",
        "heading": "9903.05.31",
        "rule": "9903.05.31",
        "expression": null,
        "terms": [
          {
            "kind": "ad_valorem",
            "rate": "0.125"
          }
        ],
        "amount": "1250.00",
        "status": "calculated",
        "required_fields": [],
        "source": {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
          "title": "2026 HTS Revision 20",
          "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
        }
      },
      {
        "id": "9903.88.15#9903.88.15-list",
        "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
        "program": "301",
        "heading": "9903.88.15",
        "rule": "9903.88.15",
        "expression": null,
        "terms": [
          {
            "kind": "ad_valorem",
            "rate": "0.075"
          }
        ],
        "amount": "750.00",
        "status": "calculated",
        "required_fields": [],
        "source": {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_21_json.json",
          "title": "2026 HTS Revision 21",
          "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
        }
      }
    ],
    "warnings": [],
    "required_fields": [],
    "sources": [
      {
        "authority": "USITC",
        "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
        "title": "2026 HTS Revision 22",
        "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
        "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
      }
    ],
    "known_duty_subtotal": "3650.00",
    "estimated_duty": "3650.00",
    "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
    "base_rate": "16.5%",
    "match": {
      "type": "exact",
      "level": 10,
      "rate_basis": "parent",
      "matched_hts": "6109100012",
      "rate_hts": "61091000"
    },
    "fees": [],
    "total_fees": null,
    "fees_status": "not_requested",
    "estimated_landed_cost": "13650.00"
  }
}

Request

Idempotency-Key
header · stringMakes a request safe to retry, after a timeout for instance.
More

Send a new unique value with each request (a UUID). If no response comes back, send the same request again with the same key: within 7 days, you get the first response, and the request counts once. The same key with a different request is refused (409). An error response is not kept: the request sent again is calculated anew. A key belongs to its operation: on another route, it is a new key.

A JSON body, SaveRequest:

entry
EntryInputA declaration to calculate and save, instead of estimate.
Fields of EntryInput

EntryInput

estimate
EstimateInputOne product to calculate and save. Give estimate or entry, not both.
Fields of EstimateInput

EstimateInput

label
stringA name for the saved estimate.

Response

200 Saved · 4 fields

Errors400401402403409413422429503

Read a saved estimate

GET/v1/saved-estimates/{id}Try it in the console

One saved estimate: its request, as the engine read it, its result as it was calculated, never recalculated, and the incidents found since that concern it. Needs the read permission; not counted.

The MCP server offers it as the tool get_saved_estimate.

curl "https://api.tarifftrust.com/v1/saved-estimates/SAVED_ESTIMATE_ID" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY"
Response 200
{
  "id": "5d0e8c1a-7b42-4f6e-9a13-2c8f4b7d1e90",
  "kind": "single",
  "source": "api",
  "label": "Cotton T-shirts, spring order",
  "author": "API key Production",
  "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
  "engine_version": "2.18",
  "image_digest": null,
  "status": "calculated",
  "estimated_duty": "3650.00",
  "created_at": "2026-11-03T08:14:27.513Z",
  "incidents": [],
  "inputs": {
    "hts": "6109100012",
    "origin": "CN",
    "customs_value": "10000",
    "quantities": {},
    "preference": null,
    "facts": {},
    "transport_mode": "ocean",
    "include_fees": false,
    "entry_type": "formal",
    "freight": "0",
    "insurance": "0",
    "as_of": "2026-11-03",
    "publication_id": null
  },
  "result": {
    "hts": "6109100012",
    "origin": "CN",
    "as_of": "2026-11-03",
    "currency": "USD",
    "engine_version": "2.18",
    "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
    "publication_label": "2026 HTS Revision 22",
    "publication_checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995",
    "knowledge_at": "2026-10-31T00:46:32.836Z",
    "status": "calculated",
    "components": [
      {
        "id": "base_rate",
        "label": "Base duty",
        "program": "base",
        "heading": null,
        "expression": "16.5%",
        "terms": [
          {
            "kind": "ad_valorem",
            "rate": "0.165"
          }
        ],
        "amount": "1650.00",
        "status": "calculated",
        "required_fields": [],
        "source": {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
          "title": "2026 HTS Revision 22",
          "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
          "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
        }
      },
      {
        "id": "9903.05.31#9903.05.31",
        "label": "Note 52 additional duty — China — 9903.05.31",
        "program": "note52_country",
        "heading": "9903.05.31",
        "rule": "9903.05.31",
        "expression": null,
        "terms": [
          {
            "kind": "ad_valorem",
            "rate": "0.125"
          }
        ],
        "amount": "1250.00",
        "status": "calculated",
        "required_fields": [],
        "source": {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_20_json.json",
          "title": "2026 HTS Revision 20",
          "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
        }
      },
      {
        "id": "9903.88.15#9903.88.15-list",
        "label": "Section 301 — products of China, heading 9903.88.15 (list 4A) — 9903.88.15",
        "program": "301",
        "heading": "9903.88.15",
        "rule": "9903.88.15",
        "expression": null,
        "terms": [
          {
            "kind": "ad_valorem",
            "rate": "0.075"
          }
        ],
        "amount": "750.00",
        "status": "calculated",
        "required_fields": [],
        "source": {
          "authority": "USITC",
          "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_21_json.json",
          "title": "2026 HTS Revision 21",
          "sha256": "bea73f235732215a4bfab973be7495c16c450c65b78e40f58324031ebf092a09"
        }
      }
    ],
    "warnings": [],
    "required_fields": [],
    "sources": [
      {
        "authority": "USITC",
        "url": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
        "title": "2026 HTS Revision 22",
        "checksum": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478",
        "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
      }
    ],
    "known_duty_subtotal": "3650.00",
    "estimated_duty": "3650.00",
    "estimate_scope": "Implemented measures only; unresolved or unmodeled duties are not zero.",
    "base_rate": "16.5%",
    "match": {
      "type": "exact",
      "level": 10,
      "rate_basis": "parent",
      "matched_hts": "6109100012",
      "rate_hts": "61091000"
    },
    "fees": [],
    "total_fees": null,
    "fees_status": "not_requested",
    "estimated_landed_cost": "13650.00"
  }
}

Request

idrequired
path · stringThe id of the saved estimate, as its saving or the list gives it.

Response

200 SavedDetail · 14 fields

Errors401402403404422429503

Catalogue

List the trade agreements

GET/v1/agreementsTry it in the console

The agreements the engine applies, by the symbol of the HTS special column, with the origins each can apply to. A symbol does not establish eligibility: send it as preference, which declares the rules of origin met. Needs the read permission; not counted.

The MCP server offers it as the tool list_agreements.

curl "https://api.tarifftrust.com/v1/agreements" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY"
Response 200
{
  "agreements": [
    {
      "symbol": "AU",
      "name": "Australia",
      "origins": [
        "AU"
      ],
      "any_column1_origin": false
    },
    {
      "symbol": "BH",
      "name": "Bahrain",
      "origins": [
        "BH"
      ],
      "any_column1_origin": false
    }
  ],
  "source": "https://hts.usitc.gov/",
  "condition": "A symbol does not establish eligibility. Consult General Notes and the product's special column."
}

Request

No parameter.

Response

200 AgreementList · 3 fields

Errors401402403429503

List the questions an estimate may ask

GET/v1/factsTry it in the console

The facts catalogue: each question a measure may depend on, by the name to answer it with in facts, its type, its choices and its ordinary case. A result lists the ones it needs in input_guidance, and those it assumed in assumptions. Needs the read permission; not counted.

The MCP server offers it as the tool list_facts.

curl "https://api.tarifftrust.com/v1/facts" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY"
Response 200
{
  "facts": [
    {
      "name": "section301_exclusion_claimed",
      "question": "Do you claim the Section 301 exclusion for these goods?",
      "help": "Eligibility comes from the goods' characteristics and the published exclusion description; claiming it is the importer's choice, declared with the entry.",
      "type": "boolean",
      "scope": "product",
      "choices": [],
      "unit": "",
      "default": false
    },
    {
      "name": "entry_regime",
      "question": "Under which regime are these goods entered?",
      "help": "The calculator covers ordinary entries for consumption and withdrawals from warehouse for consumption. Personal-use goods in a traveler's accompanied baggage, goods entered under a provision of chapter 98 and withdrawals from a foreign trade zone follow other rules: other rates, duties assessed on values that differ from one measure to another, or duties kept on goods admitted to a zone before a suspension. They are not supported: declared, the result gives no estimate. Without a declaration, an ordinary entry is assumed, and the result says so.",
      "type": "choice",
      "scope": "entry",
      "choices": [
        {
          "value": "ordinary",
          "label": "Ordinary entry for consumption"
        },
        {
          "value": "personal_baggage",
          "label": "Personal-use goods in a traveler's accompanied baggage"
        },
        {
          "value": "chapter98",
          "label": "Entry claimed under a provision of chapter 98"
        },
        {
          "value": "ftz_withdrawal",
          "label": "Withdrawal from a foreign trade zone"
        }
      ],
      "unit": "",
      "default": "ordinary"
    }
  ]
}

Request

No parameter.

Response

200 FactList · 1 fields

Errors401402403429503

Search the US tariff schedule

GET/v1/htsTry it in the console

The lines of the edition in service whose code starts with q, or whose descriptions hold every word of q, in code order; chapter (two digits) narrows them. A match is no classification. Needs the read permission; not counted.

The MCP server offers it as the tool search_hts.

curl "https://api.tarifftrust.com/v1/hts?q=cotton+t-shirt" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY"
Response 200
{
  "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
  "edition": "2026 HTS Revision 22",
  "count": 16,
  "offset": 0,
  "limit": 50,
  "results": [
    {
      "code": "61091000",
      "display_code": "6109.10.00",
      "description": "Of cotton",
      "context": "T-shirts, singlets, tank tops and similar garments, knitted or crocheted: › Of cotton",
      "parent": "6109",
      "general": "16.5%",
      "special": "Free (AU,BH,CL,CO,IL,JO,KR,MA,OM,P,PA,PE,S,SG)",
      "other": "90%",
      "units": []
    },
    {
      "code": "6109100004",
      "display_code": "6109.10.00.04",
      "description": "T-shirts, all white, short hemmed sleeves, hemmed bottom, crew or round neckline, or V-neck with a mitered seam at the center of the V, without pockets, trim or embroidery (352)",
      "context": "T-shirts, singlets, tank tops and similar garments, knitted or crocheted: › Of cotton › Men's or boys': › T-shirts, all white, short hemmed sleeves, hemmed bottom, crew or round neckline, or V-neck with a mitered seam at the center of the V, without pockets, trim or embroidery (352)",
      "parent": "61091000",
      "general": "",
      "special": "",
      "other": "",
      "units": [
        "doz.",
        "kg"
      ]
    }
  ]
}

Request

q
query · stringA code, or words of the descriptions: 200 characters at most.
chapter
query · stringTwo digits, as 61: the lines of that chapter only.
offset
query · integerHow many lines to skip, from 0 to 100000.
limit
query · integerHow many lines to return, from 1 to 100.

Response

200 HtsSearch · 6 fields

Errors401402403422429503

Read one line of the US tariff schedule

GET/v1/hts/{code}Try it in the console

One line of the edition in service: its descriptions, its rate columns and its units. Needs the read permission; not counted.

The MCP server offers it as the tool get_hts.

curl "https://api.tarifftrust.com/v1/hts/6109.10.00.12" \
  -H "Authorization: Bearer $TARIFFTRUST_API_KEY"
Response 200
{
  "code": "6109100012",
  "display_code": "6109.10.00.12",
  "description": "Men's (338)",
  "context": "T-shirts, singlets, tank tops and similar garments, knitted or crocheted: › Of cotton › Men's or boys': › Other T-shirts: › Men's (338)",
  "parent": "61091000",
  "general": "16.5%",
  "special": "Free (AU,BH,CL,CO,IL,JO,KR,MA,OM,P,PA,PE,S,SG)",
  "other": "90%",
  "units": [
    "doz.",
    "kg"
  ],
  "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
  "edition": "2026 HTS Revision 22",
  "hierarchy": [
    "T-shirts, singlets, tank tops and similar garments, knitted or crocheted:",
    "Of cotton",
    "Men's or boys':",
    "Other T-shirts:"
  ],
  "rate_from": "61091000",
  "footnotes": []
}

Request

coderequired
path · stringAn HTS code of 4, 6, 8 or 10 digits, with or without its dots.

Response

200 HtsDetail · 14 fields

Errors401402403404422429503

Status

Read the status and the coverage of the data

GET/v1/statusTry it in the console

Freshness and verification of the data, the share of estimates withheld, the publications and the engine in service, and what is covered: Chapter 99 positions and their status, historical periods, base rates, agreements, fees, and what is out of scope. No key needed; the pages /status/ and /coverage/ read the same sources.

The MCP server offers it as the tool get_status.

curl "https://api.tarifftrust.com/v1/status"
Response 200
{
  "publications": [
    {
      "edition": "2026 HTS Revision 22",
      "valid_from": "2026-10-30",
      "valid_to": null,
      "publication_id": "27592d41-33b8-428b-b91e-f7846635fa44",
      "approved_from": "2026-10-31T00:46:38.617Z"
    }
  ],
  "engine_version": "2.18",
  "verification": {
    "status": "healthy",
    "last_success": "2026-11-03T02:25:05.924778+00:00",
    "last_failure": null,
    "consecutive_failures": 0
  },
  "freshness_target_hours": 48,
  "coverage": {
    "as_of": "2026-11-03",
    "publication": {
      "id": "27592d41-33b8-428b-b91e-f7846635fa44",
      "edition": "2026 HTS Revision 22",
      "valid_from": "2026-10-30",
      "valid_to": null,
      "checksum": "85004e661c9792203c96f1bbdf143138634035186c2a364c54ab11d9ccb78995"
    },
    "positions": {
      "total": 637,
      "examined": 637,
      "modeled": 214,
      "examined_not_modeled": 423,
      "items": [
        {
          "heading": "9903.03.12",
          "description": "Articles the product of Canada as provided in subdivision (b)(1) of U.S. note 51 to this subchapter",
          "status": "modeled",
          "policy": "allowed",
          "effect": "none",
          "reason": "Calculated by an approved rule",
          "rules": [
            "9903.03.12"
          ]
        }
      ]
    },
    "programs": [
      {
        "program": "201_quartz",
        "measures": 10
      }
    ],
    "historical_periods": [
      {
        "edition": "2026 HTS Revision 20",
        "valid_from": "2026-09-28",
        "valid_to": "2026-10-09",
        "publication_id": "e2f14b01-a513-4ce9-b81f-515c505239a4"
      }
    ],
    "base_rates": {
      "codes": 29861,
      "source": "https://www.usitc.gov/sites/default/files/tata/hts/hts_2026_revision_22_json.json",
      "sha256": "c2b51667fd9dcf04f3428ac41789392db23e86ed773abba78a5038881c70a478"
    },
    "preferences": {
      "agreements": [
        {
          "symbol": "AU",
          "name": "Australia",
          "origins": [
            "AU"
          ],
          "any_column1_origin": false
        }
      ],
      "source": "https://hts.usitc.gov/",
      "condition": "A symbol does not establish eligibility. Consult General Notes and the product's special column."
    },
    "fees": [
      {
        "kind": "hmf",
        "rate": "0.001250",
        "minimum": null,
        "maximum": null,
        "effective_from": "2026-10-01",
        "effective_to": "2027-10-01",
        "source": "https://www.govinfo.gov/content/pkg/CFR-2025-title19-vol1/xml/CFR-2025-title19-vol1-sec24-24.xml"
      }
    ],
    "freshness": {
      "checked_at": "2026-11-03T02:25:05.924778+00:00",
      "age_hours": 5.12,
      "stale": false,
      "basis": "Official sources verified every 6 hours; stale after 48 hours"
    },
    "out_of_scope": [
      "Classification: TariffTrust does not propose an HTS code from a product description.",
      "Antidumping and countervailing duties (AD/CVD) and customs valuation determinations.",
      "Filing entries or refund claims, and any legal or eligibility opinion.",
      "New IEEPA refund features; existing IEEPA research stays, and past IEEPA duties are calculated.",
      "Import of CBP ACE exports.",
      "Particular entry regimes: personal goods in a traveler's baggage, Chapter 98 entries and withdrawals from a foreign trade zone. Declared, such a regime gives no estimate, neither duties nor fees.",
      "Taxes and fees other than the merchandise and harbor maintenance fees."
    ]
  },
  "notices": [],
  "incidents": [],
  "frozen": false,
  "rule_horizon": {
    "fee_rules_until": "2027-10-01",
    "days_remaining": 332
  }
}

Request

No parameter.

Response

200 Status · 9 fields

Errors503

Objects

The requests the TariffTrust API takes and the answers it gives, field by field.

Agreement

A trade agreement, by its symbol in the HTS special column.

any_column1_originrequired
booleanA product agreement open to any column 1 origin.
namerequired
stringThe agreement's common name, where it has one.
originsrequired
array of stringThe origins it can apply to; none for a product agreement.
symbolrequired
stringAs the HTS special column prints it; send it as preference.

AgreementList

The trade agreements the engine applies.

agreementsrequired
array of AgreementEach agreement the engine applies.
Fields of Agreement

Agreement

conditionrequired
stringWhat a symbol does not establish.
sourcerequired
stringWhere the tariff that names them is published.

BatchFailure

An item of a batch that could not be calculated; the others are.

errorrequired
ErrorWhy it has no result: invalid_input with its fields, or no data for its date yet (data_unavailable, edition_not_published): send it again later.
Fields of Error

Error

indexrequired
integerThe item's position in items, from 0.

BatchItem

One product of a batch: the batch's publication, if any, applies to every item.

htsrequired
stringThe HTS code of the goods: 4, 6, 8 or 10 digits, dots and spaces ignored. A rate needs the 10-digit statistical line or its 8-digit subheading. Example: "6109100012".
originrequired
stringCountry of origin: where the goods were produced, not where they ship from. ISO 3166-1 alpha-2 (XK for Kosovo), or a code U.S. Customs files with (BU, GZ, KV, WE). Example: "CN".
as_of
date or date-timeWhen the goods are entered for consumption. A day, in New York time ("2026-04-05"); or, on a day when a measure takes effect at a stated hour, the instant of entry with its UTC offset ("2026-04-05T00:01:00-04:00"). Unset: today. Example: "2026-10-15".
customs_value
number or stringCustoms value in US dollars: the transaction value declared, not a retail price. Unset: the duty rate is given, and an amount only where the duty does not depend on the value. Example: "10000".
entry_type
one of formal, informalA formal entry pays the merchandise processing fee (MPF) on its value; an informal one, the fixed informal fee. Default: "formal".
facts
objectAnswers to the questions of the facts catalogue (GET /v1/facts), by name. A name outside the catalogue is reported in the result and never used. Example: {"section301_exclusion_claimed": false}.
freight
number or stringInternational freight in US dollars: no duty on it, it adds to the landed cost. Default: "0".
include_fees
booleanCount the entry fees (MPF, HMF) of a declaration of this product alone; the landed cost includes them only then. The MPF is charged once on a declaration: for several products entered together, use POST /v1/estimates/entry. Default: false.
insurance
number or stringInsurance of the shipment in US dollars: no duty on it, it adds to the landed cost. Default: "0".
preference
stringA trade agreement's symbol from the HTS special column (S for USMCA, KR for KORUS…; GET /v1/agreements). Giving it declares that the goods meet its rules of origin and that you hold the proof. Example: "S".
quantities
objectQuantities in the units a duty counts (kg, l, item, dozen, pair, proof_liter…), nonnegative. A result names the quantity it needs in required_fields ("quantities.kg"). Example: {"kg": "120"}.
transport_mode
one of air, ocean, landHow the goods arrive; by sea they also pay the harbor maintenance fee (HMF). Unset: land for goods of Canada or Mexico, ocean otherwise.

BatchRequest

Up to 200 products, each calculated on its own: POST /v1/estimates/batch.

itemsrequired
array of BatchItemThe products, each calculated on its own.
Fields of BatchItem

BatchItem

publication_id
stringCalculate with this publication of the rules rather than the one in force on the date: a saved result's publication_id replays it.

BatchResult

The products of a batch, each calculated on its own.

freshnessrequired
objectThe freshness of each publication used, by its id.
publication_idrequired
stringThe publication every item was calculated with; null when they differ (their dates do).
publication_idsrequired
array of stringEvery publication used.
resultsrequired
array of BatchSuccess or BatchFailureOne per item, in the order sent: its result, or its error.
Fields of BatchSuccess

BatchSuccess

BatchSuccess

An item of a batch that was calculated.

indexrequired
integerThe item's position in items, from 0.
resultrequired
CalculationResultIts result, as POST /v1/estimates gives it, without last_approved.
Fields of CalculationResult

CalculationResult

CalculationResult

One product: the line, with the fees of its one-line declaration.

as_ofrequired
dateThe legal day the duties are calculated for, in New York time.
base_raterequired
stringThe base rate as the tariff prints it, in the column read: general, special (an agreement claimed and granted) or column 2.
componentsrequired
array of ComponentThe duties counted, the base duty first, each with its amount and its source.
Fields of Component

Component

currencyrequired
stringAlways USD: every amount is in US dollars.
engine_versionrequired
stringThe version of the engine that calculated it.
estimate_scoperequired
stringWhat the estimate covers, in words: implemented measures only, unknown never zero.
estimated_dutyrequired
stringImplemented measures only. Null means unknown, never zero: information is missing, a position is in review or an incident suspends it.
estimated_landed_costrequired
stringCustoms value + estimated duty + freight + insurance, and the entry fees only when include_fees was asked. Null while the duty, an asked fee or the value is unknown.
feesrequired
array of FeeThe entry fees asked (include_fees), for a declaration of this product.
Fields of Fee

Fee

fees_statusrequired
one of not_requested, not_covered, estimated, partialnot_requested: include_fees is false. estimated: every fee owed is known. partial: one is not (a value is missing, or the date or entry type has no fee schedule). not_covered: an entry regime outside the service, no fee calculated. include_fees is false by default for one product.
htsrequired
stringThe HTS code calculated, in digits.
knowledge_atrequired
date-timeWhen the publication was prepared: the state of knowledge the result rests on.
known_duty_subtotalrequired
stringSum of the components whose validity is established; null when none is.
matchrequired
MatchHow the code was found in the tariff.
Fields of Match

Match

originrequired
stringThe country of origin, as sent.
publication_checksumrequired
stringThe checksum of that publication's files.
publication_idrequired
stringThe publication of the rules it was calculated with: send it as publication_id to calculate again with the same rules.
publication_labelrequired
stringThe edition of the US tariff, in words.
required_fieldsrequired
array of stringThe inputs still missing, each asked in input_guidance.
sourcesrequired
array of SourceEvery official document the result rests on.
Fields of Source

Source

statusrequired
one of calculated, partial, needs_information, unsupported, not_found, not_coveredWhat the answer is, to read before its amounts. calculated: every component is established. needs_information: what you can give is missing (a fact, a quantity, the value, a more precise code or the instant of effect), asked in input_guidance. partial: a component stays unknown that you cannot give (a position in review, an incident, incomplete coverage), listed in review_pending. unsupported: a rate, a formula or an entry regime the engine does not calculate. not_covered: a date or a chapter outside the data, or a code of chapters 98 and 99, which needs the product's own code. not_found: no such code in the tariff, nor any more precise one.
total_feesrequired
stringThe entry fees (MPF, HMF) of a declaration of this product alone, when include_fees was asked; null when they were not asked, or while one of them is not established.
warningsrequired
array of stringCautions in words, to show with the result: a preference declared, footnotes, fees not established, sources not verified recently.
alerts
array of stringMeasures whose relations do not settle (two caps on the same duties, contradictory relations): the duties concerned stay unresolved, and estimated_duty is null.
answers
array of objectThe facts the request answered, each with the measures it decides (those whose decision another answer would change); none when, given the other answers, it decides nothing.
as_of_instant
date-timeInstant of effect (New York time) when a transition on that day depends on the hour.
assumptions
array of objectThe answers this estimate assumed because none was declared (the ordinary case): for each, the fact, the value assumed, its question, its type and choices, and under alternatives what each other answer would give. Send your own answer in facts to replace one.
candidates
array of CandidateWith a shorter code: the 8- and 10-digit lines under it, up to 25.
Fields of Candidate

Candidate

column_rates
objectThe line's three rate columns as printed: general, special and other (column 2).
description
stringThe line's descriptions, from the heading down.
duty_rate
DutyRateThe duty as a share of the customs value, for comparison.
Fields of DutyRate

DutyRate

examined_measures
array of ExaminedMeasureDecision, reason and source of every measure examined for this case.
Fields of ExaminedMeasure

ExaminedMeasure

footnotes
arrayThe tariff's footnotes for the line, which may impose conditions.
freshness
FreshnessWhether the sources were verified recently enough.
Fields of Freshness

Freshness

input_guidance
array of InputGuidanceOne question per missing input, to ask before calculating again.
Fields of InputGuidance

InputGuidance

known_fee_subtotal
stringSum of the fees established in fees; null when fees is empty (not asked, or no fee established for this date, entry type or regime).
known_ieepa_subtotal
stringIn a history: the IEEPA duties established at that point; 0.00 when none applies, from 2026-02-24; null otherwise.
last_approved
LastApprovedWhen positions in review or incidents withhold part of the result: the last result established without them, dated. Historical only: never part of a subtotal, total or exposure. Absent from batch items.
Fields of LastApproved

LastApproved

policies
array of objectThe workspace's standing answers applied, each marked when the request overrode it.
provenance
objectWhat identifies this result for a replay: the engine result's checksum, the request as the engine read it, the legal end of its publication and the image of the engine.
reference
stringYour reference for the line, as sent.
replaced_base
objectWhen a measure replaces the base duty: the base duty replaced, with the reason; in no total.
reserved_components
array of ComponentShown apart, subject to a position in review; in no total.
Fields of Component

Component

review_pending
array of ReviewPendingWhat withholds part of the estimate: a position in review (position), a wrong-rate incident (incident), an official notice not yet read (notice), a measure in force whose rate is not announced yet (pending_rate).
Fields of ReviewPending

ReviewPending

scenarios
ScenariosWith unanswered yes/no or choice facts that have no ordinary case, every coherent combination of their answers (up to twelve) and exact bounds; beyond, a prudent range. Null otherwise.
Fields of Scenarios

Scenarios

statistical_units
array of stringThe statistical units the tariff prints for the line (No., kg).
verification
VerificationWhether the scheduled verification of the sources works; separate from freshness.
Fields of Verification

Verification

Candidate

A line of the tariff under a code too short to calculate.

descriptionrequired
stringIts description.
htsrequired
stringA line under the code sent, of 8 or 10 digits.

Component

One duty counted in the result: the base duty, a Chapter 99 measure, or a cap's deduction.

amountrequired
stringThe duty in dollars; null when unknown (an input is missing, or the rate is not calculated or not announced yet). Negative for a cap's deduction.
idrequired
stringbase_rate for the base duty; otherwise the identifier of the measure.
labelrequired
stringThe duty in words: Base duty, Column 2, or the measure's title.
programrequired
stringbase for the base duty; otherwise the measure's program, as 301, 232, 201 or 338.
required_fieldsrequired
array of stringThe inputs its amount still needs: customs_value, quantities.<unit>, facts.<name>.
sourcerequired
SourceThe official document of this rate.
Fields of Source

Source

statusrequired
one of calculated, needs_information, unsupported, pendingcalculated: the amount is established. needs_information: an input is missing, named in required_fields. unsupported: a rate the engine does not calculate. pending: in force at a rate the official text has not announced yet.
termsrequired
array of RateTermThe rate as typed terms, added together; null when the printed rate cannot be read.
Fields of RateTerm

RateTerm

expression
stringThe base rate as the tariff prints it; null for a measure, whose rate is in terms.
heading
stringThe measure's Chapter 99 heading; null for the base duty.
role
stringcap for a ceiling's deduction: what exceeds the ceiling, taken off the duties it limits. Absent otherwise.
rule
stringThe identifier of the rule the measure comes from. Null for the base duty.
rule_version
stringThe version of that rule.
uncertain
booleanMay still be removed by an unanswered question: shown, but not in known_duty_subtotal.

CoveredWindow

A period the service holds rules for, and the publication that covers it.

fromrequired
dateIts first day.
publication_idrequired
stringThe publication used over this window.
throughrequired
dateIts last day.

DutyRate

The duty as a share of the customs value, for comparison: implemented duties only, without the fees and AD/CVD.

statusrequired
one of not_covered, needs_information, unsupported, not_representable, estimated, completecomplete: the result is calculated and every duty is a share of the value. estimated: the share of the duties known, the result not settled. needs_information: an input other than the value is missing. not_representable: a duty is no share of the value (per unit, capped or undecided). unsupported: a rate the engine does not read. not_covered: no rate is read.
basis
stringWhat the rate is, in words.
estimated_ad_valorem_rate
stringThe duty as a decimal fraction of the customs value (0.415 for 41.5%).
total_ad_valorem_rate
stringThe same, given only when the status is complete.

EntryInput

A whole import declaration: every line, then the MPF and the HMF once on the declaration. POST /v1/estimates/entry.

linesrequired
array of LineInputThe lines of the declaration, each a product.
Fields of LineInput

LineInput

as_of
date or date-timeWhen the goods are entered for consumption. A day, in New York time ("2026-04-05"); or, on a day when a measure takes effect at a stated hour, the instant of entry with its UTC offset ("2026-04-05T00:01:00-04:00"). Unset: today. Example: "2026-10-15".
entry_type
one of formal, informalA formal entry pays the merchandise processing fee (MPF) on its value; an informal one, the fixed informal fee. Default: "formal".
facts
objectAnswers that hold for the whole declaration (GET /v1/facts, scope entry or shipment).
freight
number or stringInternational freight in US dollars: no duty on it, it adds to the landed cost. Default: "0".
include_fees
booleanCount the entry fees (MPF, HMF) of the declaration. Default: true.
insurance
number or stringInsurance of the shipment in US dollars: no duty on it, it adds to the landed cost. Default: "0".
publication_id
stringCalculate with this publication of the rules rather than the one in force on the date: a saved result's publication_id replays it.
reference
stringYour reference for the declaration.
transport_mode
one of air, ocean, landHow the goods arrive; by sea they also pay the harbor maintenance fee (HMF). Unset: land for goods of Canada or Mexico, ocean otherwise.

EntryResult

A whole declaration: its lines, then its fees, once.

as_ofrequired
dateThe legal day of the declaration, in New York time.
estimated_dutyrequired
stringThe duty of the declaration; null unless every line's is known. Unknown is never zero.
estimated_landed_costrequired
stringCustoms values + estimated duty + freight + insurance, and the entry fees when include_fees (true by default for a declaration). Null while the duty, an asked fee or a value is unknown.
feesrequired
array of FeeMPF and HMF, once for the declaration.
Fields of Fee

Fee

fees_statusrequired
one of not_requested, not_covered, estimated, partialnot_requested: include_fees is false. estimated: every fee owed is known. partial: one is not (a value is missing, or the date or entry type has no fee schedule). not_covered: an entry regime outside the service, no fee calculated. include_fees is true by default for a declaration.
kindrequired
stringAlways entry.
known_duty_subtotalrequired
stringSum of the lines' established subtotals; null when none is.
linesrequired
array of LineResultEach line's result, in the order sent.
Fields of LineResult

LineResult

publication_idrequired
stringThe publication of the rules it was calculated with: send it as publication_id to calculate again with the same rules.
required_fieldsrequired
array of stringEmpty: each line names its own, in lines.
scenariosrequired
ScenariosWith unanswered yes/no or choice facts that have no ordinary case, every coherent combination of their answers (up to twelve) and exact bounds; beyond, a prudent range. Null otherwise.
Fields of Scenarios

Scenarios

statusrequired
one of calculated, partial, needs_information, unsupported, not_found, not_coveredThe status of the declaration: that of its least settled line.
total_feesrequired
stringThe entry fees (MPF, HMF) of the declaration, counted once; null when include_fees is false, or while one of them is not established.
warningsrequired
array of stringCautions on the declaration: its fees, the freshness and verification of the sources; each line has its own.
as_of_instant
date-timeInstant of effect (New York time) when a transition on that day depends on the hour.
currency
stringAlways USD: every amount is in US dollars.
engine_version
stringThe version of the engine that calculated it.
entry_type
stringformal or informal, as sent.
estimate_scope
stringWhat the estimate covers, in words: implemented measures only, unknown never zero.
freshness
FreshnessWhether the sources were verified recently enough.
Fields of Freshness

Freshness

input_guidance
array of InputGuidanceEmpty: each line asks its own questions, in lines.
Fields of InputGuidance

InputGuidance

knowledge_at
date-timeWhen the publication was prepared: the state of knowledge the result rests on.
last_approved
LastApprovedWhen positions in review or incidents withhold part of the result: the last result established without them, dated. Historical only: never part of a subtotal, total or exposure. Absent from batch items.
Fields of LastApproved

LastApproved

policies
array of objectThe workspace's standing answers applied, each marked when the request overrode it.
provenance
objectWhat identifies this result for a replay: the engine result's checksum, the request as the engine read it, the legal end of its publication and the image of the engine.
publication_checksum
stringThe checksum of that publication's files.
publication_label
stringThe edition of the US tariff, in words.
reference
stringYour reference for the declaration, as sent.
transport_mode
stringThe transport mode, as sent or inferred.
verification
VerificationWhether the scheduled verification of the sources works; separate from freshness.
Fields of Verification

Verification

Error

What was refused, and why.

coderequired
stringWhat went wrong, for a program: invalid_input, quota_exceeded, rate_limited, data_unavailable…
fields
array of stringWith invalid_input: each field refused, by its path (items.3.hts).
message
stringThe same in words, for a person.

ErrorResponse

Every error of the API.

errorrequired
ErrorThe error.
Fields of Error

Error

request_id
stringThe request's identifier, also in X-Request-ID: quote it to support.

EstimateInput

One product at a date: POST /v1/estimates.

htsrequired
stringThe HTS code of the goods: 4, 6, 8 or 10 digits, dots and spaces ignored. A rate needs the 10-digit statistical line or its 8-digit subheading. Example: "6109100012".
originrequired
stringCountry of origin: where the goods were produced, not where they ship from. ISO 3166-1 alpha-2 (XK for Kosovo), or a code U.S. Customs files with (BU, GZ, KV, WE). Example: "CN".
as_of
date or date-timeWhen the goods are entered for consumption. A day, in New York time ("2026-04-05"); or, on a day when a measure takes effect at a stated hour, the instant of entry with its UTC offset ("2026-04-05T00:01:00-04:00"). Unset: today. Example: "2026-10-15".
customs_value
number or stringCustoms value in US dollars: the transaction value declared, not a retail price. Unset: the duty rate is given, and an amount only where the duty does not depend on the value. Example: "10000".
entry_type
one of formal, informalA formal entry pays the merchandise processing fee (MPF) on its value; an informal one, the fixed informal fee. Default: "formal".
facts
objectAnswers to the questions of the facts catalogue (GET /v1/facts), by name. A name outside the catalogue is reported in the result and never used. Example: {"section301_exclusion_claimed": false}.
freight
number or stringInternational freight in US dollars: no duty on it, it adds to the landed cost. Default: "0".
include_fees
booleanCount the entry fees (MPF, HMF) of a declaration of this product alone; the landed cost includes them only then. The MPF is charged once on a declaration: for several products entered together, use POST /v1/estimates/entry. Default: false.
insurance
number or stringInsurance of the shipment in US dollars: no duty on it, it adds to the landed cost. Default: "0".
preference
stringA trade agreement's symbol from the HTS special column (S for USMCA, KR for KORUS…; GET /v1/agreements). Giving it declares that the goods meet its rules of origin and that you hold the proof. Example: "S".
publication_id
stringCalculate with this publication of the rules rather than the one in force on the date: a saved result's publication_id replays it.
quantities
objectQuantities in the units a duty counts (kg, l, item, dozen, pair, proof_liter…), nonnegative. A result names the quantity it needs in required_fields ("quantities.kg"). Example: {"kg": "120"}.
transport_mode
one of air, ocean, landHow the goods arrive; by sea they also pay the harbor maintenance fee (HMF). Unset: land for goods of Canada or Mexico, ocean otherwise.

ExaminedMeasure

The decision on every Chapter 99 measure examined for this case.

decisionrequired
one of applied, excluded, undeterminedapplied: its conditions hold. excluded: one fails, or another measure removes it. undetermined: an unanswered question decides.
headingrequired
stringIts Chapter 99 heading.
labelrequired
stringIts title.
measurerequired
stringThe identifier of the measure.
programrequired
stringIts program, as 301, 232, 201 or 338.
reasonrequired
stringWhy, in words: the condition that decided, or what removed it.
rulerequired
stringThe identifier of the rule the measure comes from.
rule_versionrequired
stringThe version of that rule.
sourcerequired
SourceThe official document of the measure.
Fields of Source

Source

facts
array of stringThe facts its conditions read: the questions this measure decides.

FactChoice

One answer a choice question takes.

valuerequired
anyThe value to send in facts.
label
stringThe choice in words.

FactDefinition

A question an estimate may ask about the goods or the declaration.

helprequired
stringWhat it means, and how to answer it.
namerequired
stringThe key to answer it with, in facts.
questionrequired
stringThe question to ask.
scoperequired
stringproduct: a line's own; entry or shipment: the whole declaration's, one value for all its lines.
typerequired
stringHow it is answered: boolean (true or false), choice (one of choices), money (US dollars), number, country (ISO code) or heading (a Chapter 99 heading).
choices
array of FactChoiceFor a choice: the values to choose from.
Fields of FactChoice

FactChoice

default
anyThe ordinary case, assumed when unanswered and said in assumptions.
unit
stringThe unit of a number, if any.

FactList

The facts catalogue: every question an estimate may ask.

factsrequired
array of FactDefinitionEvery question of the catalogue.
Fields of FactDefinition

FactDefinition

Fee

An entry fee, once for the declaration.

amountrequired
stringThe fee in dollars; null when unknown.
labelrequired
stringMPF (merchandise processing fee) or HMF (harbor maintenance fee).
sourcerequired
SourceThe official fee schedule.
Fields of Source

Source

assumption
stringThe exemption it rests on, if any: declared, or that of goods originating under the agreement claimed.
basis
stringThe value it is calculated on: the customs values of the lines subject to it; null when one is missing.

Freshness

How recently the official sources were verified.

age_hoursrequired
numberHours since then.
basisrequired
stringThe verification schedule and its target, or why a past edition has none.
checked_atrequired
stringWhen the official sources were last verified successfully (before any verification, when the edition was observed); null for a past edition.
stalerequired
booleanTrue past the freshness target: the sources may have changed since.

HistoryRequest

One product at every change of the US tariff over a period: POST /v1/estimates/history.

htsrequired
stringThe HTS code of the goods: 4, 6, 8 or 10 digits, dots and spaces ignored. A rate needs the 10-digit statistical line or its 8-digit subheading. Example: "6109100012".
originrequired
stringCountry of origin: where the goods were produced, not where they ship from. ISO 3166-1 alpha-2 (XK for Kosovo), or a code U.S. Customs files with (BU, GZ, KV, WE). Example: "CN".
customs_value
number or stringCustoms value in US dollars: the transaction value declared, not a retail price. Unset: the duty rate is given, and an amount only where the duty does not depend on the value. Example: "10000".
entry_type
one of formal, informalA formal entry pays the merchandise processing fee (MPF) on its value; an informal one, the fixed informal fee. Default: "formal".
facts
objectAnswers to the questions of the facts catalogue (GET /v1/facts), by name. A name outside the catalogue is reported in the result and never used. Example: {"section301_exclusion_claimed": false}.
freight
number or stringInternational freight in US dollars: no duty on it, it adds to the landed cost. Default: "0".
from
dateFirst day of the period. Unset: the first edition the service holds.
include_fees
booleanCount the entry fees (MPF, HMF) of a declaration of this product alone; the landed cost includes them only then. The MPF is charged once on a declaration: for several products entered together, use POST /v1/estimates/entry. Default: false.
insurance
number or stringInsurance of the shipment in US dollars: no duty on it, it adds to the landed cost. Default: "0".
preference
stringA trade agreement's symbol from the HTS special column (S for USMCA, KR for KORUS…; GET /v1/agreements). Giving it declares that the goods meet its rules of origin and that you hold the proof. Example: "S".
quantities
objectQuantities in the units a duty counts (kg, l, item, dozen, pair, proof_liter…), nonnegative. A result names the quantity it needs in required_fields ("quantities.kg"). Example: {"kg": "120"}.
through
dateLast day of the period, at most today. Unset: today.
transport_mode
one of air, ocean, landHow the goods arrive; by sea they also pay the harbor maintenance fee (HMF). Unset: land for goods of Canada or Mexico, ocean otherwise.

HistoryResult

One product at every change of the tariff over a period.

basisrequired
stringHow the points are calculated, in words.
covered_windowsrequired
array of CoveredWindowThe periods the service holds rules for within the period asked: no point lies outside.
Fields of CoveredWindow

CoveredWindow

pointsrequired
array of CalculationResultOne result per change of the tariff, in date order, each on its as_of.
Fields of CalculationResult

CalculationResult

HtsDetail

One line of the tariff, with the descriptions above it and its footnotes.

coderequired
string10 digits for a statistical line, 8 for a subheading, 4 or 6 above.
contextrequired
stringThe descriptions from the heading down to the line's own, joined by ›.
descriptionrequired
stringThe line's own description.
display_coderequired
stringThe code as the tariff prints it (6109.10.00.12).
editionrequired
stringThe edition of the US tariff, in words.
generalrequired
stringColumn 1 general rate, as printed.
hierarchyrequired
array of stringThe descriptions above the line, from the heading down.
otherrequired
stringColumn 2 rate.
parentrequired
stringThe code of the line above it.
publication_idrequired
stringThe publication in service.
rate_fromrequired
stringThe 8-digit line whose rates a statistical line without its own takes, as the engine reads them; null when the rates are the line's own.
specialrequired
stringColumn 1 special rates and the agreements that give them.
unitsrequired
array of stringThe statistical units the tariff prints (No., kg).
footnotes
arrayThe tariff's footnotes for the line.

HtsLine

A line of the US tariff schedule, as its edition prints it.

coderequired
string10 digits for a statistical line, 8 for a subheading, 4 or 6 above.
contextrequired
stringThe descriptions from the heading down to the line's own, joined by ›.
descriptionrequired
stringThe line's own description.
display_coderequired
stringThe code as the tariff prints it (6109.10.00.12).
generalrequired
stringColumn 1 general rate, as printed.
otherrequired
stringColumn 2 rate.
parentrequired
stringThe code of the line above it.
specialrequired
stringColumn 1 special rates and the agreements that give them.
unitsrequired
array of stringThe statistical units the tariff prints (No., kg).

HtsSearch

A page of the lines a search of the tariff finds.

countrequired
integerHow many lines match.
editionrequired
stringThe edition of the US tariff, in words.
limitrequired
integerHow many lines a page holds, as asked.
offsetrequired
integerHow many lines were skipped, as asked.
publication_idrequired
stringThe publication in service.
resultsrequired
array of HtsLineThe lines of this page, in code order.
Fields of HtsLine

HtsLine

InputGuidance

One question for a missing input, to ask before calculating again.

descriptionrequired
stringWhy it is asked, or how to answer it.
fieldrequired
stringWhere to send the answer, as required_fields names it: facts.<name>, quantities.<unit>, customs_value, preference, hts or as_of.
labelrequired
stringThe question in a few words.
typerequired
stringHow it is answered: boolean, choice, money, number, country, heading, text or datetime.
choices
arrayThe values to choose from, for a choice.
kind
stringobservable or choice (a fact of the goods), declared_conclusion (a conclusion you declare, as whether a Chapter 99 heading applies) or input (a plain input).
legal_basis
stringThe text the question comes from.
question
stringThe question to ask.
scope
stringproduct: the line's own; entry or shipment: the whole declaration's.
unit
stringThe unit of a number, if any.

LastApproved

The last result established without the items now withheld: historical, in no total.

as_ofrequired
dateLegal date of this result; the edition's last day for an older edition.
editionrequired
stringThe edition of the US tariff, in words.
estimated_dutyrequired
stringThe duty of that result.
known_duty_subtotalrequired
stringThe established subtotal of that result.
publication_idrequired
stringThe publication it was calculated with.
statusrequired
stringThe status of that result.
approved_from
date-timeWhen that publication was approved.
approved_to
date-timeUntil when it was approved; null while it still is.
estimated_landed_cost
stringThe landed cost of that result.

LineInput

One line of a declaration.

htsrequired
stringThe HTS code of the goods: 4, 6, 8 or 10 digits, dots and spaces ignored. A rate needs the 10-digit statistical line or its 8-digit subheading. Example: "6109100012".
originrequired
stringCountry of origin: where the goods were produced, not where they ship from. ISO 3166-1 alpha-2 (XK for Kosovo), or a code U.S. Customs files with (BU, GZ, KV, WE). Example: "CN".
customs_value
number or stringCustoms value in US dollars: the transaction value declared, not a retail price. Unset: the duty rate is given, and an amount only where the duty does not depend on the value. Example: "10000".
facts
objectAnswers to the questions of the facts catalogue (GET /v1/facts), by name. A name outside the catalogue is reported in the result and never used. Example: {"section301_exclusion_claimed": false}.
preference
stringA trade agreement's symbol from the HTS special column (S for USMCA, KR for KORUS…; GET /v1/agreements). Giving it declares that the goods meet its rules of origin and that you hold the proof. Example: "S".
quantities
objectQuantities in the units a duty counts (kg, l, item, dozen, pair, proof_liter…), nonnegative. A result names the quantity it needs in required_fields ("quantities.kg"). Example: {"kg": "120"}.
reference
stringYour reference for the line.

LineResult

One line of a declaration: its duties. The fees and the landed cost are those of the declaration, calculated once for all its lines.

as_ofrequired
dateThe legal day the duties are calculated for, in New York time.
base_raterequired
stringThe base rate as the tariff prints it, in the column read: general, special (an agreement claimed and granted) or column 2.
componentsrequired
array of ComponentThe duties counted, the base duty first, each with its amount and its source.
Fields of Component

Component

currencyrequired
stringAlways USD: every amount is in US dollars.
engine_versionrequired
stringThe version of the engine that calculated it.
estimate_scoperequired
stringWhat the estimate covers, in words: implemented measures only, unknown never zero.
estimated_dutyrequired
stringImplemented measures only. Null means unknown, never zero: information is missing, a position is in review or an incident suspends it.
htsrequired
stringThe HTS code calculated, in digits.
knowledge_atrequired
date-timeWhen the publication was prepared: the state of knowledge the result rests on.
known_duty_subtotalrequired
stringSum of the components whose validity is established; null when none is.
matchrequired
MatchHow the code was found in the tariff.
Fields of Match

Match

originrequired
stringThe country of origin, as sent.
publication_checksumrequired
stringThe checksum of that publication's files.
publication_idrequired
stringThe publication of the rules it was calculated with: send it as publication_id to calculate again with the same rules.
publication_labelrequired
stringThe edition of the US tariff, in words.
required_fieldsrequired
array of stringThe inputs still missing, each asked in input_guidance.
sourcesrequired
array of SourceEvery official document the result rests on.
Fields of Source

Source

statusrequired
one of calculated, partial, needs_information, unsupported, not_found, not_coveredWhat the answer is, to read before its amounts. calculated: every component is established. needs_information: what you can give is missing (a fact, a quantity, the value, a more precise code or the instant of effect), asked in input_guidance. partial: a component stays unknown that you cannot give (a position in review, an incident, incomplete coverage), listed in review_pending. unsupported: a rate, a formula or an entry regime the engine does not calculate. not_covered: a date or a chapter outside the data, or a code of chapters 98 and 99, which needs the product's own code. not_found: no such code in the tariff, nor any more precise one.
warningsrequired
array of stringCautions in words, to show with the result: a preference declared, footnotes, fees not established, sources not verified recently.
alerts
array of stringMeasures whose relations do not settle (two caps on the same duties, contradictory relations): the duties concerned stay unresolved, and estimated_duty is null.
answers
array of objectThe facts the request answered, each with the measures it decides (those whose decision another answer would change); none when, given the other answers, it decides nothing.
as_of_instant
date-timeInstant of effect (New York time) when a transition on that day depends on the hour.
assumptions
array of objectThe answers this estimate assumed because none was declared (the ordinary case): for each, the fact, the value assumed, its question, its type and choices, and under alternatives what each other answer would give. Send your own answer in facts to replace one.
candidates
array of CandidateWith a shorter code: the 8- and 10-digit lines under it, up to 25.
Fields of Candidate

Candidate

column_rates
objectThe line's three rate columns as printed: general, special and other (column 2).
description
stringThe line's descriptions, from the heading down.
duty_rate
DutyRateThe duty as a share of the customs value, for comparison.
Fields of DutyRate

DutyRate

examined_measures
array of ExaminedMeasureDecision, reason and source of every measure examined for this case.
Fields of ExaminedMeasure

ExaminedMeasure

footnotes
arrayThe tariff's footnotes for the line, which may impose conditions.
input_guidance
array of InputGuidanceOne question per missing input, to ask before calculating again.
Fields of InputGuidance

InputGuidance

reference
stringYour reference for the line, as sent.
replaced_base
objectWhen a measure replaces the base duty: the base duty replaced, with the reason; in no total.
reserved_components
array of ComponentShown apart, subject to a position in review; in no total.
Fields of Component

Component

review_pending
array of ReviewPendingWhat withholds part of the estimate: a position in review (position), a wrong-rate incident (incident), an official notice not yet read (notice), a measure in force whose rate is not announced yet (pending_rate).
Fields of ReviewPending

ReviewPending

statistical_units
array of stringThe statistical units the tariff prints for the line (No., kg).

Match

How the code sent was found in the tariff.

levelrequired
integerThe number of digits of the code sent.
rate_basisrequired
one of direct, parentdirect: the line's own rates. parent: a 10-digit line without rates of its own takes those of its 8-digit line.
typerequired
one of none, exact, prefix_candidatesexact: a line of the tariff. prefix_candidates: a shorter code, the lines under it in candidates. none: not found, or not calculated (a date or chapter not covered).
matched_hts
stringThe line found.
rate_hts
stringThe line whose rates are read.

RateTerm

One term of a rate; the terms of a rate are added together.

kindrequired
one of ad_valorem, content, named, pending, specific, sugar, top_upThe form of the term. ad_valorem: a share of the value. specific: an amount per unit. content: a share of the value of a part (a watch's movement). top_up: what brings the duty up to a share of the value. sugar: the polarization formula. named: a calculator of the engine. pending: announced without its rate.
amount
stringDollars per unit, for a specific term.
basis
stringFor a top_up, the duty it completes: applicable (the line's base duty) or mfn (the column 1 general duty).
field
stringThe fact that gives the value the term applies to: the part's value (content), or the value a top_up covers.
rate
stringA decimal fraction (0.165 for 16.5%): of the value (ad_valorem), of the part's value (content), the share a top_up brings the duty to, or the sugar formula's rate per kilogram.
unit
stringThe unit a specific term counts, as in quantities (kg, l, item…).

ReviewPending

What withholds part of an estimate.

effectrequired
stringWhat it may do to the estimate: additional (a duty on top of the others), may_modify (change the duties it names, which are withheld), none, or unknown (change any duty: all are withheld).
kindrequired
one of position, incident, notice, pending_rateposition: a Chapter 99 position in review. incident: an open wrong-rate incident. notice: an official notice not yet read. pending_rate: a measure in force whose rate is not announced yet.
reasonrequired
stringWhy the estimate is withheld, in words.
detected_at
stringWhen it was detected.
position
stringThe Chapter 99 heading concerned, if any.
reference
stringThe incident's or the notice's reference.

SaveRequest

Calculate and save one product (estimate) or a declaration (entry): exactly one.

entry
EntryInputA declaration to calculate and save, instead of estimate.
Fields of EntryInput

EntryInput

estimate
EstimateInputOne product to calculate and save. Give estimate or entry, not both.
Fields of EstimateInput

EstimateInput

label
stringA name for the saved estimate.

Saved

An estimate just calculated and saved.

idrequired
stringThe saved estimate's identifier.
kindrequired
one of single, entrysingle: one product. entry: a declaration.
resultrequired
CalculationResult or EntryResultIts result, as POST /v1/estimates or POST /v1/estimates/entry gives it.
Fields of CalculationResult

CalculationResult

entry_id
stringFor a declaration: the declaration it is saved as in the portal.

SavedDetail

A saved estimate with its request and its result, as they were.

authorrequired
stringWho saved it: the API key, by its name, or the person.
created_atrequired
date-timeWhen it was saved.
engine_versionrequired
stringThe version of the engine that calculated it.
estimated_dutyrequired
stringThe duty of its result, as it was calculated.
idrequired
stringIts identifier: read it with GET /v1/saved-estimates/{id}.
image_digestrequired
stringThe image of the engine that replays it exactly.
incidentsrequired
array of SavedIncidentThe incidents found since it was saved that concern it, the oldest first; empty when there are none.
Fields of SavedIncident

SavedIncident

inputsrequired
objectThe request, in the fields of the API: an EstimateInput (single) or an EntryInput (entry).
kindrequired
one of single, entrysingle: one product. entry: a declaration.
labelrequired
stringIts name, as given when saved.
publication_idrequired
stringThe publication it was calculated with.
resultrequired
objectThe result as its engine_version calculated it, never recalculated: a CalculationResult (single) or an EntryResult (entry) of that version.
sourcerequired
stringWhere it was saved: api, mcp, portal, import (a declaration imported in the portal) or report (the case of an error report).
statusrequired
stringThe status of its result, as it was calculated: incidents says what was found since.

SavedIncident

An incident found since an estimate was saved, that concerns it.

corrected_dutyrequired
stringThe duty calculated again once verified; null while it is being verified.
corrected_feesrequired
stringThe entry fees calculated again once verified; null while it is being verified, or when they were not asked.
noticerequired
stringWhat is being verified or was corrected, in words.
outcomerequired
one of pending, wrong, unaffectedpending: being verified. wrong: confirmed wrong, the corrected figures say by how much. unaffected: verified, the figures saved stand.
referencerequired
stringThe incident, as the emails and the status page name it.

SavedList

A page of the workspace's saved estimates.

countrequired
integerHow many saved estimates the workspace has.
limitrequired
integerHow many a page holds, as asked.
offsetrequired
integerHow many were skipped, as asked.
resultsrequired
array of SavedSummaryThis page, the latest first.
Fields of SavedSummary

SavedSummary

SavedSummary

A saved estimate, as the list gives it.

authorrequired
stringWho saved it: the API key, by its name, or the person.
created_atrequired
date-timeWhen it was saved.
engine_versionrequired
stringThe version of the engine that calculated it.
estimated_dutyrequired
stringThe duty of its result, as it was calculated.
idrequired
stringIts identifier: read it with GET /v1/saved-estimates/{id}.
image_digestrequired
stringThe image of the engine that replays it exactly.
incidentsrequired
array of SavedIncidentThe incidents found since it was saved that concern it, the oldest first; empty when there are none.
Fields of SavedIncident

SavedIncident

kindrequired
one of single, entrysingle: one product. entry: a declaration.
labelrequired
stringIts name, as given when saved.
publication_idrequired
stringThe publication it was calculated with.
sourcerequired
stringWhere it was saved: api, mcp, portal, import (a declaration imported in the portal) or report (the case of an error report).
statusrequired
stringThe status of its result, as it was calculated: incidents says what was found since.

Scenario

One combination of answers to the questions left open, and what it gives.

answersrequired
array of objectOne answer to each question: its fact, its line (from 0; null for a question of the whole declaration) and its value.
estimated_dutyrequired
stringThe duty with these answers.
estimated_totalrequired
stringDuty and fees with these answers; null when one is unknown.
total_feesrequired
stringThe fees with these answers; null when not asked or unknown.

Scenarios

What the estimate would be under each answer to the questions that have no ordinary case.

boundsrequired
objectminimum and maximum of estimated_total, with their label; null when a combination has no total.
factsrequired
array of stringThe questions the scenarios answer.
kindrequired
one of exact, prudentexact: every combination calculated. prudent: more than twelve, bounds only.
scenariosrequired
array of ScenarioEach combination; empty for a prudent range.
Fields of Scenario

Scenario

Source

An official document a rate, a measure or a fee is read from.

authorityrequired
stringWho publishes it: USITC, CBP, USTR, the Federal Register…
ahead_of_tariff
booleanTrue when the duty rests on an official notice (a proclamation, a USTR notice, a customs message) that the USITC tariff does not hold yet.
checksum
stringThe same SHA-256 as sha256, under the name some sources give it.
sha256
stringSHA-256 of the document as archived: the very copy the rate was read from.
title
stringIts title, or the edition of the tariff. A measure whose text has not changed since keeps citing an earlier edition than the publication's.
url
stringWhere the official document is published: an edition of the tariff at its own file, which keeps serving the bytes of sha256. A publication prepared before 2026-11-03 gives the address of the current edition instead, whose bytes differ once a later edition is out.

Status

Freshness and verification of the data, and its coverage; the same as the pages /status/ and /coverage/.

coveragerequired
objectChapter 99 positions and their status, the share of estimates withheld, historical periods, base rates, agreements, fees and what is out of scope.
engine_versionrequired
stringThe engine that calculates every estimate now.
freshness_target_hoursrequired
integerPast this age, the sources are stale.
frozenrequired
booleanTrue while no new publication may be put in service.
incidentsrequired
array of objectWrong-rate incidents open, notified or corrected: reference, status, notice and opened_at.
noticesrequired
array of objectPositions still in review after the public notice delay: position, since, reason and detected_at.
publicationsrequired
array of objectThe publications in service, by edition: edition, valid_from, valid_to, publication_id and approved_from.
rule_horizonrequired
objectUntil when the fee schedules run (fee_rules_until), and in how many days (days_remaining).
verificationrequired
objectWhether the scheduled verification of the sources works: status, last_success, last_failure and consecutive_failures, as in a result.

Verification

Whether the scheduled verification of the official sources works.

consecutive_failuresrequired
integerHow many verifications failed in a row, the latest included.
last_failurerequired
stringWhen it last failed.
last_successrequired
stringWhen it last worked.
statusrequired
one of healthy, failing, unknownhealthy: the last verification worked. failing: the last ones failed. unknown: none has run.

Errors and limits

Every error has the same shape, {"error": {"code", "message", "fields"}, "request_id"}. Quote the request_id when you contact support.

StatusMeaning
400invalid_json: the body is not valid JSON.
401unauthorized: no valid API key.
402access_required: no active subscription; quota_exceeded: the quota is used up.
403forbidden: the key lacks the permission, or the plan the API.
404not_found: nothing of that name, or no such route.
405method_not_allowed: the route does not take this method; Allow lists those it takes.
409conflict: an Idempotency-Key sent again with another request.
413payload_too_large: the body is larger than the API takes; send fewer products or lines.
422invalid_input: fields names each field refused, as items.3.hts in a batch; message says why when fields are refused together, as estimate and entry.
429rate_limited: too many requests; wait the Retry-After seconds, until the window of X-RateLimit-Reset.
500internal_error: an error of the service, not of the request; it is recorded. Quote its request_id to support.
503Unavailable for now: retry after Retry-After seconds. service_unavailable and data_unavailable, seconds; edition_not_published, the edition in effect on the date is not published yet: an hour, it can take longer; billing_review, the subscription needs support, without Retry-After: contact support. A batch is a 503 when every item meets it; when only some do, they have their error in results: send those items again.
  • Each response to a request with an accepted key, a 429 included, carries X-RateLimit-Limit (requests per minute), X-RateLimit-Remaining and X-RateLimit-Reset (Unix time).
  • Each estimate counts once in your plan's quota, whatever the number of products of a batch, lines of a declaration or points of a history; a reply that estimates nothing (questions only, or items all in error) does not, nor does reading the catalog, the saved estimates or the status.
  • Makes a request safe to retry, after a timeout for instance. Send a new unique value with each request (a UUID). If no response comes back, send the same request again with the same key: within 7 days, you get the first response, and the request counts once. The same key with a different request is refused (409). An error response is not kept: the request sent again is calculated anew. A key belongs to its operation: on another route, it is a new key. By MCP too, which reads the same header.