Checks and verdicts
The machine checks Checkbox runs at each lifecycle stage, what pass, fail, needs_review and not_applicable mean, and how the compliance status is computed.
A check verifies one observable thing — "the consent checkbox is not pre-checked", "a trial reminder arrived inside the window". Checks are implemented once and reused by every law that requires the same thing; the catalog maps requirements to checks.
Verdicts
| Status | Meaning |
|---|---|
pass | Observed, and what was observed meets the requirement (an automated assessment, not a legal determination). A check never passes for lack of data. |
fail | Observed, and it does not meet the requirement. The result says what was seen and how to fix it. |
needs_review | Checkbox lacks the evidence to decide, or a person must judge (for example "clear and conspicuous" on a page Checkbox cannot restyle). The result says which. |
not_applicable | No applicable requirement uses the check (for example trial checks without a free trial). |
A preflight result's verdict is the worst status among its checks: fail > needs_review > pass (not_applicable when nothing applies).
Status labels
Every verdict also carries a user-facing compliance_status that says what to do about it. The machine status above never changes; the label is computed from it, from the evidence and from the reason Checkbox gave.
compliance_status | Label | When |
|---|---|---|
needs_fix | Needs a fix | Every fail, and the needs_review results that are a clear gap in the legal floor (for example "says renews automatically but not until you cancel", a price that contradicts Stripe, consent implied by a plain "Subscribe" button). compliance.fix is the one change. |
pending_live_check | Looks compliant — live check pending | Everything Checkbox can see is right, but the live event has not been observed: an email whose template passes but was not seen sent for a real event, a cancellation that worked on screen but is not confirmed in Stripe, a reminder that is not due yet, a page judged from static HTML. compliance.pending_live_check says what and how it completes (a date, "run a proof", "BCC real sends"). Counts as compliant. A content problem never lands here. |
verified_live | Verified live | A pass that rests on a live event: an email seen sent, a cancellation flow run and confirmed. |
your_call | Your call | A real decision for a person: a notice period or minimum term in your terms, New York price-increase consent, a text in a language Checkbox does not read. compliance.question has one question and the recommended answer. |
compliant | Compliant / Looks compliant | A pass, or a grey area or stylistic judgement call (Stripe's own small grey custom text, an adjustable quantity) with a short compliance.note. |
Sites, evaluations, plans and check results roll these up over the required checks: needs_fix if any check needs a fix, else your_call if a decision is open, else compliant — "Compliant · 2 live checks pending".
Protection levels
Every check and plan task has a tier: required (the legal floor; the only tier that can make a site not compliant), recommended (clearer records beyond the legal floor, conversion-neutral: consent receipts, a cancellation confirmation email, the billing portal's cancel switch, a renewal section in your Terms) and extra (a checkbox per term, a pre-purchase summary). A site's protection_level decides what the plan lists: minimum (required only), balanced (default: required plus recommended suggestions, collapsed, never blocking) or maximum (everything). See Compliant checkouts that convert.
Evidence sources
| Source | What it provides |
|---|---|
| Synthetic shopper | Headless Chromium visits the checkout as a shopper in each state (timezone and location; regional proxies where configured), on desktop and mobile, optionally completes a sign-up and tries to cancel online |
| Snippet | What real visitors see on your own pages, including A/B variants; content changes trigger a re-scan. Snippet captures corroborate: they never produce a pass on their own |
| Billing platform | Plans, trials, portal and checkout settings; webhooks become lifecycle events |
| Your acknowledgment and reminder emails, BCC'd to the site's inbound address or received during a test subscription | |
| Policies | Your Terms, refund and cancellation pages, fetched and checked for consistency |
Every check
Sign-up
| Check | What it verifies | Laws that require it |
|---|---|---|
signup.disclosure.autorenew_language | Discloses that the subscription renews automatically until canceled | 25 jurisdictions |
signup.disclosure.price | Discloses the recurring charge amount | 22 jurisdictions |
signup.disclosure.frequency | Discloses the billing frequency | 17 jurisdictions |
signup.disclosure.cancellation_policy | Discloses the cancellation policy and how to cancel | 24 jurisdictions |
signup.disclosure.trial_terms | Discloses free-trial length and the charge after the trial | 16 jurisdictions |
signup.disclosure.term_length | Discloses the length of the renewal term (or that service is continuous) and any minimum purchase obligation | 20 jurisdictions |
signup.disclosure.proximity | Terms appear before the purchase button and in visual proximity to it | 16 jurisdictions |
signup.disclosure.conspicuous | Terms are clear and conspicuous (size, contrast, not hidden) | 27 jurisdictions |
signup.consent.affirmative | Obtains affirmative consent to the automatic-renewal terms | 20 jurisdictions |
signup.consent.not_prechecked | Consent checkboxes are not pre-checked | 20 jurisdictions |
Acknowledgment
| Check | What it verifies | Laws that require it |
|---|---|---|
confirmation.email.sent | Sends an acknowledgment after sign-up in a retainable form | 15 jurisdictions |
confirmation.email.terms | Acknowledgment restates the automatic-renewal terms | 15 jurisdictions |
confirmation.email.cancellation_instructions | Acknowledgment explains how to cancel | 15 jurisdictions |
confirmation.email.trial_terms | Acknowledgment explains how to cancel before the trial converts to paid | 12 jurisdictions |
Reminders
| Check | What it verifies | Laws that require it |
|---|---|---|
reminder.trial_ending | Sends a reminder before a free trial converts to a paid subscription | 13 jurisdictions |
reminder.annual_renewal | Sends a renewal reminder before long-term (e.g. annual) subscriptions renew | 22 jurisdictions |
reminder.annual_terms_notice | Sends an annual reminder of the subscription terms and how to cancel (incl. monthly/continuous plans) | 5 jurisdictions |
reminder.charge_notice | Sends a notice before (or promptly after) recurring charges where required | 2 jurisdictions |
reminder.price_change | Gives advance notice of price changes | 16 jurisdictions |
Cancellation
| Check | What it verifies | Laws that require it |
|---|---|---|
cancel.online_available | Consumers who signed up online can cancel online | 19 jurisdictions |
cancel.mechanism_findable | Cancellation option is easy to find (e.g. prominent link in account) | 25 jurisdictions |
cancel.flow_friction | Cancellation is not obstructed (no forced calls/chat, limited save offers, few steps) | 18 jurisdictions |
cancel.confirmation | Confirms the cancellation to the consumer | 12 jurisdictions |
terms.cancellation_policy_consistent | Terms of service do not contradict online cancellation (no "no cancellations" / cancel-by-phone-or-mail clauses) | 2 jurisdictions |
terms.refund_policy_consistent | Refund policy is consistent with refund / money-back claims made in marketing and checkout | 1 jurisdiction |
Billing settings
| Check | What it verifies | Laws that require it |
|---|---|---|
config.portal_cancel_enabled | Billing platform self-serve cancellation is enabled | 19 jurisdictions |
config.trial_reminder_enabled | Billing platform trial-ending reminder emails are enabled | 13 jurisdictions |
terms.renewal_terms_present | Terms of service state the automatic-renewal terms and how to cancel | 1 jurisdiction |
Severity, status and certificates
Each finding's severity is the strictest among the requirements that use the check: critical, high, medium or low. A site has one status: Compliant (optionally "· N live checks pending"), Needs a fix, Not set up yet, Not checked yet or Your call, counted in tasks (compliance.label, e.g. "2 fixes needed · 1 to set up"). What to do next is one to-do list: the compliance plan's ordered open tasks, the same in the dashboard, emails, MCP and the CLI. Findings are the evidence behind each task. There is no numeric score. A monitoring certificate uses a stricter tier: no critical or high check fails, no critical check is left at needs_review, and no high-severity obligation is without any evidence. A "live check pending" counts as compliant on your dashboard (its content passed), but not toward a certificate until it is observed live.
Reproducibility
Every result records rules_version, catalog_version and catalog_hash. Preflight checks are deterministic: the same input and the same as_of date give the same verdicts.
Checkbox is compliance software, not a law firm; nothing in these docs is legal advice (details). You remain solely responsible for your subscription program, and Checkbox takes on no legal liability for it (Terms). Checkbox is a System1 company; Trust center · Status. For AI agents: every page is available as Markdown at the same URL plus .md; the index is /llms.txt.