Skip to main content
POST
Requires the calculate:read scope. Answers “which tariff lines stack for this code from this origin, on this date?” — base duty plus additional measures (Section 301/232, reciprocal, …), which Chapter 99 exclusion codes suppressed what, and which claim codes could be filed — without needing values or weights.
string
required
2–10 digit HS code (dots and spaces allowed).
string
required
ISO alpha-2 origin (case-insensitive).
string
default:"US"
ISO alpha-2 destination.
string
YYYY-MM-DD — the stack as of this date (defaults to today).

Response

boolean
Whether a general (MFN) rate exists for this code.
array
The stack, base rate first. Each line: { name, rate, type, code? }, plus — when an exclusion fired — exempted: true with exclusion_code / exclusion_name (the line’s rate shows as zeroed).
array
Present when claimable Chapter 99 codes overlap the applied stack: { code, name, applied: false, reason } — codes the importer could file.
array
Present when measures exist that need shipment facts (metal content / weight / manual claim): stack lines plus a condition string. Never auto-applied here.
object | null
Which tariff publication answered: { version, source, imported_at }.
string | null
Log id — appears in GET /usage-history/calculate.

Bulk stacking

For up to 500 codes at once, POST { "items": [...] } to /calculate/stacking/bulk — each item is the same shape plus an optional ref (echoed back). The response is { "results": [...], "execution_time": … }, each result tagged with its index, ref, and success; a failed item carries error instead of a stack.