Classify7

APIDangerous goods classification for parcel shippers

Send product text.
Get a hazmat determination you can defend.

A listing, an ingredient list, an SDS extract — anything that describes the product. One call returns the UN number, hazard class, packing group and proper shipping name, plus what 4 carriers accept by ground and by air, every field cited to the provision it came from.

And when it cannot decide, it says so. An input that does not support a determination returns needs_review and isHazmat: null, naming the one datum it needs. Never a plausible guess.

Entries
64
of the HMT
Classes
9
15 divisions
Carriers
4
ground + air
Ruleset
2026.08.1
hash-pinned
  • 49 CFRrevised 1 Oct 2025
  • IATA DGR67th edition
  • IMDG CodeAmendment 42-24
POST/api/classify200
Request

description: Isopropyl alcohol 99%, 500 ml spray bottle

ResponseDangerous goods

Isopropanol

UN1219

determination
classified
isHazmat
true
packingGroup
II
carriergroundairUPScontract requiredcontract requiredFedExcontract requiredcontract requiredUSPSrestrictedprohibitedAmazon FBAreview requiredrestricted

cited49 CFR 172.101 Hazardous Materials Table

A complete determination: entry, class and packing group, all decided from the text.

Classify something now

No account, no card. One classification a day on the free tier — the same engine that ran the examples above.

Paste from a safety data sheet (optional)
Try one

This widget calls the same public POST /api/classify endpoint your code would. Free tier: one classification per day, per IP.

Enter a product and classify it. Every determination comes back with the evidence that produced it, the reasoning in order, and the regulatory provisions it cites.

Three answers, never four

classified, not_regulated, or needs_review. On needs_review the response names the exact datum it needs, a flash point, a concentration, a watt-hour rating, and isHazmat comes back null. Unknown is not the same as false. A wrong UN number on a shipping paper is worse than no UN number.

Carrier rules, not just regulations

A substance being legally shippable is not the same as a carrier taking it. Every determination carries UPS, FedEx, USPS and Amazon FBA positions for ground and air separately, with the governing publication cited.

Pinned to a ruleset hash

Every result carries the version and content hash of the rules that produced it. Issue a signed certificate against a stored determination, and put SKUs under continuous re-classification so an edition turnover does not quietly invalidate your catalogue.

Built for the whole lifecycle, not just the first call

A determination made today is only as good as it stays. Certificates give you a signed record of what was decided and under which ruleset; monitoring tells you the moment that ruleset changes underneath a SKU you already shipped.

certificate.pdf · Ed25519 signed
Classification certificateSIGNED
sku
PB-20K
unNumber
UN3480
determination
classified
ruleset
2026.08.1
hash
f31c40d328285540…

Verifiable independently against the public key at /api/certificate-key.

webhook · ruleset changed
Monitored SKU re-checkedCHANGED
sku
CLN-IPA-500
field
packingGroup
was
II
now
III
reason
DGR 2026 edition turnover

Delivered to your webhook, field by field — not a re-sent copy of the whole record.

Common questions

Is my product hazmat?
It depends on whether the product meets the criteria of one of the nine hazard classes in 49 CFR 173. Send Classify7 a description, an ingredient list with CAS numbers, or the transport section of the safety data sheet, and it returns one of three answers: classified (with the UN number, class, packing group and proper shipping name), not_regulated (with the reason it falls outside the regulations), or needs_review (with the exact datum it needs — usually a flash point or a concentration). It will not return a guess.
What is my UN number?
A UN number identifies a substance or article for transport. It is assigned from the 49 CFR 172.101 Hazardous Materials Table on the basis of what the material is and how it behaves — not on what it is sold as. Nail polish and paint thinner share UN1263 because both are paint-related material; a power bank is UN3480 while the identical cell inside a laptop is UN3481. Classify7 returns the UN number with the evidence that selected it.
Can I ship this with USPS, UPS, FedEx or Amazon FBA?
Being legally shippable is not the same as a carrier accepting it, and it is nearly always the carrier rule that stops a parcel. Classify7 returns each carrier's published position for ground and air separately: accepted, contract-required, restricted, prohibited, or review-required. USPS prohibits standalone lithium batteries outright, domestically and internationally; Amazon FBA requires a dangerous goods review per ASIN before the first inbound shipment.
Which lithium battery packing instruction applies?
It depends on the chemistry, how the battery is packed, and its size. Lithium ion alone is PI965; packed with equipment PI966; contained in equipment PI967. Lithium metal alone is PI968; packed with equipment PI969; contained in equipment PI970. Ion is sized in watt-hours (20 Wh per cell, 100 Wh per battery), metal in grams of lithium content (1 g per cell, 2 g per battery). PI965 Section II and PI968 Section II were withdrawn on 1 January 2022, so there is no longer any excepted route for a standalone lithium battery by air.
How current is the ruleset, and can I prove which one was used?
Every determination carries the ruleset version and a hash of the rule data that produced it. On a paid plan you can issue an Ed25519-signed certificate against a stored determination, in PDF or JSON, recording the SKU, the verdict and that hash. The public key is published at /api/certificate-key so a recipient can verify it without contacting us. Put a SKU under monitoring and a call to the recheck endpoint re-classifies it, and every other stale SKU, the moment the hash changes; nothing runs on its own, so point your own scheduler at it for a hands-off check.
What happens when a product is not in the table?
It returns needs_review, and says so. The entry table is a curated subset of the 49 CFR 172.101 table covering commercial parcel, e-commerce and FBA shipping — not all ~3,000 entries. An absent match means 'not encoded', never 'safe to ship as general cargo'. Treating silence as a clearance is how mis-declared parcels happen.