---
title: "Start scans"
method: POST
path: "/api/v1/inspector/scans/start"
tags: ["inspector"]
---

# Start scans

`POST /api/v1/inspector/scans/start`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/inspector/scans/start`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Start a durable AI-readiness scan of one public website URL and of up to five of its competitors' sites beside it, each its own Inspector scan billed as one. Inspector chooses the competitors: those the organization's business profile for the site names (none when it names none). Poll inspector_scans_get_v2 with the returned scanId, or platform_runs_get_v2 with runId, then read inspector_scan_results_get_v2 once it is complete; the scan's report lists its competitors' scores.

## Headers

- `Point11-Organization` string, uuid
- `Idempotency-Key` string, uuid, required

## Request body

- InspectorScansStartRequest
  - `url` string, uri, required: Full URL to scan (e.g. https://example.com)

## Response `202`

Accepted: the durable run started. Follow it with `GET /api/v1/platform/runs-v2/{id}`.

- InspectorScansStartResponse
  - `runId` string, required: Billing run id; poll with platform_runs_get_v2
  - `status` 'pending' | 'complete', required: pending = the scan is running; complete = this operation already finished
  - `scanId` string, required
  - `competitors` object[], required: The competitors scanned beside the site, up to 5: those the organization's business profile for the site names; empty when it names none
    - `url` string, required
    - `scanId` string, nullable, required: The competitor's scan, which its scan's report lists; null when refused
    - `refusal` string, nullable, required: Why the competitor's scan could not start (its URL safety check, a daily limit, Billing); else null

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `402`: Billing refused the write: the code names the reason and `details.reason` carries it.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

[API](https://skmtc.dev/point11/apis/point11-api.md) · [All operations](https://skmtc.dev/point11/apis/point11-api/llms.txt) · [OpenAPI document](https://skmtc.dev/point11/apis/point11-api/revisions/36a84c7aca11?raw)
