> ## Documentation Index
> Fetch the complete documentation index at: https://testwebmcp.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a scan

> Returns `202` while the scan is queued or running, and `200` once it has succeeded or failed. Poll every few seconds.

Reports are public: anyone with the id can read one.



## OpenAPI

````yaml /openapi.json get /scan/{id}
openapi: 3.1.0
info:
  title: Test WebMCP API
  version: 1.0.0
  description: Scan public pages for WebMCP support. Free, no key. Limited per IP address.
servers:
  - url: https://testwebmcp.com/api/v1
security: []
paths:
  /scan/{id}:
    get:
      summary: Get a scan
      description: >-
        Returns `202` while the scan is queued or running, and `200` once it has
        succeeded or failed. Poll every few seconds.


        Reports are public: anyone with the id can read one.
      operationId: getScan
      parameters:
        - name: id
          in: path
          required: true
          description: The scan id from **Start a scan**.
          schema:
            type: string
          example: cmuelrzr40001o63kiv6vveim
      responses:
        '200':
          description: >-
            Finished. `status` is `succeeded` (with `score`, `grade` and
            `report`) or `failed` (with `error`).
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Scan'
        '202':
          description: Still queued or running. `report` is `null`.
          headers:
            Retry-After:
              description: Seconds until it's worth polling again.
              schema:
                type: integer
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Scan'
        '404':
          description: No scan with that id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  headers:
    X-RateLimit-Limit:
      description: Requests allowed in the current window.
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests left in the current window.
      schema:
        type: integer
    X-RateLimit-Reset:
      description: When the window resets, as a Unix timestamp.
      schema:
        type: integer
    Retry-After:
      description: Seconds to wait before retrying.
      schema:
        type: integer
  schemas:
    Scan:
      type: object
      required:
        - id
        - url
        - status
        - queuedAt
        - reportUrl
      properties:
        id:
          type: string
        url:
          type: string
        status:
          type: string
          enum:
            - queued
            - running
            - succeeded
            - failed
        queuedAt:
          type: string
          format: date-time
        startedAt:
          type:
            - string
            - 'null'
          format: date-time
        finishedAt:
          type:
            - string
            - 'null'
          format: date-time
        reportUrl:
          type: string
          description: The report on the website.
        score:
          type:
            - number
            - 'null'
          description: 0–100. Only when `succeeded`.
          example: 72
        grade:
          type:
            - string
            - 'null'
          description: >-
            `A+` (100, every check passes), `A` (85+), `B` (75+), `C` (65+), `D`
            (55+), `E` (35+) or `F`. Only when `succeeded`.
          example: C
        error:
          type: string
          description: Why the scan failed. Only when `failed`.
        report:
          oneOf:
            - $ref: '#/components/schemas/Report'
            - type: 'null'
          description: The full report. `null` until the scan succeeds.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: What went wrong.
    Report:
      type: object
      description: Everything the report page shows.
      properties:
        score:
          type: number
        grade:
          type: string
        summary:
          type: string
          description: One paragraph on what was found.
        url:
          type: string
        finalUrl:
          type: string
          description: The URL after redirects.
        scannedAt:
          type: string
          format: date-time
        registrationMode:
          type: string
          enum:
            - document-only
            - navigator-only
            - declarative-only
            - none
        categories:
          type: array
          description: >-
            `registration` (60 points), `quality` (15) and `platform` (25).
            Reports from scanner version 3 or earlier also have
            `discoverability`.
          items:
            $ref: '#/components/schemas/Category'
        tools:
          type: array
          description: Every tool the page registered.
          items:
            $ref: '#/components/schemas/Tool'
        declarativeForms:
          type: array
          description: Forms with a `toolname` attribute.
          items:
            type: object
        executions:
          type: array
          description: >-
            Each tool call: arguments sent, time taken, and a preview of the
            result.
          items:
            type: object
        meta:
          type: object
          description: HTTP status, page title, redirects, load time and total scan time.
    RateLimitError:
      type: object
      required:
        - error
        - retryAfterSeconds
        - resetAt
      properties:
        error:
          type: string
          example: >-
            The free limit is 1 scan per 24 hours per IP address, shared with
            the website.
        retryAfterSeconds:
          type: integer
          example: 86400
        retryAfterHuman:
          type: string
          example: 24 hours
        resetAt:
          type: string
          format: date-time
    Category:
      type: object
      properties:
        id:
          type: string
          enum:
            - registration
            - quality
            - discoverability
            - platform
        label:
          type: string
        score:
          type: number
        max:
          type: number
        checks:
          type: array
          items:
            $ref: '#/components/schemas/Check'
    Tool:
      type: object
      properties:
        name:
          type: string
        description:
          type:
            - string
            - 'null'
        inputSchema:
          description: The tool's JSON Schema.
        annotations:
          type:
            - object
            - 'null'
        executed:
          type: boolean
          description: >-
            Whether the scan called it. Only tools that look read-only are
            called.
        executionOutcome:
          type: string
          description: >-
            For example `working (412ms, 180 characters)`, `returned an error`,
            `found nothing for our test input` or `not tested: the name suggests
            it changes something`.
    Check:
      type: object
      properties:
        id:
          type: string
          description: >-
            `R1`–`R4`, `Q1`–`Q5` or `P1`–`P3`. Older reports may also have
            `D1`–`D5`.
        title:
          type: string
        status:
          type: string
          enum:
            - pass
            - partial
            - fail
            - skip
          description: '`skip` means not assessed.'
        score:
          type: number
        max:
          type: number
        observed:
          type: string
          description: What the scan found.
        why:
          type: string
          description: Why it matters. Only on checks that didn't pass.
        fix:
          type: object
          description: How to fix it. Only on checks that didn't pass.
          properties:
            text:
              type: string
            code:
              type: string
            lang:
              type: string
        evidence:
          type: array
          items:
            type: string
  responses:
    RateLimited:
      description: Rate limit reached. See **Limits**.
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitError'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.