HempData API

Compliance data for 51 US hemp jurisdictions. One call. JSON in, legal answer out.

Try it live in the playground — no signup.
$ 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
  }
}
51 jurisdictions · 176+ regulations · 255 bills tracked · updated daily · 99.9% uptime

Quickstart — 60 seconds to your first call.

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)

The dataset behind every call.

What we ship, in one grid.

51jurisdictions — all 50 states + DC
176+regulation records — statute, rule, agency policy
255bills tracked — live via Open States
FDAenforcement actions — warning letters, seizures, recalls
Carriers& payment policies — Square, Stripe, FedEx, UPS by product type
H.R. 5371overlay — preview compliance against post-enforcement rules today
Diffhistorical — query "what was legal on date X"
Grayattorney-reviewed — flagged in responses when the law is ambiguous

The endpoints.

Everything you can call. Full reference →

MethodPathWhat it does
GET/v1/compliance/checkSingle product + single state → compliant?
POST/v1/compliance/scanUpload COA → 51-state legality map
POST/v1/compliance/reformulateProduct + target state → what to change
GET/v1/regulationsQuery the full regulation database
GET/v1/states/:codeEverything we know about a state
GET/v1/verified/:brand_idVerified badge lookup
POST/v1/webhooksSubscribe to regulation changes
GET/v1/statusService health

Rate limits. No asterisks.

You'll hit them eventually. Better to know upfront than to debug a 429 in production at 2 a.m.

TierRequests / minuteRequests / monthOverage
Free601,000Hard cap — request returns 429
Developer — $49/mo30010,000$0.005 per extra request
Scale — $149/mo1,200100,000$0.002 per extra request
Enterprise — customCustomCustomCommitted-use pricing

429 responses include Retry-After header and current quota. Webhook available if you want a heads-up at 80% usage.

Drop into your stack.

Official SDKs and import-ready specs. All install snippets →

JavaScript / TypeScript SDK

npm install @hempdata/sdk
GitHub →

Python SDK

pip install hempdata
GitHub →

OpenAPI 3.1 spec

Generate clients in any language.

Download JSON →

Postman collection

Import and start poking.

Import the OpenAPI spec → (Postman auto-imports OpenAPI)

Ready to build?

Free tier covers 1,000 requests a month. No card required.