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

# Créer un Moniteur

> Crée un moniteur à partir d’une requête en langage naturel. Provisionne un agent fantôme, génère une spécification de flux de travail, met en file d’attente la planification DAG, et programme des exécutions récurrentes. Configure la livraison avec notification.channels et/ou webhook. Retourne 202 avec le statut provisioning, ou diffuse la progression avec ?stream=1.



## OpenAPI

````yaml fr/openapi/monitors.json POST /v1/monitors
openapi: 3.0.3
info:
  title: API des Moniteurs
  version: 1.0.0
servers:
  - url: https://api.olostep.com
security: []
paths:
  /v1/monitors:
    post:
      summary: Créer un Moniteur
      description: >-
        Crée un moniteur à partir d'une `query` en langage naturel, provisionne
        un agent interne et un planning, génère une spécification de workflow,
        et met en file d'attente la planification du DAG. Retourne HTTP `202`
        avec `status: provisioning` lorsque la requête se termine sans
        streaming. Passe `?stream=1` ou `Accept: text/event-stream` pour
        recevoir des événements envoyés par le serveur pour les phases de
        provisioning et les jetons de raisonnement de spécification. Le moniteur
        devient `active` après que la planification résout les cibles suivies.
      parameters:
        - name: stream
          in: query
          required: false
          schema:
            type: string
            enum:
              - '1'
              - 'true'
          description: >-
            Lorsqu'il est défini, la réponse est `text/event-stream` avec des
            événements `phase`, `reasoning_token`, `complete`, et `error`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - query
              properties:
                query:
                  type: string
                  description: Que surveiller, en langage naturel.
                source_policy:
                  $ref: '#/components/schemas/MonitorSourcePolicy'
                frequency:
                  type: string
                  maxLength: 50
                  default: every hour
                  description: >-
                    Planning en langage naturel (par exemple `every day at
                    9am`). L'intervalle minimum est toutes les 10 minutes. Les
                    plannings utilisent UTC.
                notification:
                  $ref: '#/components/schemas/MonitorNotification'
                webhook:
                  $ref: '#/components/schemas/MonitorWebhook'
                metadata:
                  type: object
                  additionalProperties: true
                output_schema:
                  type: object
                  additionalProperties: true
                  description: Schéma JSON pour la sortie d'extraction structurée.
      responses:
        '200':
          description: >-
            Flux de provisioning (`text/event-stream`) lorsque `stream=1`. Se
            termine par un événement `complete` contenant l'objet moniteur.
          content:
            text/event-stream:
              schema:
                type: string
        '202':
          description: Moniteur accepté ; provisioning démarré (sans streaming).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Monitor'
        '400':
          description: >-
            Requête invalide (query, frequency, source_policy, notification,
            webhook, metadata, ou output_schema).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Clé API invalide.
        '500':
          description: Erreur interne du serveur lors de la création du moniteur.
        '503':
          description: Agent maître FDA indisponible pendant l'approvisionnement.
      security:
        - Authorization: []
components:
  schemas:
    MonitorSourcePolicy:
      type: object
      description: >-
        Listes d'autorisation et de refus d'URL/domaine optionnelles appliquées
        pendant la planification et l'exécution.
      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: >-
            Quand notifier. `changed` — livrer lorsqu'un changement est détecté
            par rapport au snapshot précédent. `first_snapshot` — livrer lorsque
            le premier snapshot de référence est pris. Par défaut, les deux
            lorsque `channels` n'est pas vide et `events` est vide.
        channels:
          type: array
          items:
            $ref: '#/components/schemas/NotificationChannel'
          description: >-
            Cibles de livraison par email, Slack, ou SMS. Résolu à l'exécution
            par le pipeline du moniteur.
    MonitorWebhook:
      type: object
      required:
        - url
      properties:
        url:
          type: string
          format: uri
          description: >-
            URL HTTP/HTTPS qui reçoit les charges utiles du moniteur (séparée de
            `notification.channels`).
    Monitor:
      type: object
      properties:
        id:
          type: string
          description: Identifiant unique du moniteur (`monitor_…`).
        object:
          type: string
          example: monitor
        query:
          type: string
          description: Intention de surveillance en langage naturel.
        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: Schéma JSON optionnel pour la sortie d'extraction structurée.
        status:
          type: string
          enum:
            - provisioning
            - active
            - paused
            - failed
            - deleted
          description: Surveille le statut du cycle de vie.
        error_message:
          type: string
          nullable: true
          description: Présent lorsque `status` est `failed`.
        last_run:
          allOf:
            - $ref: '#/components/schemas/MonitorLastRun'
          nullable: true
          description: >-
            Résumé du dernier instantané. Inclus dans `GET
            /v1/monitors/{monitor_id}`.
        agent:
          $ref: '#/components/schemas/MonitorAgent'
        metadata:
          type: object
          additionalProperties: true
        created:
          type: integer
          description: Horodatage Unix (secondes).
        updated:
          type: integer
          description: Horodatage Unix (secondes).
        total_count:
          type: integer
          description: >-
            Nombre total d'instantanés. Inclus dans `GET
            /v1/monitors/{monitor_id}` sauf si `include_total_count=false`.
        mermaid_diagram:
          type: string
          description: >-
            Diagramme de flux Mermaid du DAG du moniteur. Inclus lorsque
            `include-diagram=true` lors de la récupération.
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        monitor_id:
          type: string
          description: Présent sur certaines réponses d'erreur de création/mise à jour.
    NotificationChannel:
      type: object
      required:
        - type
        - target
      properties:
        type:
          type: string
          enum:
            - email
            - slack
            - sms
          description: Type de canal de livraison.
        target:
          type: string
          description: >-
            Adresse email, URL de webhook Slack, ou numéro de téléphone E.164
            (pour SMS).
        events:
          type: array
          items:
            type: string
            enum:
              - changed
              - first_snapshot
          description: >-
            Filtre d'événements optionnel par canal. Lorsqu'il est omis, la
            livraison du canal suit `notification.events` au niveau supérieur
            (ou les valeurs par défaut lorsque les canaux sont définis).
    MonitorTracked:
      type: object
      description: Cibles résolues que le moniteur suit après la fin de la planification.
      properties:
        type:
          type: string
          nullable: true
          description: Type de surface suivi (par exemple `url` ou `web_query`).
        urls:
          type: array
          items:
            type: string
            format: uri
          description: URLs concrètes surveillées.
        web_query:
          type: string
          nullable: true
          description: >-
            Requête de recherche web utilisée lorsque le moniteur suit un
            ensemble de résultats dynamiques.
    MonitorSchedule:
      type: object
      properties:
        frequency:
          type: string
          nullable: true
          description: >-
            Texte de planification en langage naturel (par exemple `every
            hour`).
        cron:
          type: string
          nullable: true
          description: Expression Cron dérivée de `frequency`.
        timezone:
          type: string
          example: UTC
          description: >-
            Fuseau horaire de la planification. Actuellement `UTC` pour les
            plannings des moniteurs.
        next_run_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Prochaine exécution programmée (ISO 8601). `null` lorsque le
            moniteur n'est pas `active`.
    MonitorLastRun:
      type: object
      properties:
        id:
          type: string
          nullable: true
          description: ID d'exécution du dernier snapshot (`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 d'agent interne utilisé pour exécuter le DAG du moniteur.
  securitySchemes:
    Authorization:
      type: http
      scheme: bearer
      description: >-
        En-tête d'authentification Bearer sous la forme Bearer <token>, où
        <token> est ton jeton d'authentification.

````