{"version":"plans-2026.1","effectiveDate":"2026-09-20","note":"The plan catalogue is DATA, not code. Limits are read from here at boot, so changing a quota is a data edit and a redeploy, never a code change. Served at /tariff/api/v1/plans.json and /tariff/v1/plans.","currency":"USD","model":"Every plan has EVERY feature. Plans differ only in how much you may use, never in what you may reach. No endpoint, field or dataset is reserved for a paying customer — a higher plan raises limits and nothing else. History is the same: every plan can query it, and a paid plan buys how far back. And where the limits are the only obstacle to public-interest work, they are lifted for free — see publicInterest.","dataIsPublicDomain":"Nothing in any paid plan is a licence to the data. Every tariff line, country code and Federal Register notice served here is a work of the United States Government and is public domain; it is free on every plan, at full fidelity, and you may redistribute it commercially without asking. A paid plan buys CAPACITY and HISTORICAL DEPTH on a shared server, never access.","billing":{"status":"not-yet-available","provider":"paypal","note":"Paid plans are not live. No payment code runs in this service and no card or PayPal credential ever reaches it. When paid plans open they will be served from a separate domain backed by this same API, and subscriptions will be handled by PayPal Subscriptions; this service will only ever receive a signature-verified webhook that issues or revokes an API key.","interestUrl":"https://apis.allanninal.dev/tariff/pro.html"},"featureCatalogue":{"tariff.read":"Search and fetch the complete Harmonized Tariff Schedule of the United States — all 98 chapters, 29,860 lines — with duty rates parsed into computable terms and the published string served alongside.","duty.estimate":"Estimate the duty on a shipment: HTS line, litres, customs value and country of origin in, the arithmetic and the implied effective ad valorem rate out.","notices.read":"Federal Register tariff actions, including presidential proclamations that change duties across headings.","bulk.download":"The complete datasets as static JSON files, cacheable and unmetered.","history.asof":"Query the schedule as it stood on a past date (?asOf=). USITC serves only the current revision, so this exists only because this service retains the earlier ones.","history.changes":"A change feed: which tariff lines, rates or notices moved since a date."},"limitDefinitions":{"requestsPerMinute":"Requests accepted in a rolling minute, per IP on the anonymous plan and per key otherwise.","requestsPerDay":"Requests accepted in a rolling day, same identity.","maxPageSize":"Largest value accepted for ?limit= on a search endpoint.","bulkDownloadsPerDay":"Full static-dataset file downloads accepted per day (/api/v1/*.json). The files are free and complete; this caps how often one identity may re-pull them, because the cost is bandwidth. The per-record API under /v1 is counted separately.","historyDays":"How far back ?asOf= and the change feed may reach, in days before today. null means the full retained history. Every plan can use both endpoints; this caps the depth, not the capability."},"plans":[{"id":"free","name":"Free","tagline":"Everything, no signup.","price":{"monthly":0,"annual":0,"currency":"USD"},"available":true,"signupRequired":false,"limits":{"requestsPerMinute":60,"requestsPerDay":5000,"maxPageSize":100,"bulkDownloadsPerDay":50,"historyDays":30},"features":["tariff.read","duty.estimate","notices.read","bulk.download","history.asof","history.changes"],"description":"Anonymous, budgeted by IP. The whole tariff schedule at full fidelity, unlimited duty estimates within the budget, the complete static files, and the last 30 days of history. This is not a trial — it is the product.","upgradeReason":null,"current":true},{"id":"free-key","name":"Free (with key)","tagline":"Same data, a bigger budget.","price":{"monthly":0,"annual":0,"currency":"USD"},"available":true,"signupRequired":true,"limits":{"requestsPerMinute":300,"requestsPerDay":50000,"maxPageSize":100,"bulkDownloadsPerDay":500,"historyDays":30},"features":["tariff.read","duty.estimate","notices.read","bulk.download","history.asof","history.changes"],"description":"Ask for a key and the per-IP budget becomes a per-key budget ten times the size. Nothing else changes: a key does not unlock a field, a route or a record.","upgradeReason":"You are hitting the anonymous per-IP limit."},{"id":"pro","name":"Pro","tagline":"Production volume and the full archive.","price":{"monthly":19,"annual":190,"currency":"USD","annualNote":"two months free"},"available":false,"signupRequired":true,"limits":{"requestsPerMinute":1200,"requestsPerDay":500000,"maxPageSize":1000,"bulkDownloadsPerDay":5000,"historyDays":null},"features":["tariff.read","duty.estimate","notices.read","bulk.download","history.asof","history.changes"],"description":"The same endpoints and the same data, at production request rates, with history reaching back as far as this service has retained it rather than 30 days.","upgradeReason":"You need production request rates, or history older than 30 days."},{"id":"business","name":"Business","tagline":"Headroom for a platform.","price":{"monthly":49,"annual":490,"currency":"USD","annualNote":"two months free"},"available":false,"signupRequired":true,"limits":{"requestsPerMinute":6000,"requestsPerDay":5000000,"maxPageSize":5000,"bulkDownloadsPerDay":50000,"historyDays":null},"features":["tariff.read","duty.estimate","notices.read","bulk.download","history.asof","history.changes"],"description":"For putting this behind your own product. Still the same data and the same routes; the ceiling is simply high enough to stop thinking about.","upgradeReason":"You are serving this to your own users and Pro's ceiling is in the way."},{"id":"public-interest","name":"Public interest","tagline":"Pro capability, free, by application.","price":{"monthly":0,"annual":0,"currency":"USD"},"available":true,"signupRequired":true,"limits":{"requestsPerMinute":1200,"requestsPerDay":500000,"maxPageSize":1000,"bulkDownloadsPerDay":5000,"historyDays":null},"features":["tariff.read","duty.estimate","notices.read","bulk.download","history.asof","history.changes"],"description":"Pro limits and full history at no cost, for journalists, academics, nonprofits and public-interest researchers.","upgradeReason":"The free limits are in the way of public-interest work.","applicationRequired":true,"eligibility":["Journalists and newsrooms reporting on trade policy or its cost to businesses and consumers.","Academic researchers and students measuring the effect of tariff changes.","Nonprofits and NGOs working on trade, agriculture or small-business policy.","Transparency and civic-technology projects republishing public records.","Small importers without a customs broker, where the free limits are genuinely in the way."],"howToApply":"Message the author at https://www.linkedin.com/in/allanninal/ saying what you are working on. No proposal, no procurement, no annual review.","support":"Best effort, same as every other plan."}],"fairUse":"The free plans are genuinely free and are not a trial. They are rate limited so one caller cannot take the service down for everyone — the scarce resource is a single shared host, not the data, which is public domain and which you are free to download in full and host yourself.","selfHostNote":"If you need more than any plan offers, do not buy one: the complete datasets are published at /tariff/api/v1/ and the server is MIT licensed. Run your own copy. A rate limit is a property of my hardware, not a property of the data.","whyHistoryIsSold":"USITC publishes one Harmonized Tariff Schedule — the current one — and overwrites it with each revision. There is no public archive of past revisions and no endpoint that serves them; /reststop/currentRelease names the live revision and nothing names the ones before it. So the answer to 'what was the statutory duty on these goods on 14 March 2026' does not exist anywhere and cannot be reconstructed after the fact. This service creates it by retaining each release as it appears. That retained history is the one thing here that is genuinely mine to sell — it is work performed, not a public record put behind a gate.","historyNote":"Historical depth is limited by when this service started retaining snapshots, not by your plan alone. /v1/history/coverage reports the real window; no plan can answer for a date before we started looking, and this service will never invent one.","publicInterest":{"summary":"Pro-level access is free for journalists, academics, nonprofits and public-interest researchers. Ask and it is granted.","why":"This is public data about who pays what to bring goods into the United States, at a moment when those rates are changing by proclamation several times a year. The people most likely to do something useful with it — reporters tracking the cost of trade policy, researchers measuring it, small importers with no customs broker — are the least likely to have a budget for an API. Charging them would select against exactly the use this data exists for. The rate limits exist to protect one small shared server, not to ration public records, so where the limit is the only obstacle it is simply lifted.","contact":"https://www.linkedin.com/in/allanninal/","note":"No proposal, no procurement, no annual review. Contact is via LinkedIn rather than email, so the author can see a real person is asking. If the free tier's limits are in your way and you are doing work of this kind, say so and you will get a key.","contactVia":"LinkedIn"},"pricingRationale":{"summary":"Priced against the market, and deliberately far below it. The closest competitor, tariffsapi.com, sells resolved duty rates across the whole tariff schedule at $99 and $199 a month. This service covers three headings, not all of them, and does not stack section 301/232/IEEPA duties for you — so it is priced at a fraction of their entry tier, not alongside it.","comparedWith":[{"vendor":"tariffsapi.com","url":"https://tariffsapi.com/pricing","verifiedOn":"2026-09-20","theirTiers":[{"name":"Importer","monthly":99,"notes":"$74/mo billed yearly. Unlimited watched HTS codes, email change alerts, duty exposure totals, historical rates with as_of, tariff sheet PDFs, bulk CSV import. No code required."},{"name":"Developer","monthly":199,"notes":"$149/mo billed yearly. 10,000 API calls per month, bulk resolve up to 200 HTS per request, confidence scores and match metadata, 100 watched codes, MCP server access."}],"trial":"14-day free trial, card required at signup.","theyHaveThatWeDoNot":["The entire Harmonized Tariff Schedule, not three headings","Section 301, 232, IEEPA and chapter 99 duties STACKED into a single resolved rate — this service lists chapter 99 candidates and deliberately refuses to apply them","Email change alerts and watched-code monitoring","Confidence scores and classification match metadata","Tariff sheet PDFs, bulk CSV import, and an MCP server"],"weHaveThatTheyDoNot":["A free tier that is the whole product: no card, no trial clock, and 5,000 requests a day anonymously — against 10,000 API calls a MONTH on their $199 plan.","The published rate string served alongside the parsed terms, so every computed number can be checked against what USITC actually printed.","An estimator that refuses rather than guesses: a rate it cannot compute returns null with the reason, never a zero. Plus the full description path for each line, the programme letters resolved to agreement names, and the CBP port codes an entry is filed against.","Complete datasets downloadable as static JSON and an MIT-licensed server, so a heavy user can self-host instead of buying anything."],"honestly":"They stack section 301/232/IEEPA duties into one number and this service refuses to, because whether a chapter 99 heading reaches a shipment is a classification judgement it cannot make. For an importer who wants one number to put on an entry, that is a real advantage and it is theirs. USITC already publishes the underlying schedule free, so serving the current rate is not a differentiator here either — the retained archive and the refusals are."}],"whyThisNumber":"$19 is the price of a thing you expense without asking anyone. The cost of running this is a share of one small VPS, and the data cost nothing to acquire because it is public domain — so the price reflects the capacity and the retention, which are the only things here that are actually mine to sell.","whatCapsIt":"Every dataset here is public domain and published in full as static files, and the server is MIT licensed. Anyone who finds a plan expensive can self-host and pay nothing. That is a deliberate ceiling on what this can ever charge, and it is the right one.","alsoLookedAt":[{"vendor":"USITC HTS reststop","url":"https://hts.usitc.gov/reststop/","note":"Free and keyless, and it is where this service's schedule comes from. It serves only the CURRENT revision, returns display strings rather than computable amounts, and has no archive — which is precisely the gap this service fills."},{"vendor":"SimplyDuty","url":"https://www.simplyduty.com/pricing/","note":"Pay-as-you-go duty and tax calculation across countries. Broader in jurisdiction than this service, which is US-only; pricing is per-call rather than per-month."},{"vendor":"Zonos","url":"https://zonos.com/pricing","note":"Landed-cost platform aimed at cross-border ecommerce checkout. A different product entirely — it prices a cart, not a customs entry."}]},"contact":{"via":"LinkedIn","url":"https://www.linkedin.com/in/allanninal/","note":"There is no public email address for this service. Reach the author on LinkedIn."},"currentPlan":"free"}