CheckboxDocs

Scans API

Synthetic-shopper runs: Checkbox visits the checkout from each state and device, completes a sign-up when configured, receives the emails and tries to cancel online.

OperationEndpoint
Run a scanPOST /v1/sites/{site}/scans
List scansGET /v1/scans
Retrieve a scanGET /v1/scans/{scan}

The Scan object

Most recent scan (only with expand[]=latest_scan).

FieldTypeDescription
idstringUnique identifier of the scan (scan_…).
objectenumString representing the object's type. Always "scan".
livemodebooleantrue for live-mode objects, false for test mode (ck_test_ keys act on an isolated sandbox).
sitestringThe scanned site.
statusenumqueued → running → completed | failed. One of queued, running, completed, failed.
triggerenumWhat started the scan. One of manual, scheduled, page_changed, api.
regionsarray of enumStates the synthetic shopper visited from (empty for evaluation-only runs).
errorstring | nullWhy the scan failed.
warningsarray of stringsPartial failures of a scan that still produced results.
evaluationstring | nullThe evaluation this scan produced (null until evaluated).
scorenumber | nullScore of that evaluation (0-100, one decimal place).
insurableboolean | nullInsurable flag of that evaluation.
startedinteger | nullWhen the scan started. Unix timestamp in seconds.
finishedinteger | nullWhen the scan finished. Unix timestamp in seconds.
createdintegerWhen the scan was queued. Unix timestamp in seconds.

Run a scan

POST /v1/sites/{site}/scans

Queues a synthetic-shopper scan of the site. Poll retrieveScan (or wait for the scan.completed webhook); a scan takes 1-3 minutes. When it completes, the evaluation and findings are updated. In live mode the account must be activated.

Scope scans:write · Idempotent (send Idempotency-Key) · Live mode needs activation · Operation createScan

SDK: checkbox.scans.create() (Node) · checkbox.scans.create() (Python). MCP / agents: operation createScan.

Parameters

ParameterInTypeDescription
site requiredpathstringUnique identifier of the site (site_…).

Body

FieldTypeDescription
regionsarray of enumStates to scan from (default: the site configuration).

Returns

Returns a Scan object.

In live mode before activation: 403 account_not_activated with next_action.operation_id: "createDomainVerification".

Errors use the standard envelope with a stable code and, where useful, next_action.

curl https://app.checkbox.site/v1/sites/site_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b/scans \
  -u "$CHECKBOX_SECRET_KEY:" \
  -H "Content-Type: application/json" \
  -d '{}'
Response
{
  "id": "scan_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "object": "scan",
  "livemode": false,
  "site": "site_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "status": "completed",
  "trigger": "api",
  "regions": [
    "US-CA",
    "US-NY"
  ],
  "error": null,
  "warnings": [],
  "evaluation": "eval_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "score": 82,
  "insurable": false,
  "started": 1793318400,
  "finished": 1793318400,
  "created": 1793318400
}

List scans

GET /v1/scans

Scans newest first, optionally for one site.

Scope scans:read · Operation listScans

SDK: checkbox.scans.list() (Node) · checkbox.scans.list() (Python). MCP / agents: operation listScans.

Parameters

ParameterInTypeDescription
limitqueryintegerNumber of objects to return, 1-100 (default 10).
starting_afterquerystringCursor: an object id; returns the objects after it (older).
ending_beforequerystringCursor: an object id; returns the objects before it (newer).
sitequerystringOnly objects of this site (site_…).

Returns

Returns a list ({ object: "list", data, has_more, url }) of Scan objects.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl -G https://app.checkbox.site/v1/scans \
  -u "$CHECKBOX_SECRET_KEY:" \
  -d limit=3
Response
{
  "object": "list",
  "data": [
    {
      "id": "scan_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
      "object": "scan",
      "livemode": false,
      "site": "site_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
      "status": "completed",
      "trigger": "api",
      "regions": [
        "US-CA"
      ],
      "error": null,
      "warnings": [],
      "evaluation": "eval_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
      "score": 82,
      "insurable": false,
      "started": 1793318400,
      "finished": 1793318400,
      "created": 1793318400
    }
  ],
  "has_more": false,
  "url": "/v1/sites"
}

Retrieve a scan

GET /v1/scans/{scan}

Returns a scan. When status is completed, evaluation names the verdict (retrieveEvaluation).

Scope scans:read · Operation retrieveScan

SDK: checkbox.scans.retrieve() (Node) · checkbox.scans.retrieve() (Python). MCP / agents: operation retrieveScan.

Parameters

ParameterInTypeDescription
scan requiredpathstringUnique identifier of the scan (scan_…).

Returns

Returns a Scan object.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl https://app.checkbox.site/v1/scans/scan_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b \
  -u "$CHECKBOX_SECRET_KEY:"
Response
{
  "id": "scan_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "object": "scan",
  "livemode": false,
  "site": "site_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "status": "completed",
  "trigger": "api",
  "regions": [
    "US-CA",
    "US-NY"
  ],
  "error": null,
  "warnings": [],
  "evaluation": "eval_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "score": 82,
  "insurable": false,
  "started": 1793318400,
  "finished": 1793318400,
  "created": 1793318400
}

Checkbox is compliance software, not a law firm; nothing in these docs is legal advice (details). For AI agents: every page is available as Markdown at the same URL plus .md; the index is /llms.txt.