/v1/monitors, tu peux créer des moniteurs persistants qui s’exécutent selon un calendrier fixe, détectent les changements de page, et te notifient par email, Slack, SMS, ou via un webhook dédié.
- Crée un moniteur à partir d’une
queryen langage naturel - Définis les sources avec
source_policy - Exécute des vérifications selon des calendriers en langage naturel (minimum toutes les 10 minutes, UTC)
- Configure
notification.channelset la livraison optionnelle parwebhook - Diffuse le progrès de provisionnement avec les événements envoyés par le serveur (
?stream=1) - Liste, inspecte, mets à jour, mets en pause, reprends, et supprime les moniteurs
- Lis les événements de snapshot, les artefacts de planification, les journaux d’exécution, et les journaux d’agents en direct
query.
Installation
Créer un moniteur
Crée un moniteur avecPOST /v1/monitors. L’API valide ton entrée, réserve un enregistrement de moniteur, provisionne un agent fantôme, génère une spécification de workflow, met en file d’attente la planification DAG, et crée un calendrier récurrent.
queryest requis — décris ce que tu veux surveiller en langage naturel.frequencyest optionnel et par défaut estevery hour. Utilise des phrases de planification telles queevery day at 9am(les calendriers s’exécutent en UTC ; l’intervalle minimum est de 10 minutes).source_policycontraint éventuellementinclude_urls,exclude_urls,include_domains, etexclude_domains.notificationconfigure quand et comment alerter (events+channels). La livraison par canal est résolue à l’exécution par le pipeline du moniteur — tu ne passes pas les destinataires dans le DAG.webhookest un objet séparé ({ "url": "https://…" }) pour les callbacks HTTP en plus denotification.channels.output_schemaimpose éventuellement une extraction structurée (JSON Schema valide).
202 avec status: provisioning. Le moniteur passe à active après que la planification ait résolu les cibles tracked. Interroge GET /v1/monitors/:monitor_id ou passe ?stream=1 (ou Accept: text/event-stream) pour suivre les phases de provisionnement et les tokens de raisonnement de spécification via SSE.
Exemple de requête
Tu n’as besoin que dequery et frequency. Les canaux de notification et les webhooks peuvent être ajoutés plus tard avec POST /v1/monitors/:monitor_id.
Réponse
Une création réussie (non en streaming) renvoie HTTP202 avec un objet moniteur. tracked est vide jusqu’à ce que la planification se termine ; interroge GET /v1/monitors/:monitor_id jusqu’à ce que status soit active et que tracked.urls soit rempli.
Sortie structurée du moniteur
Définisoutput_schema lorsque tu veux que les résultats d’extraction suivent une structure JSON spécifique. Le schéma doit être un JSON Schema valide.
Flux de provisionnement
Ajoute?stream=1 ou envoie Accept: text/event-stream pour recevoir des événements SSE pendant que le moniteur est créé :
| Événement | Description |
|---|---|
phase | Étape de provisionnement (running, done, ou failed) |
reasoning_token | Texte de conception de spécification incrémental |
reasoning_reset | Tronque le raisonnement mis en mémoire tampon après une tentative LLM échouée |
complete | Objet moniteur final (même forme que la réponse 202) |
error | Échec terminal |
Notifications et webhooks
Les alertes sont configurées sur l’enregistrement du moniteur et résolues à l’exécution — n’intègre pas de cibles de canal dans laquery de surveillance.
notification
| Champ | Description |
|---|---|
events | Quels résultats d’exécution doivent déclencher la livraison. Voir événements de notification ci-dessous. Si tu définis channels et omets events, par défaut les valeurs sont changed et first_snapshot. |
channels | Liste d’objets { "type", "target", "events"? } |
Événements de notification
Utiliseevents pour indiquer quand tu veux être notifié. Valeurs autorisées :
| Événement | Signification |
|---|---|
changed | Notifie lorsque le moniteur détecte un changement par rapport au snapshot précédent (par exemple, nouveau contenu, prix mis à jour, ou une différence que le pipeline classe comme changée). |
first_snapshot | Notifie lorsque le moniteur prend son premier snapshot — l’exécution de base initiale qui stocke le contenu actuel avant les comparaisons ultérieures. |
["changed"] alerte uniquement sur les mises à jour après la base ; ["first_snapshot"] confirme la configuration sans attendre une différence ; ["changed", "first_snapshot"] couvre les deux.
Les events par canal sur un objet canal utilisent les mêmes valeurs et remplacent la liste de niveau supérieur uniquement pour ce canal.
Types de canaux pris en charge :
type | Format target |
|---|---|
email | Adresse email valide |
slack | URL de webhook entrant Slack |
sms | Numéro de téléphone E.164 (par exemple +14155552671) |
webhook
Séparé de notification.channels, webhook.url reçoit des charges utiles HTTP POST lorsque le moniteur déclenche ton URL de callback. Tu peux utiliser à la fois un webhook et des notifications de canal sur le même moniteur.
Exemples
Email uniquement :Politique de source
Utilisesource_policy pour contraindre les URLs et domaines que le planificateur peut utiliser.
Fréquences
Définisfrequency en langage naturel, par exemple :
every hour(par défaut si omis)every day at 9amevery weekday at 14:30
- Doit être lisible comme un langage de planification (pas une question de moniteur arbitraire).
- Intervalle minimum : toutes les 10 minutes.
- Les calendriers sont stockés et exécutés en UTC (
schedule.timezoneestUTC). - Longueur maximale : 50 caractères.
frequency et l’expose sur schedule.cron. Lorsque le moniteur est active, schedule.next_run_at montre la prochaine exécution en ISO 8601.
Lister les moniteurs
Récupère tous les moniteurs pour ton équipe avecGET /v1/monitors.
Par défaut, les moniteurs supprimés sont filtrés. Utilise ?include_deleted=true pour les inclure.
Forme de la réponse
Obtenir un moniteur
Récupère un moniteur unique avecGET /v1/monitors/:monitor_id.
La réponse inclut last_run (résumé du dernier snapshot) et total_count (nombre de snapshots) sauf si tu passes include_total_count=false. Ajoute include-diagram=true pour inclure un mermaid_diagram du DAG du moniteur.
Forme de la réponse
Lister les événements du moniteur
UtiliseGET /v1/monitors/:monitor_id/events pour lister les événements de snapshot pour un moniteur.
Pagination :
limit(par défaut25, max100)cursor(jeton opaque denext_cursor)count_only=trueretourne seulement{ "total_count": N }
snapshot_url pré-signée à durée limitée.
Forme de la réponse
Obtenir la planification du moniteur
UtiliseGET /v1/monitors/:monitor_id/planning pour inspecter la spécification de workflow FDA et le DAG du planificateur après provisionnement.
Obtenir une exécution de moniteur
UtiliseGET /v1/monitors/:monitor_id/runs/:run_id pour les métadonnées de snapshot et les événements de journal d’agent analysés pour une exécution (run_id doit commencer par run_).
Diffuser les journaux d’agent
UtiliseGET /v1/monitors/:monitor_id/agent-logs?stream=1 (ou Accept: text/event-stream) pour suivre les journaux CloudWatch de l’agent du moniteur, filtrés par cet monitor_id.
Le paramètre de requête optionnel since est un timestamp en millisecondes (par défaut : il y a 30 minutes).
Types d’événements SSE : ready, log, heartbeat, error.
Mettre à jour un moniteur
Mets à jour un moniteur avecPOST /v1/monitors/:monitor_id.
Champs pris en charge (inclure uniquement ce que tu veux changer) :
metadata— fusionné avec les clés existantes ; les valeurs de chaîne vides suppriment les clésfrequency— recrée le calendrier interne et remetstatusàactivenotification— remplace l’ensemble de l’objet de notificationwebhook— passenullpour supprimer
409 pendant que status est provisioning.
Lorsque tu ajoutes notification.channels sans events, l’API par défaut events à ["changed", "first_snapshot"].
Ajouter une notification par email
Ajouter un webhook
Mettre en pause un moniteur
Mets en pause un moniteur avecPOST /v1/monitors/:monitor_id/pause.
La mise en pause désactive le calendrier sous-jacent et met status à paused. Seuls les moniteurs avec status: active peuvent être mis en pause. Le corps de la requête est vide.
200 avec le moniteur et status: paused. schedule.next_run_at est null pendant la pause.
Reprendre un moniteur
Reprends un moniteur en pause avecPOST /v1/monitors/:monitor_id/resume.
La reprise réactive le calendrier et remet status à active. Seuls les moniteurs paused peuvent être repris.
Supprimer un moniteur
Supprime un moniteur avecDELETE /v1/monitors/:monitor_id.
La suppression supprime de manière logique la ligne du moniteur (status: deleted) et retire ses ressources de calendrier et d’agent fantôme.
Statut du moniteur
| Statut | Signification |
|---|---|
provisioning | Agent, spécification, planificateur, et calendrier sont en cours de configuration |
active | Calendrier activé ; les exécutions s’exécutent sur schedule.frequency |
paused | Calendrier désactivé via /pause |
failed | Échec de provisionnement ou de mise à jour du calendrier (error_message défini) |
deleted | Supprimé de manière logique via DELETE |
Exemples d’utilisation
Voici des modèles de moniteurs courants. Chaque exemple nécessite seulementquery et frequency au moment de la création ; ajoute notification et webhook plus tard si tu veux des alertes lors de la première exécution ou lors de changements.
Nouveaux lancements Y Combinator
Surveille Y Combinator Launches pour les startups nouvellement publiées. Après planification,tracked.type est urls et tracked.urls pointe vers la page des lancements.
active :
channels défini et events omis, l’API par défaut à ["changed", "first_snapshot"] pour que tu sois notifié lors de l’exécution de base et chaque fois qu’un changement est détecté.
Articles de blog de concurrents (AirOps, Profound)
Surveille l’index de blog d’un concurrent pour de nouveaux articles. Le planificateur résouttracked.urls à l’URL du blog (par exemple https://www.airops.com/blog ou https://www.tryprofound.com/blog).
events: ["changed"] sur notification si tu veux seulement des alertes lorsque de nouveaux articles apparaissent, pas lors du premier snapshot de base.
Seuil de prix d’action (Tesla)
Surveille une source de données structurée lorsque la condition est numérique plutôt qu’une différence de page. Le planificateur définittracked.type à data_api et laisse tracked.urls vide.
Changelog de l’API OpenAI
Sois notifié lorsque le changelog de l’API OpenAI liste de nouvelles fonctionnalités, des sorties de modèles, ou des dépréciations. Mentionne l’URL du changelog dansquery ou fixe-la avec source_policy.include_urls.
events à ["changed"] pour être alerté lorsque le contenu du changelog change, pas seulement lorsque le premier snapshot est stocké.
Gérer plusieurs moniteurs
Liste tous les moniteurs pour ton équipe pour voir les statuts, les calendriers, et les cibles résolues en un seul endroit :data_api, et un moniteur de lancements YC avec email et webhook configurés—avec "count": 4 (ou plus) dans la réponse.
Erreurs de validation courantes
Les endpoints de moniteur renvoient des erreurs de validation claires pour les requêtes invalides courantes :querymanquante ou videfrequencyqui n’est pas un langage de planification, résout trop souvent (moins de 10 minutes), ou dépasse 50 caractères- Entrées
source_policyinvalides (les tableaux d’URL doivent contenir des chaîneshttp/httpsvalides) - Forme
notificationinvalide,eventsinconnus, outype/targetde canal invalide webhook.urlinvalide (doit êtrehttpouhttps)output_schemainvalide (doit être un JSON Schema valide)- Format
monitor_idourun_idinvalide - Mise à jour pendant que
statusestprovisioning(409) - Pause/reprise lorsque le statut n’est pas
active/paused