CiteLadder AI Traffic API

The ai-traffic API from CiteLadder — 3 operation(s) for ai-traffic.

Operations 3

GET /v1/projects/{project_id}/ai-traffic/pages Get projects by project id ai traffic pages #
GET /v1/projects/{project_id}/ai-traffic/overview Get projects by project id ai traffic overview #
GET /v1/projects/{project_id}/ai-traffic/coverage Get projects by project id ai traffic coverage #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/citeladder-com:citeladder-com-ai-traffic-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

citeladder-com-ai-traffic-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CiteLadder AI Traffic API
  version: '1'
servers:
- url: https://api.citeladder.com
security:
- apiKey: []
tags:
- name: ai-traffic
paths:
  /v1/projects/{project_id}/ai-traffic/pages:
    get:
      tags:
      - ai-traffic
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiTrafficPages'
      parameters:
      - name: project_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
      - name: range
        in: query
        required: false
        schema:
          type:
          - string
          - 'null'
      - name: start_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
          - type: 'null'
      - name: end_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
          - type: 'null'
      - name: bot_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 64
          - type: 'null'
      - name: pattern
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 64
          - type: 'null'
      - name: folder
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 2048
          - type: 'null'
      - name: resource_class
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 24
          - type: 'null'
      - name: verification
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 128
          - type: 'null'
      - name: sort
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 32
          - type: 'null'
      - name: cursor
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 4096
          - type: 'null'
      - name: limit
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 1
            maximum: 100
          - type: 'null'
      x-citeladder-scope: read
      summary: Get projects by project id ai traffic pages
      x-summary-source: derived
      operationId: getV1ProjectsByProjectIdAiTrafficPages
      x-operation-id-source: derived
  /v1/projects/{project_id}/ai-traffic/overview:
    get:
      tags:
      - ai-traffic
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiTrafficOverview'
      parameters:
      - name: project_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
      - name: range
        in: query
        required: false
        schema:
          type:
          - string
          - 'null'
      - name: start_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
          - type: 'null'
      - name: end_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
          - type: 'null'
      - name: purpose
        in: query
        required: false
        schema:
          type:
          - string
          - 'null'
      - name: verification
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 128
          - type: 'null'
      - name: bot_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 64
          - type: 'null'
      - name: status
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 100
            maximum: 599
          - type: 'null'
      - name: folder
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 2048
          - type: 'null'
      - name: resource_class
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 24
          - type: 'null'
      - name: cursor
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 4096
          - type: 'null'
      - name: limit
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 1
            maximum: 100
          - type: 'null'
      x-citeladder-scope: read
      summary: Get projects by project id ai traffic overview
      x-summary-source: derived
      operationId: getV1ProjectsByProjectIdAiTrafficOverview
      x-operation-id-source: derived
  /v1/projects/{project_id}/ai-traffic/coverage:
    get:
      tags:
      - ai-traffic
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrawlCoverageResponse'
      parameters:
      - name: project_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
      - name: range
        in: query
        required: false
        schema:
          type:
          - string
          - 'null'
      - name: start_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
          - type: 'null'
      - name: end_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
            pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
          - type: 'null'
      - name: purpose
        in: query
        required: false
        schema:
          type:
          - string
          - 'null'
      - name: verification
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 128
          - type: 'null'
      - name: bot_id
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 64
          - type: 'null'
      - name: status
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 100
            maximum: 599
          - type: 'null'
      - name: folder
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 2048
          - type: 'null'
      - name: resource_class
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 24
          - type: 'null'
      - name: cursor
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            maxLength: 4096
          - type: 'null'
      - name: limit
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 1
            maximum: 100
          - type: 'null'
      x-citeladder-scope: read
      summary: Get projects by project id ai traffic coverage
      x-summary-source: derived
      operationId: getV1ProjectsByProjectIdAiTrafficCoverage
      x-operation-id-source: derived
components:
  schemas:
    CrawlSummary:
      type: object
      properties:
        unit:
          type: string
          const: requests
        identity_level:
          type: string
          const: path
        connection:
          type: string
          enum:
          - not_connected
          - awaiting_data
          - connected
        coverage:
          type: string
          enum:
          - complete
          - declared_complete
          - partial
          - unknown
        reporting_timezone:
          type: string
        last_processed_at:
          type:
          - string
          - 'null'
        requests:
          type:
          - number
          - 'null'
        pages:
          type:
          - number
          - 'null'
        active_bots:
          type:
          - number
          - 'null'
        error_share:
          type:
          - number
          - 'null'
        failed_verification_requests:
          type:
          - number
          - 'null'
        series:
          type: array
          items:
            type: object
            properties:
              date:
                type: string
              purpose:
                anyOf:
                - $ref: '#/components/schemas/CrawlerPurpose'
                - type: string
                  const: unknown
              requests:
                type: number
            required:
            - date
            - purpose
            - requests
            additionalProperties: false
      required:
      - unit
      - identity_level
      - connection
      - coverage
      - reporting_timezone
      - last_processed_at
      - requests
      - pages
      - active_bots
      - error_share
      - failed_verification_requests
      - series
      additionalProperties: false
    AiReferralSourceRow:
      type: object
      properties:
        ai_source:
          type: string
          enum:
          - chatgpt
          - gemini
          - claude
          - perplexity
          - copilot
          - google_ai_overview
        sessions:
          type: integer
          minimum: 0
          maximum: 9007199254740991
        share:
          anyOf:
          - type: number
            minimum: 0
            maximum: 1
          - type: 'null'
      required:
      - ai_source
      - sessions
      - share
      additionalProperties: false
    CrawlCoverageResponse:
      type: object
      properties:
        items:
          type: array
          items:
            type: object
            properties:
              source_id:
                type: string
                format: uuid
                pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
              reporting_date:
                type: string
              reporting_timezone:
                type: string
              coverage:
                type: string
                enum:
                - complete
                - declared_complete
                - partial
                - unknown
              reason:
                type: string
              batch_count:
                type: number
              heartbeat_count:
                type: number
              max_gap_minutes:
                type: number
            required:
            - source_id
            - reporting_date
            - reporting_timezone
            - coverage
            - reason
            - batch_count
            - heartbeat_count
            - max_gap_minutes
            additionalProperties: false
        sources:
          type: array
          items:
            $ref: '#/components/schemas/CrawlSource'
        next_cursor:
          type:
          - string
          - 'null'
      required:
      - items
      - sources
      - next_cursor
      additionalProperties: false
    CrawlVerificationFailure:
      type: string
      enum:
      - label_mismatch
      - push_subscription
      - ack_deadline
      - permission_denied
      - not_found
      - unavailable
    TrackedCitations:
      oneOf:
      - type: object
        properties:
          unit:
            type: string
            const: tracked_citations
          label:
            type: string
          state:
            type: string
            const: measured
          count:
            type: integer
            minimum: 0
            maximum: 9007199254740991
          sources:
            minItems: 1
            type: array
            items:
              type: object
              properties:
                audit_id:
                  type: string
                analyzer_version:
                  type: string
              required:
              - audit_id
              - analyzer_version
              additionalProperties: false
        required:
        - unit
        - label
        - state
        - count
        - sources
        additionalProperties: false
      - type: object
        properties:
          unit:
            type: string
            const: tracked_citations
          label:
            type: string
          state:
            type: string
            const: not_available
          reason:
            type: string
            enum:
            - no_completed_run
            - not_computed
          count:
            type: 'null'
        required:
        - unit
        - label
        - state
        - reason
        - count
        additionalProperties: false
    CrawlerPurpose:
      type: string
      enum:
      - ai_training
      - ai_search
      - ai_user_fetch
      - search_engine
      - other
    AiTrafficOverview:
      type: object
      properties:
        crawl:
          $ref: '#/components/schemas/CrawlSummary'
        referrals:
          $ref: '#/components/schemas/AiReferrals'
        citations:
          $ref: '#/components/schemas/TrackedCitations'
      required:
      - crawl
      - referrals
      - citations
      additionalProperties: false
    CrawlStallReason:
      type: string
      enum:
      - no_receipts
      - not_in_plan
      - oversize
      - verification_failed
    AiTrafficPages:
      type: object
      properties:
        window_start:
          type: string
        window_end:
          type: string
        items:
          type: array
          items:
            type: object
            properties:
              url_hash:
                type: string
              canonical_url:
                type: string
              display_path:
                type: string
              folder:
                type: string
              resource_class:
                type: string
              crawl:
                $ref: '#/components/schemas/TrafficLeg'
              referrals:
                $ref: '#/components/schemas/TrafficLeg'
              citations:
                $ref: '#/components/schemas/TrafficLeg'
              findings:
                $ref: '#/components/schemas/TrafficLeg'
              key_events:
                type:
                - number
                - 'null'
              last_crawl:
                type:
                - string
                - 'null'
              errors_4xx:
                type:
                - number
                - 'null'
              errors_5xx:
                type:
                - number
                - 'null'
            required:
            - url_hash
            - canonical_url
            - display_path
            - folder
            - resource_class
            - crawl
            - referrals
            - citations
            - findings
            - key_events
            - last_crawl
            - errors_4xx
            - errors_5xx
            additionalProperties: false
        next_cursor:
          type:
          - string
          - 'null'
        observed_crawl_coverage:
          type: object
          properties:
            state:
              type: string
            share:
              type:
              - number
              - 'null'
            known_pages:
              type: number
            observed_pages:
              type:
              - number
              - 'null'
            inventory_date:
              type:
              - string
              - 'null'
            inventory_complete:
              type: boolean
            sample_mode:
              type: boolean
            label:
              type: string
              const: Observed crawl coverage
          required:
          - state
          - share
          - known_pages
          - observed_pages
          - inventory_date
          - inventory_complete
          - sample_mode
          - label
          additionalProperties: false
      required:
      - window_start
      - window_end
      - items
      - next_cursor
      - observed_crawl_coverage
      additionalProperties: false
    MetricSeries:
      type: array
      items:
        type: object
        properties:
          date:
            type: string
          value:
            type:
            - number
            - 'null'
        required:
        - date
        - value
        additionalProperties: false
    SnapshotGranularity:
      type: string
      enum:
      - day
      - week
      - month
    CrawlSource:
      type: object
      properties:
        id:
          type: string
          format: uuid
          pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        kind:
          type: string
          enum:
          - webhook
          - pull
          - upload
        setup:
          type: string
          enum:
          - cloudflare_worker
          - cloudflare_logpush
          - aws_firehose
          - gcp_pubsub_pull
          - custom
          - upload
        preset:
          type: string
        buffer_interval_seconds:
          type:
          - number
          - 'null'
        format:
          type: string
        collection_point:
          type: string
        sampling:
          oneOf:
          - type: object
            properties:
              kind:
                type: string
                const: none
            required:
            - kind
            additionalProperties: false
          - type: object
            properties:
              kind:
                type: string
                const: sampled
              rate:
                type: number
                exclusiveMinimum: 0
                maximum: 1
            required:
            - kind
            - rate
            additionalProperties: false
          - type: object
            properties:
              kind:
                type: string
                const: filtered
              description:
                type: string
            required:
            - kind
            - description
            additionalProperties: false
        origin:
          type: string
        host:
          type: string
        status:
          type: string
          enum:
          - active
          - revoked
        state:
          type: string
          enum:
          - active
          - awaiting_verification
          - stalled
          - revoked
        stall_reason:
          anyOf:
          - $ref: '#/components/schemas/CrawlStallReason'
          - type: 'null'
        stalled_at:
          type:
          - string
          - 'null'
        pull:
          anyOf:
          - type: object
            properties:
              subscription:
                type: string
              verification_nonce:
                type: string
              verified_at:
                type:
                - string
                - 'null'
              verification_checked_at:
                type:
                - string
                - 'null'
              verification_failure:
                anyOf:
                - $ref: '#/components/schemas/CrawlVerificationFailure'
                - type: 'null'
              filter_catalog_version:
                type: string
              filter_confirmed_at:
                type:
                - string
                - 'null'
              filter_current:
                type: boolean
              declared_sample_rate:
                type: number
              last_pull_at:
                type:
                - string
                - 'null'
              last_drained_at:
                type:
                - string
                - 'null'
            required:
            - subscription
            - verification_nonce
            - verified_at
            - verification_checked_at
            - verification_failure
            - filter_catalog_version
            - filter_confirmed_at
            - filter_current
            - declared_sample_rate
            - last_pull_at
            - last_drained_at
            additionalProperties: false
          - type: 'null'
        token_prefix:
          type:
          - string
          - 'null'
        connection:
          type: string
          enum:
          - not_connected
          - awaiting_data
          - connected
        last_accepted_batch:
          type:
          - string
          - 'null'
        last_processed_at:
          type:
          - string
          - 'null'
        rejected_lines:
          type: number
        overlapping_lines:
          type: number
        unsupported_uploads:
          type: number
        unsupported_batches:
          type: number
      required:
      - id
      - kind
      - setup
      - preset
      - buffer_interval_seconds
      - format
      - collection_point
      - sampling
      - origin
      - host
      - status
      - state
      - stall_reason
      - stalled_at
      - pull
      - token_prefix
      - connection
      - last_accepted_batch
      - last_processed_at
      - rejected_lines
      - overlapping_lines
      - unsupported_uploads
      - unsupported_batches
      additionalProperties: false
    AiReferrals:
      type: object
      properties:
        project_id:
          type: string
          format: uuid
          pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
        window_start:
          type: string
        window_end:
          type: string
        granularity:
          $ref: '#/components/schemas/SnapshotGranularity'
        referral_volume:
          $ref: '#/components/schemas/MetricSeries'
        referral_share:
          $ref: '#/components/schemas/MetricSeries'
        sources:
          type: array
          items:
            $ref: '#/components/schemas/AiReferralSourceRow'
        analyzer_version:
          type: string
        formula_version:
          type: string
        scope:
          default: property-wide
          type: string
          const: property-wide
        reporting_timezone:
          default: null
          type:
          - string
          - 'null'
        currency_code:
          default: null
          type:
          - string
          - 'null'
        analytics_quality:
          default: {}
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: array
            items:
              type: object
              properties:
                day:
                  type: string
                revision:
                  type:
                  - number
                  - 'null'
                flags:
                  type: array
                  items:
                    type: string
                artifact_ids:
                  type: array
                  items:
                    type: string
                reporting_timezone:
                  type:
                  - string
                  - 'null'
                currency_code:
                  type:
                  - string
                  - 'null'
                excluded_hosts:
                  type: number
              required:
              - day
              - revision
              - flags
              - artifact_ids
              - reporting_timezone
              - currency_code
              - excluded_hosts
              additionalProperties: false
        unattributed_landing:
          default: null
          anyOf:
          - type: number
            minimum: 0
          - type: 'null'
        source_measures:
          default: []
          type: array
          items:
            type: object
            properties:
              ai_source:
                $ref: '#/components/schemas/AiSource'
              sessions:
                type:
                - number
                - 'null'
              key_events:
                type:
                - number
                - 'null'
              engagement_rate:
                type:
                - number
                - 'null'
              transactions:
                type:
                - number
                - 'null'
              purchase_revenue:
                type:
                - number
                - 'null'
            required:
            - ai_source
            - sessions
            - key_events
            - engagement_rate
            - transactions
            - purchase_revenue
            additionalProperties: false
        channel_comparison:
          default: []
          type: array
          items:
            type: object
            properties:
              channel:
                type: string
              sessions:
                type:
                - number
                - 'null'
              key_events:
                type:
                - number
                - 'null'
              engagement_rate:
                type:
                - number
                - 'null'
            required:
            - channel
            - sessions
            - key_events
            - engagement_rate
            additionalProperties: false
        landing_pages:
          default: []
          type: array
          items:
            type: object
            properties:
              url_hash:
                type: string
              canonical_url:
                type: string
              ai_source:
                $ref: '#/components/schemas/AiSource'
              sessions:
                type:
                - number
                - 'null'
              key_events:
                type:
                - number
                - 'null'
              analytics_quality:
                type: array
                items:
                  type: string
            required:
            - url_hash
            - canonical_url
            - ai_source
            - sessions
            - key_events
            - analytics_quality
            additionalProperties: false
      required:
      - project_id
      - window_start
      - window_end
      - granularity
      - referral_volume
      - referral_share
      - sources
      - analyzer_version
      - formula_version
      - scope
      - reporting_timezone
      - currency_code
      - analytics_quality
      - unattributed_landing
      - source_measures
      - channel_comparison
      - landing_pages
      additionalProperties: false
    AiSource:
      type: string
      enum:
      - chatgpt
      - gemini
      - claude
      - perplexity
      - copilot
      - google_ai_overview
      - other
    TrafficLeg:
      type: object
      properties:
        state:
          type: string
          enum:
          - not_connected
          - unknown
          - unavailable
          - zero
          - value
          - non_comparable
          - flagged
        value:
          type:
          - number
          - 'null'
        coverage:
          type:
          - string
          - 'null'
        reason:
          type:
          - string
          - 'null'
      required:
      - state
      - value
      - coverage
      - reason
      additionalProperties: false
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'An API key created in Settings → API keys, sent as `Authorization: Bearer cl_live_…`.'