> ## 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.

# Get Accuracy

> Returns how the claims AI answers made about the product compare with its own site over a 30 or 90 day window: claim groups by outcome and the match rate, the previous window when it compares, the weekly trend, the per-platform split and check coverage. Each claim group has one outcome, the most severe any of its answers had: contradict, site_conflict, stale, not_on_site, match, then unjudged. A dismissed contradiction or site conflict counts as dismissed.



## OpenAPI

````yaml /openapi.json get /projects/{projectId}/accuracy
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}/accuracy:
    get:
      summary: Get Accuracy
      description: >-
        Returns how the claims AI answers made about the product compare with
        its own site over a 30 or 90 day window: claim groups by outcome and the
        match rate, the previous window when it compares, the weekly trend, the
        per-platform split and check coverage. Each claim group has one outcome,
        the most severe any of its answers had: contradict, site_conflict,
        stale, not_on_site, match, then unjudged. A dismissed contradiction or
        site conflict counts as dismissed.
      operationId: getAccuracy
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: window
          in: query
          schema:
            type: integer
            enum:
              - 30
              - 90
            default: 30
        - name: platform
          in: query
          schema:
            type: string
            minLength: 1
            maxLength: 100
        - name: intent
          in: query
          schema:
            type: string
            minLength: 1
            maxLength: 100
      responses:
        '200':
          description: Accuracy
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/AccuracyData'
                  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:
    AccuracyData:
      type: object
      properties:
        window:
          $ref: '#/components/schemas/AccuracyWindow'
        prior_window:
          type: object
          description: The window of the same length that ends the day before window.from.
          properties:
            from:
              type: string
              format: date
            to:
              type: string
              format: date
          required:
            - from
            - to
        totals:
          $ref: '#/components/schemas/AccuracyTotals'
        prior_status:
          type: string
          enum:
            - comparable
            - incomplete
            - method_changed
          description: >-
            incomplete when the series started after the previous window began
            or its checks are not finished; method_changed when the two windows
            asked different question versions. Only comparable returns
            prior_totals and prior_match_rate.
        prior_totals:
          anyOf:
            - $ref: '#/components/schemas/AccuracyTotals'
            - type: 'null'
        weekly:
          type: array
          description: Monday-UTC weeks clipped to the window.
          items:
            type: object
            properties:
              week_start:
                type: string
                format: date
              facts:
                type: integer
                minimum: 0
              contradict:
                type: integer
                minimum: 0
              match_rate:
                type:
                  - number
                  - 'null'
                minimum: 0
                maximum: 1
            required:
              - week_start
              - facts
              - contradict
              - match_rate
        platforms:
          type: array
          description: Per platform. A claim seen on several platforms counts on each.
          items:
            type: object
            properties:
              platform:
                type: string
              facts:
                type: integer
                minimum: 0
              match:
                type: integer
                minimum: 0
              contradict:
                type: integer
                minimum: 0
              site_conflict:
                type: integer
                minimum: 0
              not_on_site:
                type: integer
                minimum: 0
              match_rate:
                type:
                  - number
                  - 'null'
                minimum: 0
                maximum: 1
              prior_match_rate:
                type:
                  - number
                  - 'null'
                minimum: 0
                maximum: 1
            required:
              - platform
              - facts
              - match
              - contradict
              - site_conflict
              - not_on_site
              - match_rate
              - prior_match_rate
        coverage:
          type: object
          description: >-
            Answers eligible for a check and the sampled ones by status. Pending
            answers have not been checked yet.
          properties:
            eligible_answers:
              type: integer
              minimum: 0
            sampled:
              type: integer
              minimum: 0
            checked:
              type: integer
              minimum: 0
            no_claims:
              type: integer
              minimum: 0
            failed:
              type: integer
              minimum: 0
            pending:
              type: integer
              minimum: 0
          required:
            - eligible_answers
            - sampled
            - checked
            - no_claims
            - failed
            - pending
        series_started_on:
          type:
            - string
            - 'null'
          format: date
          description: The first day an answer was sampled.
        question_versions:
          type: array
          items:
            type: integer
      required:
        - window
        - prior_window
        - totals
        - prior_status
        - prior_totals
        - weekly
        - platforms
        - coverage
        - series_started_on
        - question_versions
    Meta:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        projectId:
          type: string
          format: uuid
    AccuracyWindow:
      type: object
      properties:
        days:
          type: integer
          enum:
            - 30
            - 90
        from:
          type: string
          format: date
        to:
          type: string
          format: date
      required:
        - days
        - from
        - to
    AccuracyTotals:
      type: object
      description: >-
        Claim groups by outcome. facts is the number with an outcome, and the
        outcomes sum to it.
      properties:
        facts:
          type: integer
          minimum: 0
        match:
          type: integer
          minimum: 0
        contradict:
          type: integer
          minimum: 0
        site_conflict:
          type: integer
          minimum: 0
        not_on_site:
          type: integer
          minimum: 0
        stale:
          type: integer
          minimum: 0
        unjudged:
          type: integer
          minimum: 0
        dismissed:
          type: integer
          minimum: 0
        match_rate:
          type:
            - number
            - 'null'
          minimum: 0
          maximum: 1
          description: match over facts. Null when there are no facts.
      required:
        - facts
        - match
        - contradict
        - site_conflict
        - not_on_site
        - stale
        - unjudged
        - dismissed
        - match_rate
    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.

````

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