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

# Obtener un monitor

> Consulta la definición de un monitor con el detalle del periodo que muestra el resumen del dashboard.



## OpenAPI

````yaml GET /v1/monitors/{id}
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}:
    get:
      tags:
        - Monitors
      summary: Get monitor (legacy detail)
      description: >-
        The original period detail: the same payload the dashboard overview
        renders. It mixes a chosen window (stats, previous, engineRates, series,
        shareOfVoice, voiceSeries) with all-time cells (the latest scored answer
        per prompt and engine, with no window or engine filter), reports health
        only for tasks still visible (roughly the last 24 hours) and caps
        citations at 12 domains and 20 pages with no cursor. Prefer GET
        /v1/monitors/{id}/analytics for a report: it applies one cohort and one
        filter set to every section and paginates sources through GET
        /v1/monitors/{id}/sources.
      operationId: getMonitor
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: Monitor id from GET /v1/monitors.
        - name: days
          in: query
          required: false
          schema:
            type: integer
            enum:
              - 7
              - 30
              - 90
            default: 30
          description: Window length ending now. Only these three values are accepted.
      responses:
        '200':
          description: >-
            Monitor, window aggregates, all-time latest cells and recent task
            health.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitorDetailResponse'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    MonitorDetailResponse:
      type: object
      description: >-
        Legacy period detail. stats, previous, engineRates, series, shareOfVoice
        and voiceSeries share the window from days; cells is all-time and
        unfiltered; topDomains and topPages are capped at 12 and 20 rows with no
        cursor. shareOfVoice here is the original answer-penetration view: each
        brand's mentions are counted against the answers collected, so the
        numbers can add up to more than 100. Use GET /v1/monitors/{id}/analytics
        for the report contract with the true share denominator.
      properties:
        success:
          type: boolean
          const: true
        data:
          type: object
          properties:
            monitor:
              $ref: '#/components/schemas/Monitor'
            stats:
              $ref: '#/components/schemas/MonitorStats'
            previous:
              $ref: '#/components/schemas/MonitorStats'
            engineRates:
              type: array
              items:
                $ref: '#/components/schemas/MonitorStats'
            topDomains:
              type: array
              maxItems: 12
              items:
                type: object
                properties:
                  domain:
                    type: string
                  citations:
                    type: integer
                  prompts:
                    type: integer
                  own:
                    type: boolean
            topPages:
              type: array
              maxItems: 20
              items:
                type: object
                properties:
                  url:
                    type: string
                  domain:
                    type: string
                  label:
                    type:
                      - string
                      - 'null'
                  citations:
                    type: integer
                  prompts:
                    type: integer
                  own:
                    type: boolean
            shareOfVoice:
              type: object
              description: >-
                Answer penetration, the legacy view: mentions per brand over the
                window's answers. A brand mentioned in every answer scores 100
                while several brands in one answer all count, so the brands do
                not sum to 100.
              properties:
                runs:
                  type: integer
                brands:
                  type: array
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                        description: __you__ is your own brand.
                      mentions:
                        type: integer
            voiceSeries:
              type: array
              items:
                type: object
                properties:
                  day:
                    type: string
                    format: date-time
                  name:
                    type: string
                  mentions:
                    type: integer
            health:
              $ref: '#/components/schemas/MonitorHealth'
            series:
              type: array
              items:
                type: object
                properties:
                  day:
                    type: string
                    format: date-time
                  engine:
                    $ref: '#/components/schemas/MonitorEngine'
                  runs:
                    type: integer
                  mentioned:
                    type: integer
                  cited:
                    type: integer
            cells:
              type: array
              description: >-
                The latest scored answer per prompt and engine, across all time,
                with no window or engine filter. Each taskId can be read through
                GET /v1/monitors/{id}/answers/{taskId}.
              items:
                type: object
                properties:
                  prompt:
                    type: string
                  engine:
                    $ref: '#/components/schemas/MonitorEngine'
                  mentioned:
                    type: boolean
                  cited:
                    type: boolean
                  position:
                    type:
                      - integer
                      - 'null'
                  ranAt:
                    type: string
                    format: date-time
                  taskId:
                    type: string
            windowDays:
              type: integer
              enum:
                - 7
                - 30
                - 90
    Monitor:
      type: object
      description: One named prompt set in one market, and the schedule that repeats it.
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          maxLength: 80
        mode:
          type: string
          enum:
            - BRAND
            - CATEGORY
          default: BRAND
          description: >-
            What the monitor measures, fixed at creation. BRAND follows one
            brand and its competitors. CATEGORY follows a market with no brand
            of its own and ranks every brand the answers name.
        category:
          type:
            - string
            - 'null'
          maxLength: 80
          description: >-
            CATEGORY only: the market the monitor follows. null on a BRAND
            monitor.
        promptTopics:
          type: object
          additionalProperties:
            type: string
            maxLength: 60
          description: >-
            CATEGORY only: each prompt's sub-field, keyed by the prompt's exact
            text. A prompt without an entry covers the whole category. Empty on
            a BRAND monitor.
        engines:
          type: array
          items:
            $ref: '#/components/schemas/MonitorEngine'
          description: >-
            Each engine that joins a run submits one task per prompt, per point
            and per sample.
        prompts:
          type: array
          items:
            type: string
            maxLength: 2000
          description: >-
            The exact question texts the monitor asks, stored verbatim. Scored
            rows are keyed by this text, so editing the list does not rewrite
            history.
        aliases:
          type: array
          maxItems: 20
          items:
            type: string
          description: >-
            Spellings of your brand matched against the answer text. Matching
            ignores case and character width: Latin-script names match whole
            words, and Korean, Japanese, Chinese and Thai names match anywhere
            in the text. Empty on a CATEGORY monitor.
        domains:
          type: array
          maxItems: 20
          items:
            type: string
          description: >-
            Hosts matched against the answer citations; a registered domain also
            matches its subdomains. Empty means citations are not tracked and
            cited is always false. Always empty on a CATEGORY monitor.
        country:
          type: string
          description: >-
            Two-letter country code passed to every task. It selects the market
            the engines answer for; it does not translate the prompts.
        intervalHours:
          type: integer
          minimum: 1
          maximum: 168
          description: Hours between scheduled runs.
        enabled:
          type: boolean
          description: >-
            false pauses the schedule without deleting the monitor or its
            history.
        alertBelowPct:
          type:
            - integer
            - 'null'
          minimum: 1
          maximum: 100
          description: >-
            Email when the recent mention rate falls below this percentage. null
            means the alert is off, and it is always null on a CATEGORY monitor.
        competitors:
          type: array
          maxItems: 50
          description: >-
            BRAND: up to 10 you added, then up to 15 the competitor read found
            in this monitor's answers. CATEGORY: up to 25 you added, then up to
            25 the read found, and the whole list is the roster the report
            ranks.
          items:
            $ref: '#/components/schemas/MonitorCompetitor'
        competitorsReadAt:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            When the competitor read last ran. It runs once the first run is in,
            then every 7 days when the monitor has run since. null until then.
        nextRunAt:
          type: string
          format: date-time
          description: >-
            When the next run becomes due. A run is admitted by the next sweep
            tick, not at this instant.
        lastRunAt:
          type:
            - string
            - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        location:
          oneOf:
            - $ref: '#/components/schemas/LocationPoint'
            - type: 'null'
          description: >-
            Ask every task from this point (ChatGPT, Gemini, Google AI Overview
            and AI Mode only). Exclusive with grid; setting one clears the
            other, null asks for the whole country.
        grid:
          oneOf:
            - $ref: '#/components/schemas/GridSpec'
            - type: 'null'
          description: >-
            Ask every prompt and engine from each point of this grid. Each
            engine in a run adds prompts × size² × its samples tasks; the first
            run, which every engine joins, must stay within the account's
            tasksPerRun limit.
        engineSettings:
          allOf:
            - $ref: '#/components/schemas/MonitorEngineSettings'
        webhookUrl:
          type:
            - string
            - 'null'
          description: Where change events are posted, or null when they are off.
        analysis:
          type: boolean
          description: >-
            Ask every task for `include.analysis` with this monitor's names,
            domains and competitors. 2 extra credits per analyzed task.
    MonitorStats:
      type: object
      description: >-
        Scored answers in a window, plus how many named the brand and how many
        cited a registered domain. These are counts, not rates; a rate is these
        numbers divided, and is published as null when the denominator is zero.
      required:
        - runs
        - mentioned
        - cited
      properties:
        runs:
          type: integer
        mentioned:
          type: integer
        cited:
          type: integer
    MonitorHealth:
      type: object
      description: >-
        Run health for tasks that are still individually visible, which covers
        the latest run at every cadence this product sells. A failed task writes
        no scored row, so this is the only place failures appear - a report that
        silently stopped growing looks identical to one whose engine broke.
      required:
        - completed
        - failed
        - pending
        - topError
      properties:
        completed:
          type: integer
        failed:
          type: integer
        pending:
          type: integer
          description: Queued or still processing.
        topError:
          type:
            - string
            - 'null'
          description: The most common failure code in this window, or null.
    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
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorDetail'
    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.
    LocationPoint:
      type: object
      additionalProperties: false
      required:
        - latitude
        - longitude
      properties:
        latitude:
          type: number
          minimum: -90
          maximum: 90
        longitude:
          type: number
          minimum: -180
          maximum: 180
      example:
        latitude: 37.4979
        longitude: 127.0276
    GridSpec:
      type: object
      additionalProperties: false
      required:
        - center
        - size
        - radiusMeters
      description: >-
        A square grid of points. Row 0 is the north edge and column 0 the west
        edge; points sit 2 × radiusMeters ÷ (size − 1) apart.
      properties:
        center:
          $ref: '#/components/schemas/LocationPoint'
        size:
          type: integer
          enum:
            - 3
            - 5
            - 7
            - 9
          description: Points per side. Odd, so the center is one of the points.
        radiusMeters:
          type: number
          minimum: 100
          maximum: 50000
          description: Distance from the center to the middle of each edge.
    MonitorEngineSettings:
      type: object
      description: >-
        Per-engine cadence and answers per prompt, keyed by engine. An engine
        without an entry joins every run once. Values equal to the defaults are
        dropped, and an update that removes an engine removes its entry.
      additionalProperties:
        type: object
        additionalProperties: false
        properties:
          intervalHours:
            type: integer
            minimum: 1
            maximum: 168
            description: >-
              A multiple of the monitor's intervalHours. The engine joins every
              k-th run, counting from the first run, which every engine joins.
          samples:
            type: integer
            minimum: 1
            maximum: 10
            description: >-
              Answers per prompt and point in each run, each its own task in its
              own session. Default 1.
      example:
        CHATGPT:
          samples: 5
        GOOGLE:
          intervalHours: 168
    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
  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.