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

# List recent answer fetches

> Returns up to 20 answer-fetch hourly records, newest hour first with descending id as the tie-break. The selected UTC calendar window includes today up to the server request time. Each item is one stored rollup record, not an individual request or an aggregate total. An empty list means no records were found; it does not prove sensor coverage. Unavailable reads return an error.



## OpenAPI

````yaml /openapi.json get /projects/{projectId}/traffic/recent-answer-fetches
openapi: 3.1.0
info:
  title: DevTune API
  version: 2.0.0
  description: >-
    API for programmatic access to your AI visibility data, webhook
    subscriptions, and automation workflows. Use this API to integrate DevTune
    data into CI/CD pipelines, BI tools, AI agents, and operational systems.
servers:
  - url: https://devtune.ai/api/v2
    description: Production
security:
  - bearerAuth: []
paths:
  /projects/{projectId}/traffic/recent-answer-fetches:
    get:
      summary: List recent answer fetches
      description: >-
        Returns up to 20 answer-fetch hourly records, newest hour first with
        descending id as the tie-break. The selected UTC calendar window
        includes today up to the server request time. Each item is one stored
        rollup record, not an individual request or an aggregate total. An empty
        list means no records were found; it does not prove sensor coverage.
        Unavailable reads return an error.
      operationId: listRecentAnswerFetches
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: windowDays
          in: query
          schema:
            type: integer
            default: 30
            enum:
              - 7
              - 30
              - 90
          description: >-
            Fixed UTC window in days, including today. Supported values: 7, 30,
            90. Defaults to 30.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 20
            default: 20
          description: Maximum hourly records returned. No whole-window total is computed.
      responses:
        '200':
          description: Recent answer-fetch hourly records
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/RecentAnswerFetchesData'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - meta
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
components:
  schemas:
    RecentAnswerFetchesData:
      type: object
      additionalProperties: false
      properties:
        items:
          type: array
          maxItems: 20
          items:
            type: object
            additionalProperties: false
            properties:
              id:
                type: string
                format: uuid
              hour_bucket:
                type: string
                format: date-time
                description: >-
                  Start of the UTC hour containing these requests. Not an
                  individual event timestamp.
              page_path:
                type: string
              domain:
                type:
                  - string
                  - 'null'
              llm_platform:
                type: string
              event_count:
                type: integer
                minimum: 1
                description: >-
                  Requests in this stored record only; not a full page/hour or
                  window total.
              verified_event_count:
                type: integer
                minimum: 0
                description: >-
                  Requests in this record whose peer address was confirmed
                  against the networks the claimed operator publishes.
              failed_event_count:
                type: integer
                minimum: 0
                description: >-
                  Requests in this record whose claimed operator was
                  contradicted by the peer address. Treat as spoofed.
              unknown_no_address_count:
                type: integer
                minimum: 0
                description: >-
                  Unknown requests for which the sensor supplied no peer
                  address.
              unknown_no_contract_count:
                type: integer
                minimum: 0
                description: >-
                  Unknown requests whose claimed operator publishes no supported
                  identity-checking contract.
              unknown_check_unavailable_count:
                type: integer
                minimum: 0
                description: >-
                  Unknown requests for which an available operator check could
                  not complete. The before-verification remainder is event_count
                  minus verified_event_count, failed_event_count, and all three
                  unknown-reason counts.
              status_class:
                type:
                  - string
                  - 'null'
            required:
              - id
              - hour_bucket
              - page_path
              - domain
              - llm_platform
              - event_count
              - verified_event_count
              - failed_event_count
              - unknown_no_address_count
              - unknown_no_contract_count
              - unknown_check_unavailable_count
              - status_class
        limit:
          type: integer
          minimum: 1
          maximum: 20
        timeBasis:
          type: string
          enum:
            - hour_bucket
        window:
          type: object
          additionalProperties: false
          properties:
            days:
              type: integer
              enum:
                - 7
                - 30
                - 90
            dateFrom:
              type: string
              format: date
            dateTo:
              type: string
              format: date
            before:
              type: string
              format: date-time
              description: Exclusive server-derived upper bound on hour_bucket.
          required:
            - days
            - dateFrom
            - dateTo
            - before
      required:
        - items
        - limit
        - timeBasis
        - window
    Meta:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        projectId:
          type: string
          format: uuid
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        status:
          type: integer
      required:
        - error
        - message
        - status
  responses:
    BadRequestError:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFoundError:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimitExceededError:
      description: Rate limit exceeded
      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/Error'
  headers:
    X-RateLimit-Limit:
      description: Maximum requests per window
      schema:
        type: integer
    X-RateLimit-Remaining:
      description: Requests remaining in current window
      schema:
        type: integer
    X-RateLimit-Reset:
      description: Unix timestamp when the window resets
      schema:
        type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key with dtk_live_ prefix. Obtain it from API Keys in the account
        sidebar. New keys start with all supported scopes selected for the
        chosen project, and you can narrow them to specific read/write scopes as
        needed.

````