stile

High-risk retail identity verification

Document capture, liveness, face match, mDL, and jurisdictional age-tier resolution. Signed webhook returns an eligibility signal.

  • Document Capture
  • Liveness
  • Face Match
  • mDL
  • Age Tier
  • Signed Webhook
verification_session.verifiedverification_session.verified
{  "id": "evt_8x2k4dq3w1m7",  "object": "event",  "type": "verification_session.verified",  "api_version": "2026-01-15",  "data": {    "object": {      "id": "vks_8x2k4dq3w1m7",      "object": "verification_session",      "status": "verified",      "age_tier": "min_age_21",      "jurisdiction": "US-CA",      "completed_at": 1715199912    }  },  "livemode": true,  "pending_webhooks": 1,  "created": 1715199912}

The gap

A visual ID check at the counter isn't a compliance record.

  1. Fake and borrowed IDs pass a quick glance

    A busy dispensary counter is exactly the environment where a convincing fake or an older sibling's license gets through a manual check. Statutory eligibility for the medical tier compounds the risk further.

  2. Manual review can't catch spoofed liveness

    A human checking a face against a photo doesn't catch photo-of-photo or replay tactics. Passive liveness scoring does.

  3. Regulator audits arrive after the transaction

    When a state cannabis regulator requests records for a disputed sale, there's nothing to hand over without a signed verification event captured at check-in time.

Capabilities

Age-21 verification for cannabis dispensaries operating in state-legal markets

Age-21 verification with optional medical-card capture

State-issued license or mDL captured in-session. Where the state runs a parallel medical-cannabis program (CA, FL, NY, NJ, others), Stile captures the medical-card image alongside the age document and returns it with the session payload — registry-side patient-record validation remains operator-side, since state OCM/DCC databases vary in their integration availability.

Liveness + face match

Same liveness model as the rest of the regulated-commerce family. Tuned for retail-walk-in flows where the dispensary kiosk or budtender handheld captures the credential. Sub-second result keeps the queue moving.

verifiedspoofed<1s

State purchase-limit signals

Per-state statutory purchase limits (e.g. 1oz flower / 8g concentrate in CA) are enforced by the dispensary's POS. Stile contributes the verified identity assertion downstream POS systems consume to enforce per-day, per-month limits across visits.

How it works

How a dispensary check-in flows

Configurable per state. The default is age-21 verification with optional medical-card image capture for states with parallel programs (registry-side validation is operator-side).

  1. Step 01

    1. Check-in

    Customer presents state-issued license or mDL at the dispensary kiosk or budtender handheld. Stile's hosted widget runs in the dispensary POS or a tablet workflow.

  2. Step 02

    2. Capture + verify

    OCR + barcode cross-reference for physical credentials; ISO/IEC 18013-5 signature verification for mDL. Selfie capture for liveness + face match. Medical-card image capture if the state has a medical-tier flow — the captured image is returned with the session for the dispensary's records; registry-side patient validation is operator-side.

  3. Step 03

    3. Eligibility signal

    Signed webhook returns 21+ eligibility, the issuing state, and an audit pointer. Dispensary unlocks the retail flow; if the state has a medical-tier program, the dispensary's POS layers its own registry check on top of the eligibility signal.

  4. Step 04

    4. Purchase-limit cross-reference (optional)

    For states with statutory daily/monthly purchase limits, the dispensary POS uses the verified identity assertion to cross-reference prior purchases. Stile contributes the assertion; the limit-tracking is POS-side.

Proof

Every check-in leaves a signed record.

The regulator's records request for a disputed sale arrives whenever it arrives. Every completed check-in already has a signed verification event waiting.

signed_eventjson
stile-signature: t=1747193410,v1=3e8f56a2... {  "id": "evt_01HR3FK4S2NXQY6",  "type": "verification_session.verified",  "data": { "object": { "id": "vks_4p9x2m" } }}

Outcome

See the check-in flow for your dispensary.

Tell us which states you operate in and whether you run a medical tier — we'll map the ruleset.

Adult-use cannabis states and Stile coverage

States with active adult-use cannabis markets as of mid-2026. Min. age is 21 in every active market. The medical-card column reflects whether the state runs a parallel medical program with a separate eligibility tier.

Adult-use cannabis states and Stile coverage
StateAdult-use startMedical programStile baseline configuration
California2018Yes (Prop 215, 1996)License + liveness; medical card optional capture
Colorado2014YesLicense + liveness; medical card optional capture
Washington2014YesLicense + liveness
Oregon2015YesLicense + liveness
Massachusetts2018YesLicense + liveness; medical card optional capture
Illinois2020YesLicense + liveness; medical card optional capture
New Jersey2022YesLicense + liveness; medical card optional capture
New York2022YesLicense + liveness
Michigan2019YesLicense + liveness; medical card optional capture
Nevada2017YesLicense + liveness

FAQ

Cannabis retail verification — buyer questions

Stile resolves the credential's issuing jurisdiction and returns it as an attribute. Per-state purchase rules (whether a state restricts to in-state-issued credentials) are configurable in the per-state ruleset. Most states accept any US-issued credential at age-21 verification; CA, NY, and a few others have layered rules — confirm at integration.

Medical-card capture is a second document-scan step within the same Stile session. The card is OCR'd and the registry-issuer is validated where the state publishes a verifiable patient registry. The signed webhook returns both the age-21 eligibility and the medical-tier eligibility as separate attributes; the dispensary POS routes to the medical or adult-use flow based on the released attributes.

Median ~2.5 seconds for a license-only flow on the kiosk hardware. mDL flows are faster (~1.5s) because the wallet handles credential release without document capture. Adding a medical-card scan adds ~2 seconds on top. Most dispensary POS deployments queue 4-6 check-ins ahead; Stile is rarely the bottleneck.

Stile follows the operator's configured retention policy — see the security page for the per-account retention configuration. The federal-illegality concern primarily affects payment processing and banking, not identity verification. Operators in states with active programs are operating under state law; Stile's data-handling follows state law and the operator's compliance posture. Federal banking restrictions are handled by the operator's payment stack, not Stile.

Yes. Delivery verification is a separate flow that runs at order placement (verifies the buyer is 21+ and matches the registered customer) and again at delivery handoff (verifies the recipient matches the order's verified identity). Stile's SDK supports both. State-by-state delivery rules vary — some states require courier-side ID re-check at handoff; others accept a one-time placement verification.

Get started

Speak with our team about your dispensary verification flow

Tell us which states you operate in, your POS stack, and whether you run delivery in addition to in-store. We'll send a configuration recommendation back same-week.

Bring age-21 + medical-tier verification to your dispensary

Walk through your use case and we'll send a configuration recommendation back same-week.

Book demo