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" }'
from tarifftrust import TariffTrust # Reads TARIFFTRUST_API_KEY client = TariffTrust() result = client.estimate( hts="6109.10.00.12", origin="CN", customs_value="10000", ) print(result)
import { TariffTrust } from "tarifftrust"; // Reads TARIFFTRUST_API_KEY const client = new TariffTrust(); const result = await client.estimate({ hts: "6109.10.00.12", origin: "CN", customs_value: "10000" }); console.log(result);
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; var url = URI.create("https://api.tarifftrust.com/v1/estimates"); var key = System.getenv("TARIFFTRUST_API_KEY"); var body = """ { "hts": "6109.10.00.12", "origin": "CN", "customs_value": "10000" } """; var request = HttpRequest.newBuilder(url) .header("Authorization", "Bearer " + key) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); var response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
{
"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.