Compliance & regions

Who can trade, what your integration sees when a gate fires, where data lives, and what you may redistribute — documented plainly, because on a real-money platform these walls are features, not bugs.

Drazill is a Canadian, real-money exchange, so every real-money action passes a compliance gate. Undocumented, those gates read as mysterious 403s; documented, they’re predictable. This page is reviewed against the platform’s compliance control matrix (docs/compliance-control-matrix.md) and states honest negatives plainly — it does not improvise legal specifics.

Who can trade

Real-money trading is available to verified Canadian residents, subject to:

  • Identity (KYC). The account must complete identity verification.
  • Age. At or above the province’s minimum gambling age (18 or 19), enforced from the verified date of birth.
  • Province. The account’s verified province must be in the real-money launch allow-list (allowed_provinces), cross-checked against IP region. The gate is enforced; the exact launch province list is an owner/legal decision and is not finalized here — we do not publish a province list we cannot yet confirm.
  • Sanctions & responsible gaming. No sanctions/watchlist hit; no active self-exclusion or breached responsible-gaming limit.

Money and compliance checks fail closed. If a required check cannot be evaluated (an infrastructure error), the action is denied, never auto-passed. A check that can’t run is treated as a failing check on money paths — by design.

The compliance gate order

Every real-money action (deposit, withdraw, trade) runs the checks in this fixed order:

KYC → sanctions → age → province → terms → responsible-gaming → geo

The first check to fail short-circuits with its error code. Source: ComplianceGateService.enforce (root CLAUDE.md, docs/compliance-control-matrix.md).

What your integration sees when a gate fires

Each gate returns a specific error code so you can surface the right message (and not retry a hard block). Every code below is verified in CI to exist in the enforcing source, and the HTTP status is cross-checked against the exception classes:

CodeHTTPGateWhat it meansWhat to do
KYC_REQUIRED403KYCThe account has not completed identity verification (KYC).Complete KYC in the Drazill app before any deposit, withdrawal, or trade. This is an account-level gate, not a key setting.
COMPLIANCE_BLOCKED403SanctionsThe account matched a sanctions / watchlist screen. Hard block.Contact support — this cannot be cleared programmatically.
AGE_VERIFICATION_REQUIRED403AgeDate of birth has not been verified for the account.Verify date of birth through KYC; age is enforced from the verified DOB.
UNDERAGE403AgeThe verified age is below the province’s minimum gambling age (18 or 19).None — accounts below the provincial minimum age cannot trade real money.
PROVINCE_RESTRICTED403ProvinceThe account’s verified province is not in the real-money launch allow-list.None programmatically — real-money access depends on the province allow-list (see below).
TERMS_ACCEPTANCE_REQUIRED403TermsThe current terms version has not been accepted (or was superseded by a new version).Have the account holder accept the latest terms in the app, then retry.
SELF_EXCLUSION_ACTIVE403Responsible gamingAn active self-exclusion is in effect on the account.None until the exclusion period lapses — this is a responsible-gaming protection.
RESPONSIBLE_GAMING_LIMIT403Responsible gamingA responsible-gaming limit (deposit / loss / wager / cool-off) was reached.Wait for the limit window to reset, or have the account holder adjust limits in the app.
GEO_LOCATION_UNVERIFIED403GeoNo verified Canadian jurisdiction is on file — the geo check fails closed.The account holder must establish a verified province/location before real-money actions.
GEO_BLOCKED403GeoThe request originates from a location or province where trading is not available.None — real-money access is unavailable from a blocked region.
RESTRICTED_PERSON403SurveillanceThe account is restricted from trading this specific market (restricted-person policy).None for the affected market — this is a market-integrity control.
COMPLIANCE_CHECK_UNAVAILABLE503Any (fail-closed)A required compliance check could not be evaluated (infrastructure error).Retry with backoff. Money and compliance checks fail closed by design — a check that cannot run denies the action rather than auto-passing it.

These are the compliance/gate codes specifically; the full API error catalog is in the API Reference. Every error body carries a request_id — include it in any support request.

Data residency

All platform data resides in ca-central-1 (Canada). The docs site itself is public, static, marketing-class content and collects no user data — no forms, no PII, no sign-in. The residency invariant governs user data, which this documentation never carries.

Market-data licensing & redistribution

The historical-dataset export API is licensable and coverage-limited. These rules are lifted verbatim from the enforcing source (app/schemas/data_export.py):

Redistribution. Export coverage is allow-listed per data source and category. First-party markets (no upstream provider) are exportable by default. Markets attributed to an upstream provider (e.g. ESPN, API-Sports, CoinGecko) are excluded until that provider’s redistribution terms are cleared and added to the allow-list, because provider terms may restrict redistribution of derived data.

Trade-tape anonymization. Trade-tape exports are aggregate and anonymized: each row is a single executed print exposing only the market, outcome, execution price, size, notional value, fees, a global sequence number, and the execution timestamp. No user, account, order, wallet, IP address, or trade identifier is included, so no row can be joined back to an individual.

API terms

PENDING LEGAL REVIEW. The developer API terms (docs/legal/api-terms.md, version 2026-07-17) are a good-faith engineering draft that has not been reviewed or approved by legal counsel and is not a binding agreement — mirrored here with that status, exactly as the source carries it.

Terms acceptance is currently not enforced for key creation (DEVELOPER_TERMS_REQUIRED is false); when the owner enables it, creating a key will require a current acceptance of API_TERMS_VERSION. See Authentication.

No SLA yet

Drazill does not publish a uptime or latency service-level agreement. Any performance figure you see elsewhere is a target, labeled as a target — not a guarantee. There is no uptime commitment on this documentation. When an SLA is offered, it will be stated as a binding commitment; until then, treat availability as best-effort.

Documentation language

These docs are English-only. Localization is not available on the current docs plan. The app itself is bilingual (English/French); whether Québec’s Bill 96 requires French-language developer documentation is an open legal question for the owner and counsel — we do not claim French docs exist.