Properties
| Name | Type | Description |
|---|---|---|
| state | string | Two-letter jurisdiction code |
| state_name | stringnull | |
| substance | string | |
| product_type | string | |
| legal_status | string | 'unknown' is returned only when no regulation row matches AND the substance is not one the canonical verdict names. When the canon settles the state + substance it answers (source: "canon"); when the |
| effective_status | stringnull | Status after applying the federal H.R. 5371 timeline overlay |
| summary | stringnull | |
| confidence_score | numbernull | 0..1 — always a JSON number, never a string |
| last_verified | stringnull | |
| thc_limit_pct_dryweight | numbernull | |
| thc_limit_mg_per_serving | numbernull | |
| thc_limit_mg_per_container | numbernull | |
| age_restriction | numbernull | |
| sources | array | |
| verification | object | |
| disclaimer | string | |
| attribution | string | |
| legal_status_source | string | canon_overlay = the canonical substance verdict raised the stored status (a row is never served less strict than canon); db = the stored value stands (not a claim of human review). |
| prose_source | string | Present when the narrative fields (plain_english / summary / summary_140_chars / summary_paragraph) were replaced by the canonical verdict line + verbatim rule basis + fact id, because the canonical v |
| source | string | Present only on a row assembled at read time from HempData's verified facts because the regulations table has no row for this state + substance. Such a row has id null, is a substance-level verdict (p |
| canon_fact_id | stringnull | The verified fact id behind a canon verdict / canon prose. |
| canon_verdict | string | The verdict line /v1/answer prints for this state + substance (canon rows only). |
| canon_scope | string | Canon rows answer for the substance; product-form rules are in state_rule, not evaluated. |
| state_rule | stringnull | The state's verified fact (canonical phrasing), verbatim. |
| canon_form_note | string | Set when a product-form rule in the state's fact (e.g. beverage-specific limits) is not evaluated by a substance-level canon row; the row is then served 'restricted', never 'legal'. |
| canon_verdict_source | string | How the canonical verdict reached the status on a canon row: canon = a verified fact settles it; fallback_map = HempData's audited prohibition review; unsettled = the canon declines to settle it (serv |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/hempdata-io/json-schema/hempdata-io-compliance-check-result-schema.json",
"title": "ComplianceCheckResult",
"x-generated": "2026-11-11",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/_original/hempdata-io-api-openapi.json#/components/schemas/ComplianceCheckResult",
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "Two-letter jurisdiction code"
},
"state_name": {
"type": [
"string",
"null"
]
},
"substance": {
"type": "string"
},
"product_type": {
"type": "string"
},
"legal_status": {
"type": "string",
"enum": [
"legal",
"legal_with_restrictions",
"gray_area",
"prohibited",
"unknown"
],
"description": "'unknown' is returned only when no regulation row matches AND the substance is not one the canonical verdict names. When the canon settles the state + substance it answers (source: \"canon\"); when the canon is unsettled on it the answer is gray_area with the canon's own not-settled line."
},
"effective_status": {
"type": [
"string",
"null"
],
"description": "Status after applying the federal H.R. 5371 timeline overlay"
},
"summary": {
"type": [
"string",
"null"
]
},
"confidence_score": {
"type": [
"number",
"null"
],
"description": "0..1 — always a JSON number, never a string"
},
"last_verified": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"thc_limit_pct_dryweight": {
"type": [
"number",
"null"
]
},
"thc_limit_mg_per_serving": {
"type": [
"number",
"null"
]
},
"thc_limit_mg_per_container": {
"type": [
"number",
"null"
]
},
"age_restriction": {
"type": [
"number",
"null"
]
},
"sources": {
"type": "array",
"items": {
"$ref": "#/$defs/ComplianceSource"
}
},
"verification": {
"$ref": "#/$defs/ComplianceVerification"
},
"disclaimer": {
"type": "string"
},
"attribution": {
"type": "string"
},
"legal_status_source": {
"type": "string",
"enum": [
"canon_overlay",
"db"
],
"description": "canon_overlay = the canonical substance verdict raised the stored status (a row is never served less strict than canon); db = the stored value stands (not a claim of human review)."
},
"prose_source": {
"type": "string",
"enum": [
"canon"
],
"description": "Present when the narrative fields (plain_english / summary / summary_140_chars / summary_paragraph) were replaced by the canonical verdict line + verbatim rule basis + fact id, because the canonical verdict decided this row and the stored text contradicted it."
},
"source": {
"type": "string",
"enum": [
"canon"
],
"description": "Present only on a row assembled at read time from HempData's verified facts because the regulations table has no row for this state + substance. Such a row has id null, is a substance-level verdict (product-form rules are not evaluated — see state_rule) and is never written to the table."
},
"canon_fact_id": {
"type": [
"string",
"null"
],
"description": "The verified fact id behind a canon verdict / canon prose."
},
"canon_verdict": {
"type": "string",
"description": "The verdict line /v1/answer prints for this state + substance (canon rows only)."
},
"canon_scope": {
"type": "string",
"enum": [
"substance_level"
],
"description": "Canon rows answer for the substance; product-form rules are in state_rule, not evaluated."
},
"state_rule": {
"type": [
"string",
"null"
],
"description": "The state's verified fact (canonical phrasing), verbatim."
},
"canon_form_note": {
"type": "string",
"description": "Set when a product-form rule in the state's fact (e.g. beverage-specific limits) is not evaluated by a substance-level canon row; the row is then served 'restricted', never 'legal'."
},
"canon_verdict_source": {
"type": "string",
"enum": [
"canon",
"fallback_map",
"unsettled"
],
"description": "How the canonical verdict reached the status on a canon row: canon = a verified fact settles it; fallback_map = HempData's audited prohibition review; unsettled = the canon declines to settle it (served gray_area — not permission)."
}
},
"required": [
"state",
"substance",
"product_type",
"legal_status",
"sources",
"disclaimer"
],
"$defs": {
"ComplianceSource": {
"type": "object",
"description": "One provenance entry backing a compliance answer. Never invented: empty source data in the record yields an empty array, not fabricated citations.",
"properties": {
"type": {
"type": "string",
"enum": [
"federal_law",
"federal_rule",
"state_statute",
"agency_rule",
"case_law",
"bill_pending",
"fda_action",
"carrier_policy"
]
},
"citation": {
"type": "string"
},
"publisher": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
},
"retrieved_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"license": {
"type": "string"
},
"confidence": {
"type": [
"number",
"null"
]
},
"attorney_reviewed": {
"type": "boolean"
}
},
"required": [
"type",
"citation",
"publisher"
]
},
"ComplianceVerification": {
"type": "object",
"description": "How this answer traces to canonical, human-reviewed verified data. status=verified means the jurisdiction carries a canonical posture fact (statute-cited, primary-sourced). Treat unverified figures as orientation, not a compliance decision.",
"properties": {
"status": {
"type": "string",
"enum": [
"verified",
"unverified"
]
},
"fact_id": {
"type": [
"string",
"null"
],
"description": "Canonical fact id (matches docs/REGULATORY_FACTS.md heading)"
},
"statute": {
"type": [
"string",
"null"
],
"description": "Statute citation backing the jurisdiction's verified posture"
},
"last_verified": {
"type": [
"string",
"null"
],
"description": "ISO date of the most recent human verification against primary sources"
},
"primary_sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Primary-source URLs grounding the fact"
},
"thc_limit_source": {
"type": "string",
"enum": [
"verified",
"db"
],
"description": "verified = mg caps reconciled against the canonical verified state limits"
},
"legal_status_source": {
"type": "string",
"enum": [
"canon_overlay",
"db"
],
"description": "canon_overlay = legal status raised by the canonical verdict / prohibition map; db = the stored value stands"
}
},
"required": [
"status",
"thc_limit_source",
"legal_status_source",
"primary_sources"
]
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/hempdata-io-compliance-check-result"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.