Skip to main content
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 responds 400 with an errors array instead of a quote: