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

> Returns one contradiction row over the same window and filters as getAccuracy: the site sentence and its page, the row’s counts, platforms and open action, and every AI wording that contradicts it, active first, with its latest contradicting answer and the decision that dismissed it. A row with no wording in the window returns no wordings. A malformed key returns 400.



## OpenAPI

````yaml /openapi.json get /projects/{projectId}/accuracy/contradictions/{sentenceKey}
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/contradictions/{sentenceKey}:
    get:
      summary: Get Accuracy contradiction
      description: >-
        Returns one contradiction row over the same window and filters as
        getAccuracy: the site sentence and its page, the row’s counts, platforms
        and open action, and every AI wording that contradicts it, active first,
        with its latest contradicting answer and the decision that dismissed it.
        A row with no wording in the window returns no wordings. A malformed key
        returns 400.
      operationId: getAccuracyContradiction
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: sentenceKey
          in: path
          required: true
          description: >-
            sentence_key from listAccuracyContradictions, or from a
            contradiction in listAccuracyClaims or getAccuracyClaim.
          schema:
            type: string
            pattern: ^[0-9a-f]{32}$
        - 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 contradiction
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/AccuracySentenceData'
                  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:
    AccuracySentenceData:
      type: object
      properties:
        window:
          $ref: '#/components/schemas/AccuracyWindow'
        sentence_key:
          type: string
          pattern: ^[0-9a-f]{32}$
        site_page:
          anyOf:
            - $ref: '#/components/schemas/AccuracySitePage'
            - type: 'null'
          description: >-
            Null, with no wordings, when the row has none in the window and
            filters.
        other_page:
          anyOf:
            - $ref: '#/components/schemas/AccuracyOtherPage'
            - type: 'null'
        wording_count:
          type: integer
          minimum: 0
        dismissed_wording_count:
          type: integer
          minimum: 0
        answers:
          type: integer
          minimum: 0
        platforms:
          type: array
          items:
            type: string
        last_seen_on:
          type:
            - string
            - 'null'
          format: date
        wordings:
          type: array
          description: Every AI wording in the row, active first, then by most answers.
          items:
            type: object
            properties:
              group_id:
                type: string
                format: uuid
              claim_text:
                type: string
              outcome:
                type: string
                enum:
                  - contradict
                  - dismissed
              answers:
                type: integer
                minimum: 0
              platforms:
                type: array
                items:
                  type: string
              last_seen_on:
                type: string
                format: date
              execution_id:
                type:
                  - string
                  - 'null'
                format: uuid
              claim_index:
                type:
                  - integer
                  - 'null'
                minimum: 0
              platform:
                type:
                  - string
                  - 'null'
              logical_run_date:
                type:
                  - string
                  - 'null'
                format: date
              prompt_id:
                type:
                  - string
                  - 'null'
                format: uuid
              prompt_text:
                type:
                  - string
                  - 'null'
              excerpt:
                type:
                  - string
                  - 'null'
              recheck_version:
                type:
                  - integer
                  - 'null'
              decision:
                anyOf:
                  - $ref: '#/components/schemas/AccuracyDecision'
                  - type: 'null'
                description: The decision that dismissed a dismissed wording.
            required:
              - group_id
              - claim_text
              - outcome
              - answers
              - platforms
              - last_seen_on
              - execution_id
              - claim_index
              - platform
              - logical_run_date
              - prompt_id
              - prompt_text
              - excerpt
              - recheck_version
              - decision
        action:
          anyOf:
            - $ref: '#/components/schemas/AccuracyOpenAction'
            - type: 'null'
      required:
        - window
        - sentence_key
        - site_page
        - other_page
        - wording_count
        - dismissed_wording_count
        - answers
        - platforms
        - last_seen_on
        - wordings
        - action
    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
    AccuracySitePage:
      type: object
      description: The page on the brand’s site the claim was judged against.
      properties:
        url:
          type:
            - string
            - 'null'
        quote:
          type:
            - string
            - 'null'
        page_type:
          type:
            - string
            - 'null'
        crawled_at:
          type:
            - string
            - 'null'
          format: date-time
        locked:
          type: boolean
          description: The customer has marked the page off-limits for suggested changes.
      required:
        - url
        - quote
        - page_type
        - crawled_at
        - locked
    AccuracyOtherPage:
      type: object
      description: >-
        Another page that states the claim: a conflicting_page makes a site
        conflict; a set_aside_page is a blog post or changelog that leaves the
        claim a contradiction.
      properties:
        url:
          type:
            - string
            - 'null'
        quote:
          type:
            - string
            - 'null'
        page_type:
          type:
            - string
            - 'null'
        role:
          type:
            - string
            - 'null'
          enum:
            - conflicting_page
            - set_aside_page
            - null
        locked:
          type: boolean
      required:
        - url
        - quote
        - page_type
        - role
        - locked
    AccuracyDecision:
      type: object
      description: >-
        A decision the team made on a claim. Claim lists and the claim detail
        carry the active one.
      properties:
        id:
          type: string
          format: uuid
        kind:
          type: string
          enum:
            - contradiction
            - site_conflict
            - not_on_site
        choice:
          type: string
          enum:
            - not_a_contradiction
            - both_right
            - site
            - other
            - 'true'
            - true_no_action
            - 'false'
          description: >-
            For a not-on-site claim: true when the team marked it true and
            created an "Add to your site" action, true_no_action when they
            marked it true without an action, false when they marked it false.
        chosen_url:
          type:
            - string
            - 'null'
          description: The page a site-conflict answer kept. Null for other choices.
        changed_url:
          type:
            - string
            - 'null'
          description: >-
            The page a site-conflict answer changes to agree with chosen_url.
            Null for other choices.
        action_id:
          type:
            - string
            - 'null'
          format: uuid
        action_role:
          type:
            - string
            - 'null'
          enum:
            - created
            - attached
            - null
          description: >-
            Where the decision stands on its action now: created when the action
            is built from this decision, attached when the decision is added to
            an action built from another claim, null when it has none. Undoing
            the decision an action was built from rebuilds it from the next
            claim on it, whose role becomes created.
        no_action_reason:
          type:
            - string
            - 'null'
          enum:
            - dismissed
            - both_right
            - changed_page_locked
            - nothing_to_add
            - null
          description: >-
            Why the decision has no action: dismissed for a contradiction marked
            not a contradiction, both_right for a site conflict where both pages
            are right, changed_page_locked when the page to change is locked,
            nothing_to_add for a not-on-site claim marked true without an
            action. Null when the decision calls for an action.
        label: {}
        decided_by:
          type:
            - string
            - 'null'
          format: uuid
        decided_at:
          type: string
          format: date-time
        undo_available:
          type: boolean
          description: >-
            False once the decision is undone, or when the action it created is
            live.
      required:
        - id
        - kind
        - choice
        - chosen_url
        - changed_url
        - action_id
        - action_role
        - no_action_reason
        - label
        - decided_by
        - decided_at
        - undo_available
    AccuracyOpenAction:
      type: object
      description: The open action for the claim, created from Accuracy or attached to.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - open
            - in_progress
            - blocked
        loop_state:
          type:
            - string
            - 'null'
        created_by:
          type:
            - string
            - 'null'
          format: uuid
        created_at:
          type: string
          format: date-time
      required:
        - id
        - status
        - loop_state
        - created_by
        - created_at
    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.