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

# Exporter les réponses notées

> Exportez les réponses notées en JSON ou CSV, des plus récentes aux plus anciennes.



## OpenAPI

````yaml GET /v1/monitors/{id}/results
openapi: 3.1.0
info:
  title: querying.ai
  description: >-
    One API for every AI answer engine. Every task is asynchronous: submit, then
    collect the result via webhook or polling.
  version: 1.0.0
servers:
  - url: https://api.querying.ai
    description: Production
security:
  - bearerAuth: []
paths:
  /v1/monitors/{id}/results:
    get:
      tags:
        - Monitors
      summary: Export scored answers
      description: >-
        The scored rows themselves, newest first, for a warehouse load or a
        spreadsheet. since and until are half-open and both accept a bare
        YYYY-MM-DD (read as 00:00:00Z) for compatibility with the original
        export; every filter is applied server-side. Pagination is a keyset
        cursor over (ranAt, id) with microsecond precision, so equal timestamps
        cannot drop or repeat a row: keep the cursor's first response's since
        and until fixed and follow nextCursor until it is null. includeEvidence
        adds the retained answer text, the citations and the scoring context,
        and lowers the page size bound because a page of evidence is far heavier
        than a page of scores.
      operationId: listMonitorResults
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: since
          in: query
          required: false
          schema:
            type: string
          description: >-
            ISO instant or legacy YYYY-MM-DD (00:00:00Z). Default: 30 days ago.
            Inclusive.
        - name: until
          in: query
          required: false
          schema:
            type: string
          description: >-
            ISO instant or legacy YYYY-MM-DD (00:00:00Z). Default: now.
            Exclusive; must be after since.
        - name: engine
          in: query
          required: false
          schema:
            type: string
        - name: prompt
          in: query
          required: false
          schema:
            type: string
            maxLength: 2000
          description: Exact prompt.
        - name: mentioned
          in: query
          required: false
          schema:
            type: boolean
          description: >-
            true keeps answers naming the brand; false keeps only the misses
            (the competitive-gap rows).
        - name: cited
          in: query
          required: false
          schema:
            type: boolean
          description: true keeps answers citing a registered domain.
        - name: competitor
          in: query
          required: false
          schema:
            type: string
            maxLength: 80
          description: >-
            Keeps only answers whose stored competitorHits contain exactly this
            name (case-sensitive). It is matched against the stored hits, not
            checked against the monitor's current competitors, so a competitor
            removed since still filters its old answers and a misspelled name
            returns no rows rather than a 400.
        - name: includeEvidence
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Add answerText, sources and scoringContext to every row, and lower
            the page-size bound to 100.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 10000
            default: 10000
          description: >-
            Default 10000 (max 10000) without evidence; default and maximum 100
            when includeEvidence is true.
        - name: format
          in: query
          required: false
          schema:
            type: string
            enum:
              - json
              - csv
            default: json
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            The previous response's nextCursor (JSON) or x-next-cursor header
            (CSV), unchanged.
      responses:
        '200':
          description: A page of scored rows, as JSON or CSV.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorResultsResponse'
            text/csv:
              schema:
                type: string
              example: >-
                ran_at,monitor,engine,prompt,mentioned,cited,position,competitors,task_id

                2026-09-22T03:00:00.123456Z,Earbud brand tracking,CHATGPT,best
                wireless earbuds for
                commuting,true,false,412,Sony,0f4b6f1c-4c1e-4a4c-9d5a-2f0a5b0b1a2c
          headers:
            X-Next-Cursor:
              schema:
                type: string
              description: >-
                CSV only: the cursor for the next page, empty when the page is
                the last and nothing was truncated.
            X-Result-Truncated:
              schema:
                type: string
                enum:
                  - 'true'
                  - 'false'
              description: 'CSV only: whether more rows match than this page returned.'
            X-Result-Since:
              schema:
                type: string
                format: date-time
              description: 'CSV only: the resolved inclusive window start.'
            X-Result-Until:
              schema:
                type: string
                format: date-time
              description: 'CSV only: the resolved exclusive window end.'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    MonitorResultsResponse:
      type: object
      properties:
        success:
          type: boolean
          const: true
        data:
          type: object
          properties:
            monitor:
              type: object
              properties:
                id:
                  type: string
                name:
                  type: string
            since:
              type: string
              format: date-time
            until:
              type: string
              format: date-time
            filters:
              type: object
              description: >-
                The filters that were applied, echoed back with null for the
                ones that were not.
              properties:
                engine:
                  type:
                    - string
                    - 'null'
                prompt:
                  type:
                    - string
                    - 'null'
                mentioned:
                  type:
                    - boolean
                    - 'null'
                cited:
                  type:
                    - boolean
                    - 'null'
                competitor:
                  type:
                    - string
                    - 'null'
            truncated:
              type: boolean
              description: True when more rows matched than this page returned.
            nextCursor:
              type:
                - string
                - 'null'
              description: >-
                Pass back unchanged as cursor with the SAME since and until.
                Changing the window mid-pagination can skip or repeat rows.
            results:
              type: array
              items:
                $ref: '#/components/schemas/MonitorResultRow'
    MonitorResultRow:
      type: object
      description: >-
        One scored answer. position is the character offset of the earliest
        alias hit inside the answer text - a prominence proxy, not a rank, and
        null when the brand was absent (which position 0 would otherwise spell).
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Scored-row id. The pagination cursor is built from it, so do not
            sort by it as if it were time.
        taskId:
          type: string
        engine:
          $ref: '#/components/schemas/MonitorEngine'
        prompt:
          type: string
        mentioned:
          type: boolean
        cited:
          type: boolean
        position:
          type:
            - integer
            - 'null'
        ranAt:
          type: string
          description: >-
            ISO instant with microsecond precision, in UTC. Used verbatim in the
            cursor.
        competitorHits:
          type: array
          items:
            type: string
          description: >-
            Names of this monitor's competitors that the answer mentioned, empty
            when none were.
        answerText:
          type:
            - string
            - 'null'
          description: >-
            Only with includeEvidence. The retained answer, markdown when the
            engine gave markdown, at most 8,000 characters with a trailing
            ellipsis when it was cut, and null when the engine returned no text.
        sources:
          type: array
          items:
            $ref: '#/components/schemas/MonitorStoredSource'
          description: Only with includeEvidence.
        scoringContext:
          $ref: '#/components/schemas/MonitorScoringContext'
          description: >-
            Only with includeEvidence. null on rows scored before it was
            recorded.
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorDetail'
    MonitorEngine:
      type: string
      description: >-
        An engine a monitor can schedule: the prompt surfaces sold to customers
        plus the deprecated NAVER alias. GOOGLE_AIO and GOOGLE_AIMODE are
        accepted as input aliases and echoed as GOOGLE and AIMODE.
        CITATION_ANALYSIS is an analysis task, not a prompt surface, and cannot
        be scheduled on a monitor.
      enum:
        - CHATGPT
        - GEMINI
        - PERPLEXITY
        - GOOGLE
        - AIMODE
        - NAVER_AI_BRIEF
        - NAVER_AI_TAB
        - NAVER
    MonitorStoredSource:
      type: object
      description: >-
        One citation as the engine gave it. The order is the engine's, and the
        list is deduplicated by URL.
      properties:
        url:
          type: string
        label:
          type:
            - string
            - 'null'
        position:
          type: integer
          description: >-
            1-based place in the engine's citation list. It is not a ranking of
            your brand.
    MonitorScoringContext:
      type:
        - object
        - 'null'
      description: >-
        The definition this answer was scored with, stored at completion. null
        on rows scored before this was recorded - they are the reason a
        comparison can be withheld as legacy_scoring_unknown.
      properties:
        aliases:
          type: array
          items:
            type: string
        domains:
          type: array
          items:
            type: string
        competitors:
          type: array
          items:
            $ref: '#/components/schemas/MonitorCompetitor'
        country:
          type: string
        version:
          type: string
          description: >-
            Stable hash of the definition above. Two rows with the same version
            are comparable; a different one means the question changed.
        scoredAt:
          type: string
          format: date-time
        answerPresent:
          type: boolean
          description: False for a completed observation whose answer was empty.
        evidenceTruncated:
          type: boolean
          description: True when the retained answer text was cut at the character limit.
    ErrorDetail:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Stable, safe to branch on. See the Errors guide for the full list.
        message:
          type: string
          description: For humans. May change.
        details:
          description: >-
            Context for the error. An array of `{field, message}` on most
            `VALIDATION_ERROR`s; an object elsewhere (for example `{id}` on
            `RESOURCE_NOT_FOUND`, `retryAfterSec` on 429 and 503 codes). Omitted
            when there is nothing to add.
          oneOf:
            - type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                  message:
                    type: string
            - type: object
              additionalProperties: true
        timestamp:
          type: string
          format: date-time
    MonitorCompetitor:
      type: object
      description: >-
        A brand scored alongside yours in the same answers. The name is always
        one of its own aliases, so a bare name matches reliably.
      required:
        - name
      properties:
        name:
          type: string
          maxLength: 80
          description: __you__ is reserved for your own brand.
        aliases:
          type: array
          maxItems: 20
          items:
            type: string
          description: Other spellings of the same brand. The name is added automatically.
        source:
          type: string
          enum:
            - user
            - auto
          readOnly: true
          description: >-
            user: you added it. auto: the weekly competitor read found it in the
            monitor's own answers. Entries you send with source auto are
            ignored, so a monitor read and written back keeps its found
            competitors.
        domain:
          type: string
          readOnly: true
          description: The competitor's site, when the competitor read found one.
  responses:
    ValidationError:
      description: >-
        The request is malformed — bad JSON, unrecognised `taskType`, or neither
        `payload.prompt` nor `payload.query` present. `details` names the
        offending field.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missingPrompt:
              summary: Neither prompt nor query supplied
              value:
                success: false
                error:
                  code: VALIDATION_ERROR
                  message: Request validation failed
                  details:
                    - field: payload.prompt
                      message: payload.prompt or payload.query is required
                  timestamp: '2026-07-09T04:12:00.000Z'
            badTaskType:
              summary: Unrecognised taskType
              value:
                success: false
                error:
                  code: VALIDATION_ERROR
                  message: Request validation failed
                  details:
                    - field: taskType
                      message: '''NOPE'' is not recognized'
                  timestamp: '2026-07-09T04:12:00.000Z'
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: MISSING_API_KEY
              message: Missing or invalid API key
              timestamp: '2026-07-09T04:12:00.000Z'
    NotFound:
      description: >-
        No monitor with that id for this key, or no scored row with that task
        id. A monitor owned by another account is reported the same way rather
        than as a 403.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            success: false
            error:
              code: NOT_FOUND
              message: No monitor with that id
              timestamp: '2026-09-22T04:12:00.000Z'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your API key, sent as `Authorization: Bearer <key>`.'

````

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