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

# List scans

> List the account's website scans, newest first. Requires an
account-scoped API token.




## OpenAPI

````yaml get /scans
openapi: 3.1.0
info:
  title: CookieChimp API
  description: |
    API for CookieChimp.com.

    ## Request bodies

    Resource endpoints expect the resource wrapped under its own key, e.g.
    `{"category": {"name": "Analytics"}}` rather than a bare object.
    `PUT /password` wraps in `user`. Two endpoints take their body unwrapped:
    `POST /auth`, which takes `email` and `password` at the top level, and
    `POST /consent-banners/from-template`, which takes `jurisdiction_id` —
    a selector for which template to build from, not an attribute of the
    banner it creates.

    ## Response envelopes

    Listing endpoints — including `GET /groups` and `GET /accounts` — return
    `{"pagination": {...}, "data": [...]}`. `GET /banner-templates` is the
    exception: it returns `{"data": [...]}` with no pagination, being a fixed
    catalogue rather than a collection of the account's records.
    Most single-resource endpoints
    return `{"data": {...}}`; a single group or account is returned unwrapped.
    Resource-deletion endpoints return `{"message": "..."}`; `DELETE /auth`
    returns an empty object.
  version: 1.2.0
servers:
  - url: https://cookiechimp.com/api/v1
security:
  - authorization: []
paths:
  /scans:
    get:
      tags:
        - Scans
      summary: List scans
      description: |
        List the account's website scans, newest first. Requires an
        account-scoped API token.
      operationId: listScans
      parameters:
        - $ref: '#/components/parameters/account_id'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
      responses:
        '200':
          description: List of scans
          content:
            application/json:
              schema:
                type: object
                properties:
                  pagination:
                    $ref: '#/components/schemas/BasePagination'
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Scan'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AccountTokenRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  parameters:
    account_id:
      name: account_id
      in: query
      description: |
        Which account to act on, as the account's API id. Only meaningful for a
        user API key, which may reach several accounts — an account key already
        identifies exactly one and ignores this.

        Accepted by the endpoints that declare it; others act on the account the
        key resolves to on its own.

        Optional for reads, where it narrows the request to that account.
        Required for writes that declare it when the key can reach more than one
        account: without it the request would act on an account it picked rather
        than one you named, so it is refused with a `400`.
      required: false
      schema:
        type: string
    per_page:
      name: per_page
      in: query
      description: |
        Number of records to return per page. The effective range is 1–50; any
        value outside it is accepted but falls back to the default of 20.
      required: false
      schema:
        type: integer
        default: 20
    page:
      name: page
      in: query
      description: |
        Page number. Must be a positive integer; anything else returns a `400`.
        Requesting a page past the end returns the last page.
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1
  schemas:
    BasePagination:
      type: object
      properties:
        prev_url:
          type: string
          description: Path to get the previous page
        next_url:
          type: string
          description: Path to get the next page
        count:
          type: integer
          description: Total number of records across all pages
        page:
          type: integer
          description: Current page
        prev:
          type:
            - integer
            - 'null'
          description: Previous page number, or null on the first page
        next:
          type:
            - integer
            - 'null'
          description: Next page number, or null on the last page
    Scan:
      type: object
      properties:
        id:
          type: string
          readOnly: true
        status:
          type: string
          enum:
            - queued
            - in_progress
            - completed
            - failed
          readOnly: true
        starting_url:
          type: string
        domain:
          type: string
          readOnly: true
          description: Host derived from `starting_url`, without a `www.` prefix
        max_pages:
          type:
            - integer
            - 'null'
        crawl_subdomains:
          type: boolean
        response_code:
          type:
            - string
            - 'null'
          readOnly: true
        report:
          type: object
          readOnly: true
          description: |
            Only present once `status` is `completed`. Storage items found
            before and after consent, grouped by vendor and storage type.
          properties:
            before_consent:
              type: object
              additionalProperties: true
            after_consent:
              type: object
              additionalProperties: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
      example:
        id: scn1
        status: queued
        starting_url: https://example.com
        domain: example.com
        max_pages: 25
        crawl_subdomains: false
        response_code: null
        created_at: '2023-03-01T09:00:00Z'
        updated_at: '2023-03-01T09:00:00Z'
    Error:
      type: object
      description: |
        The standard error envelope, used for authentication, authorization,
        pagination and not-found errors.
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                type: integer
              message:
                type: string
      example:
        errors:
          - code: 401
            message: Invalid API Key
  responses:
    BadRequest:
      description: Invalid pagination parameter
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            errors:
              - code: 400
                message: Invalid page parameter
    AccountTokenRequired:
      description: |
        Missing or invalid API token, or a token that does not resolve to an
        account. Account-scoped endpoints accept an account token, or a user
        token whose user belongs to an account; partner tokens are rejected.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            errors:
              - code: 401
                message: API key must belong to an account
    RateLimited:
      description: |
        Too many requests. The general limit is 300 requests per 5 minutes per
        API token; the auth endpoints are throttled more tightly per IP.
      headers:
        Retry-After:
          description: Seconds until the current rate-limit window resets
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            errors:
              - code: 429
                message: Too many requests. Please retry later.
  securitySchemes:
    authorization:
      type: http
      scheme: bearer
      description: API token obtained from the login endpoint or the dashboard

````