Compliance data for 51 US hemp jurisdictions. One call. JSON in, legal answer out.
$ curl https://api.hempdata.io/v1/compliance/check \ -H "Authorization: Bearer $KEY" \ -G -d "state=TX" -d "substance=cbd" -d "product_type=edibles"
{
"success": true,
"data": {
"state": "TX",
"substance": "cbd",
"product_type": "edibles",
"legal_status": "legal_with_restrictions",
"summary": "CBD edibles legal under DSHS registration…",
"confidence_score": 0.94
}
}
Pick your stack. The auth pattern is identical across all three.
# 1. Get a key open https://api.hempdata.io/signup # 2. Export it export HEMPDATA_KEY="hd_live_..." # 3. Make a call curl "https://api.hempdata.io/v1/compliance/check?state=KY&substance=cbd&product_type=edibles" \ -H "Authorization: Bearer $HEMPDATA_KEY"
// npm install @hempdata/sdk
import { HempData } from '@hempdata/sdk'
const hd = new HempData(process.env.HEMPDATA_KEY)
const result = await hd.compliance.check({
state: 'KY', substance: 'cbd', product_type: 'edibles'
})
console.log(result.data.legal_status)# pip install hempdata
from hempdata import HempData
hd = HempData(api_key=os.environ["HEMPDATA_KEY"])
result = hd.compliance.check(
state="KY", substance="cbd", product_type="edibles"
)
print(result.data.legal_status)What we ship, in one grid.
Everything you can call. Full reference →
| Method | Path | What it does |
|---|---|---|
| GET | /v1/compliance/check | Single product + single state → compliant? |
| POST | /v1/compliance/scan | Upload COA → 51-state legality map |
| POST | /v1/compliance/reformulate | Product + target state → what to change |
| GET | /v1/regulations | Query the full regulation database |
| GET | /v1/states/:code | Everything we know about a state |
| GET | /v1/verified/:brand_id | Verified badge lookup |
| POST | /v1/webhooks | Subscribe to regulation changes |
| GET | /v1/status | Service health |
You'll hit them eventually. Better to know upfront than to debug a 429 in production at 2 a.m.
| Tier | Requests / minute | Requests / month | Overage |
|---|---|---|---|
| Free | 60 | 1,000 | Hard cap — request returns 429 |
| Developer — $49/mo | 300 | 10,000 | $0.005 per extra request |
| Scale — $149/mo | 1,200 | 100,000 | $0.002 per extra request |
| Enterprise — custom | Custom | Custom | Committed-use pricing |
429 responses include Retry-After header and current quota. Webhook available if you want a heads-up at 80% usage.
Free tier covers 1,000 requests a month. No card required.