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

# Crear Monitor

> Crea un monitor a partir de una consulta en lenguaje natural. Proporciona un agente sombra, genera una especificación de flujo de trabajo, pone en cola la planificación de DAG y programa ejecuciones recurrentes. Configura la entrega con notification.channels y/o webhook. Devuelve 202 con estado de aprovisionamiento, o transmite el progreso con ?stream=1.



## OpenAPI

````yaml es/openapi/monitors.json POST /v1/monitors
openapi: 3.0.3
info:
  title: API de Monitores
  version: 1.0.0
servers:
  - url: https://api.olostep.com
security: []
paths:
  /v1/monitors:
    post:
      summary: Crear Monitor
      description: >-
        Crea un monitor a partir de una `query` en lenguaje natural, provisiona
        un agente interno y un horario, genera una especificación de flujo de
        trabajo y pone en cola la planificación del DAG. Devuelve HTTP `202` con
        `status: provisioning` cuando la solicitud se completa sin transmisión.
        Pasa `?stream=1` o `Accept: text/event-stream` para recibir Eventos
        Enviados por el Servidor para las fases de aprovisionamiento y tokens de
        razonamiento de especificaciones. El monitor se vuelve `active` después
        de que la planificación resuelve los objetivos rastreados.
      parameters:
        - name: stream
          in: query
          required: false
          schema:
            type: string
            enum:
              - '1'
              - 'true'
          description: >-
            Cuando se establece, la respuesta es `text/event-stream` con eventos
            de `phase`, `reasoning_token`, `complete` y `error`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - query
              properties:
                query:
                  type: string
                  description: Qué monitorear, en lenguaje natural.
                source_policy:
                  $ref: '#/components/schemas/MonitorSourcePolicy'
                frequency:
                  type: string
                  maxLength: 50
                  default: every hour
                  description: >-
                    Horario en lenguaje natural (por ejemplo, `every day at
                    9am`). El intervalo mínimo es cada 10 minutos. Los horarios
                    usan UTC.
                notification:
                  $ref: '#/components/schemas/MonitorNotification'
                webhook:
                  $ref: '#/components/schemas/MonitorWebhook'
                metadata:
                  type: object
                  additionalProperties: true
                output_schema:
                  type: object
                  additionalProperties: true
                  description: Esquema JSON para la salida de extracción estructurada.
      responses:
        '200':
          description: >-
            Flujo de aprovisionamiento (`text/event-stream`) cuando `stream=1`.
            Termina con un evento `complete` que contiene el objeto del monitor.
          content:
            text/event-stream:
              schema:
                type: string
        '202':
          description: Monitor aceptado; aprovisionamiento iniciado (sin transmisión).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Monitor'
        '400':
          description: >-
            Solicitud inválida (query, frequency, source_policy, notification,
            webhook, metadata, o output_schema).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Clave API inválida.
        '500':
          description: Error interno del servidor al crear el monitor.
        '503':
          description: Agente maestro de la FDA no disponible durante la provisión.
      security:
        - Authorization: []
components:
  schemas:
    MonitorSourcePolicy:
      type: object
      description: >-
        Listas de permitidos y denegados de URL/dominio opcionales aplicadas
        durante la planificación y ejecución.
      properties:
        include_urls:
          type: array
          items:
            type: string
            format: uri
        exclude_urls:
          type: array
          items:
            type: string
            format: uri
        include_domains:
          type: array
          items:
            type: string
        exclude_domains:
          type: array
          items:
            type: string
    MonitorNotification:
      type: object
      properties:
        events:
          type: array
          items:
            type: string
            enum:
              - changed
              - first_snapshot
          description: >-
            Cuándo notificar. `changed` — entregar cuando se detecta un cambio
            en comparación con la instantánea anterior. `first_snapshot` —
            entregar cuando se toma la primera instantánea de referencia. Por
            defecto, ambos cuando `channels` no está vacío y `events` está
            vacío.
        channels:
          type: array
          items:
            $ref: '#/components/schemas/NotificationChannel'
          description: >-
            Objetivos de entrega de Email, Slack o SMS. Resueltos en tiempo de
            ejecución por el pipeline del monitor.
    MonitorWebhook:
      type: object
      required:
        - url
      properties:
        url:
          type: string
          format: uri
          description: >-
            URL HTTP/HTTPS que recibe las cargas útiles del monitor (separado de
            `notification.channels`).
    Monitor:
      type: object
      properties:
        id:
          type: string
          description: Identificador único del monitor (`monitor_…`).
        object:
          type: string
          example: monitor
        query:
          type: string
          description: Intención de monitoreo en lenguaje natural.
        tracked:
          $ref: '#/components/schemas/MonitorTracked'
        source_policy:
          $ref: '#/components/schemas/MonitorSourcePolicy'
        schedule:
          $ref: '#/components/schemas/MonitorSchedule'
        notification:
          $ref: '#/components/schemas/MonitorNotification'
        webhook:
          allOf:
            - $ref: '#/components/schemas/MonitorWebhook'
          nullable: true
        output_schema:
          type: object
          additionalProperties: true
          nullable: true
          description: Esquema JSON opcional para la salida de extracción estructurada.
        status:
          type: string
          enum:
            - provisioning
            - active
            - paused
            - failed
            - deleted
          description: Monitorea el estado del ciclo de vida.
        error_message:
          type: string
          nullable: true
          description: Presente cuando `status` es `failed`.
        last_run:
          allOf:
            - $ref: '#/components/schemas/MonitorLastRun'
          nullable: true
          description: >-
            Resumen de la última instantánea. Incluido en `GET
            /v1/monitors/{monitor_id}`.
        agent:
          $ref: '#/components/schemas/MonitorAgent'
        metadata:
          type: object
          additionalProperties: true
        created:
          type: integer
          description: Marca de tiempo Unix (segundos).
        updated:
          type: integer
          description: Marca de tiempo Unix (segundos).
        total_count:
          type: integer
          description: >-
            Conteo total de instantáneas. Incluido en `GET
            /v1/monitors/{monitor_id}` a menos que `include_total_count=false`.
        mermaid_diagram:
          type: string
          description: >-
            Diagrama de flujo Mermaid del monitor DAG. Incluido cuando
            `include-diagram=true` en get.
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        monitor_id:
          type: string
          description: Presente en algunas respuestas de error de creación/actualización.
    NotificationChannel:
      type: object
      required:
        - type
        - target
      properties:
        type:
          type: string
          enum:
            - email
            - slack
            - sms
          description: Tipo de canal de entrega.
        target:
          type: string
          description: >-
            Dirección de correo electrónico, URL de webhook de Slack, o número
            de teléfono E.164 (para SMS).
        events:
          type: array
          items:
            type: string
            enum:
              - changed
              - first_snapshot
          description: >-
            Filtro de eventos opcional por canal. Cuando se omite, la entrega
            del canal sigue `notification.events` a nivel superior (o los
            valores predeterminados cuando se configuran canales).
    MonitorTracked:
      type: object
      description: >-
        Objetivos resueltos que el monitor rastrea después de que se completa la
        planificación.
      properties:
        type:
          type: string
          nullable: true
          description: Tipo de superficie rastreada (por ejemplo, `url` o `web_query`).
        urls:
          type: array
          items:
            type: string
            format: uri
          description: URLs concretas que se están monitoreando.
        web_query:
          type: string
          nullable: true
          description: >-
            Consulta de búsqueda web utilizada cuando el monitor rastrea un
            conjunto de resultados dinámico.
    MonitorSchedule:
      type: object
      properties:
        frequency:
          type: string
          nullable: true
          description: >-
            Texto de programación en lenguaje natural (por ejemplo, `every
            hour`).
        cron:
          type: string
          nullable: true
          description: Expresión Cron derivada de `frequency`.
        timezone:
          type: string
          example: UTC
          description: >-
            Zona horaria de la programación. Actualmente `UTC` para las
            programaciones de monitores.
        next_run_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Próxima ejecución programada (ISO 8601). `null` cuando el monitor no
            está `active`.
    MonitorLastRun:
      type: object
      properties:
        id:
          type: string
          nullable: true
          description: ID de ejecución de la última instantánea (`run_…`).
        status:
          type: string
          example: completed
        change_detected:
          type: boolean
          nullable: true
        ran_at:
          type: string
          format: date-time
          nullable: true
    MonitorAgent:
      type: object
      properties:
        id:
          type: string
          nullable: true
          description: >-
            ID de agente sombra interno utilizado para ejecutar el DAG del
            monitor.
  securitySchemes:
    Authorization:
      type: http
      scheme: bearer
      description: >-
        Encabezado de autenticación Bearer de la forma Bearer <token>, donde
        <token> es tu token de autenticación.

````