Calculate
Calculate duty
Landed-cost calculation for a single HS code and shipment.
POST
Requires the
calculate:read scope.
string
required
4–10 digit HS code (dots allowed), e.g.
4202.92.3120.string
required
ISO 3166-1 alpha-2 country of origin.
string
required
ISO alpha-2 destination country (case-insensitive).
number
required
Per-unit customs value of the goods — the line total is
declared_value × quantity.number
default:"1"
Number of units.
string
ISO 4217 currency of
declared_value (3 letters). The response converts
to the destination’s currency and reports the rate used.number
Shipment weight (≥ 0), in
weight_unit.string
default:"kg"
kg or lb.number
default:"0"
Freight — added to the customs value for CIF-basis destinations.
number
default:"0"
Insurance — added to the customs value for CIF-basis destinations.
string
default:"sea"
sea, air, road, or rail. Mode-scoped fees (e.g. US Harbor
Maintenance Fee) only apply on a positive match.string
default:"FOB"
FOB, CIF, EXW, or DDP.string
postal or courier — affects de minimis and channel-specific regimes.string
YYYY-MM-DD. Rates are resolved as of this date (defaults to today).array
Up to 10
{ material, value } pairs for content-based measures (e.g.
steel/aluminum content under Section 232).number
Metal content by weight (0–100), for weight-conditioned measures.
array
Up to 20 exemption/claim codes (e.g. Chapter 99 exclusion codes) to apply
explicitly. Claim-type exemptions are never auto-applied — they surface in
exemptions.available_exemptions until claimed here.string
Sub-national region code (e.g. a Canadian province) for regional taxes.
number
Volume for excise-style per-volume rates, in
volume_unit.string
l, hl, or ml.Response
boolean
Whether a duty rate exists for this code/origin.
object
{ declared, destination, exchange_rate, source, rate_date } — how your
declared currency was converted.object
{ declared_value_per_unit, declared_value_total, customs_value, shipping_cost, insurance_cost }, in the destination currency.object
De minimis outcome (
de_minimis_threshold, de_minimis_exempt, plus
tax_de_minimis_threshold/tax_de_minimis_exempt where the destination
has a separate tax threshold). tariff_exemptions lists exclusion codes
that fired; available_exemptions lists claim codes you could file
(pass them in manual_claims to apply).object
tariffs — the applied duty lines, each
{ name, rate, amount, type, code?, estimated? }; one of
normal_tariff / preferential_tariff / punitive_tariff says which
tier applied; total_duty is the sum.object
Present when import fees apply (e.g. US MPF/HMF): keyed by fee code, each
{ code, name, amount }, plus total_fees.object
Present when the destination levies VAT/GST:
{ rate, amount } (plus
code/name for named regional taxes).array
Conditional measures (metal content, weight conditions, manual claims)
that matched but are not included in totals — each with a
note
explaining the condition.object
{ duty, fees, vat, total } in the destination currency.object | null
Which tariff publication answered:
{ version, source, imported_at }.string | null
Log id — appears in
GET /usage-history/calculate.Validation errors
If your workspace enforces country validation rules for the destination and the request violates one, the API responds400 with an errors array
instead of a quote: