Skip to main content
Les moniteurs rejouent un jeu de prompts enregistré selon un calendrier et notent les réponses IA obtenues pour votre marque et ses concurrents. Cette page est le contrat de l’API : comment configurer un moniteur, ce que signifie chaque chiffre, comment lire les sources qui le sous-tendent et comment exporter les réponses sous-jacentes. Pour la vue tableau de bord des mêmes données, commencez par le guide produit. Toutes les clés, ids, marques et prompts de cette page sont des exemples. Rien ici n’est un identifiant ni un moniteur réel.

Qu’est-ce qu’un moniteur

Un moniteur est un jeu de prompts nommé sur un marché : une liste de prompts, les moteurs auxquels les envoyer, les alias qui signifient « votre marque », éventuellement vos domaines et quelques concurrents, un pays et un intervalle. Chaque exécution planifiée soumet prompts × moteurs tâches asynchrones ordinaires, et chaque réponse terminée est notée une fois puis conservée. La notation est volontairement étroite, et les données ne peuvent pas répondre au-delà de ce qu’elles stockent :
  • Elle enregistre si un alias de marque apparaît dans le texte de la réponse et à quel offset de caractère ; si la réponse a cité l’un de vos domaines enregistrés ; et lesquels de vos concurrents configurés sont apparus dans la même réponse.
  • Elle ne produit pas de score de sentiment ni d’estimation de part de marché. Un rang est une place parmi les marques que citent les réponses, comme dans le classement d’un moniteur de catégorie (voir plus bas).

Les concurrents sont trouvés pour vous

Vous n’avez pas à lister de concurrents. Dès que la première exécution d’un moniteur est terminée, nous lisons ses réponses récentes avec un modèle de langage et gardons les marques qui vendent la même chose que vous et sont citées dans au moins deux réponses, 15 au maximum. La lecture se répète tous les 30 jours : les nouveaux rivaux apparaissent et ceux qui ne sont plus cités disparaissent.
  • Les concurrents trouvés portent source: "auto". Ceux que vous ajoutez portent source: "user", et la lecture ne les modifie ni ne les supprime jamais.
  • Quand la liste trouvée change, les réponses enregistrées du moniteur sont recomptées avec elle, afin que chaque marque d’un rapport soit mesurée sur les mêmes réponses. competitorsReadAt sur le moniteur indique la date de la dernière lecture.
  • Les noms en alphabet latin correspondent à des mots entiers : « replicates » ne compte pas comme une mention de la marque Replicate.

Séparez les moniteurs de façon réfléchie

Des moniteurs distincts représentent des sujets ou marchés distincts, et ce sont des rapports distincts : chacun a sa propre fenêtre, sa propre définition de notation et son propre calendrier. Deux habitudes sont payantes :
  • Un moniteur par sujet et par marché, pour que la cohorte d’un rapport reste comparable. Mélanger « meilleur CRM » et « comment fixer le prix d’un CRM » dans un même jeu fait la moyenne de deux intentions différentes en un seul chiffre.
  • Formulez les prompts comme un acheteur et n’y mettez jamais votre propre marque. Un prompt contenant la marque est toujours une mention : il affiche 100 % pour toujours et ne mesure rien. Les noms de concurrents conviennent et font souvent les prompts les plus utiles.

Moniteurs de catégorie : classez les marques d’un marché

Un moniteur de marque suit une marque. Un moniteur de catégorie suit un marché : vous nommez la catégorie, vous regroupez ses questions par sous-domaine, et le rapport classe les marques que citent les moteurs en y répondant. Définissez "mode": "CATEGORY" à la création du moniteur. mode vaut BRAND par défaut et reste fixe pendant toute la vie du moniteur, car il détermine le sens de chaque ligne stockée.
Le calendrier, le coût, la fenêtre, les filtres, quality, les sources, les citations, les résultats et les réponses fonctionnent comme sur un moniteur de marque. Un moniteur de catégorie n’a pas d’alerte, donc POST /v1/monitors/{id}/alerts/test renvoie 400.

Ce que classe le rapport

GET /v1/monitors/{id}/analytics renvoie la vue de catégorie. stats et previous contiennent runs, named (réponses qui citent au moins une marque suivie) et namedRate ; changes.namedRatePp est la variation en points, et l’objet category contient le classement :
  • rank ordonne les marques selon le nombre de réponses qui les citent : c’est une place parmi les marques que citent ces réponses. Une marque qu’aucune réponse n’a citée a rank: null.
  • Le mentionRate d’une marque se divise par son propre sampleSize, les réponses notées pendant que la marque figurait dans la liste. Une marque ajoutée aujourd’hui est mesurée à partir d’aujourd’hui.
  • shareOfVoice vaut 100 × mentions de cette marque / toutes les mentions de marques suivies dans la fenêtre : les parts d’une même fenêtre totalisent donc 100.
  • GET /v1/monitors ajoute leader (la marque la plus citée, avec son taux) à chaque moniteur de catégorie. Ses compteurs mentioned et cited valent toujours 0.
  • GET /v1/monitors/{id}/answers/{taskId} renvoie mode, un aliases vide et les marques suivies comme competitors.

Rechercher des prompts à partir de la demande de recherche

POST /v1/monitors/research prend le corps de requête de Prompt Research, coûte les mêmes 12 crédits et renvoie le même résultat, soumis au nom de votre compte. Lisez la tâche en file d’attente avec GET /v1/async/task/{id} ; l’id se trouve dans data.task.id de la réponse.
Utilisez monitorSet.prompts comme prompts, le topic de chaque prompt comme son sous-domaine dans promptTopics, et brands[].brand comme competitors. Le bouton Lancer la recherche du tableau de bord fait la même chose et remplit le formulaire ; rien n’est enregistré tant que vous n’avez pas créé le moniteur.

Coût et calendrier

Une exécution met en file une tâche par prompt et par moteur, au prix en crédits publié de chaque moteur. Le calendrier se répète jusqu’à ce que vous mettiez en pause ou supprimiez le moniteur : c’est donc un coût récurrent que vous choisissez à la création :
Par exemple, 12 prompts sur ChatGPT (2 crédits) et Gemini (1 crédit) font 24 tâches et 36 crédits par exécution, soit environ 1 080 crédits par mois à un intervalle quotidien. Lisez les prix en vigueur depuis l’endpoint capabilities au lieu de les coder en dur. Deux propriétés du calendrier sont bonnes à connaître avant de s’y fier :
  • Une exécution n’est pas une rafale. Les tâches sont admises au rythme que permettent la concurrence de l’offre et la file : une exécution qui dépasse la limite d’une offre gratuite arrive sur plusieurs minutes au lieu d’être abandonnée. Surveillez health.pending dans un rapport pour voir une exécution en cours.
  • La fenêtre suivante est un horaire, pas une garantie. nextRunAt est le moment où l’exécution est due ; un moniteur en pause pendant une semaine reprend un intervalle après sa réactivation au lieu de lancer les exécutions manquées.
La recherche de vos concurrents ajoute 100 crédits par mois et par moniteur, répartis entre ses exécutions selon l’intervalle : environ 3 crédits par exécution pour un moniteur quotidien, environ 23 pour un hebdomadaire. Ils sont prélevés une fois toutes les tâches d’une exécution admises : une exécution arrêtée par votre solde ne paie rien pour cela.

Endpoints

Tous utilisent la même clé bearer que le reste de l’API (voir Authentification). Un moniteur appartenant à un autre compte répond 404, pas 403.

Créer un moniteur

name, engines, prompts, aliases et intervalHours sont obligatoires sur un moniteur de marque ; un moniteur de catégorie prend category à la place de aliases. Chaque liste accepte un tableau ou une chaîne unique séparée par des retours à la ligne ; les entrées sont nettoyées, les lignes vides supprimées et les doublons retirés. country choisit le marché pour lequel les moteurs répondent et ne traduit pas les prompts. prompts × engines doit rester inférieur ou égal à la limite tasksPerRun de capabilities. Les moteurs sont les surfaces de prompt planifiables : CHATGPT, GEMINI, PERPLEXITY, GOOGLE, AIMODE, NAVER_AI_BRIEF, NAVER_AI_TAB et l’alias obsolète NAVER. GOOGLE_AIO et GOOGLE_AIMODE sont acceptés et stockés comme GOOGLE et AIMODE. Les tâches d’analyse comme SOURCE_INFLUENCE ne sont pas des surfaces de prompt et ne peuvent pas être planifiées sur un moniteur. Une clé restreinte à certains moteurs ne peut planifier que ceux-ci ; tout autre renvoie 403 KEY_SCOPE_DENIED. La limite de moniteurs du compte renvoie 409 MONITOR_LIMIT.

L’exécuter, puis lire le rapport

POST /v1/monitors/{id}/run rend la prochaine exécution due immédiatement, et les tâches de réponse apparaissent en une minute environ. Elle est facturée comme une exécution planifiée, et relancer l’appel tant que cette fenêtre est encore due ne facture pas deux fois. GET /v1/monitors/{id}/analytics est le contrat dont doit provenir chaque élément de votre rapport. Sa fenêtre est semi-ouverte et en UTC (since inclus, until exclu) et se choisit de l’une de ces deux façons : Deux filtres facultatifs s’appliquent à toutes les sections à la fois : engine (id canonique ou alias public) et prompt (texte exact, jusqu’à 2 000 caractères). Les lignes sont indexées par le texte du prompt : un prompt retiré ensuite du moniteur reste interrogeable. Toutes les sections partagent cette cohorte, et l’intervalle précédent a exactement la même durée et les mêmes filtres : la comparaison se fait à conditions égales.

Ce que signifient les chiffres

Lisez ceci avant d’étiqueter un panneau de tableau de bord. Les définitions sont le contrat publié, et GET /v1/monitors/capabilities les renvoie sous metrics pour qu’un client puisse les afficher à côté des chiffres.
  • mentionRate pour la fenêtre, ses groupes par moteur et ses groupes par cellule vaut 100 × réponses avec mention / réponses notées. Il est pondéré par les réponses, pas une moyenne des taux par moteur : un moteur très actif ne peut pas être écrasé par un moteur peu actif. (Le taux propre d’une marque a son propre dénominateur, expliqué ci-dessous.)
  • citationRate a la même forme pour les réponses qui ont cité l’un de vos domaines enregistrés. Sans domaine enregistré, il vaut toujours zéro, car le suivi des citations est désactivé.
  • Le taux d’une marque se divise par son propre sampleSize, pas par le total de la fenêtre. Pour votre marque, ce sont toutes les réponses notées ; pour un concurrent, seulement les réponses notées pendant qu’il figurait sur le moniteur. Ajoutez un concurrent aujourd’hui et son premier rapport couvre les réponses qui l’ont mesuré : l’historique antérieur ne compte pas contre lui. Une marque sans réponse éligible affiche mentionRate: null, pas 0 %, car 0 % se lirait comme une vraie disparition.
  • shareOfVoice dans brands vaut 100 × mentions de cette marque / toutes les mentions des marques suivies sur la fenêtre : les parts d’une fenêtre totalisent donc 100. Il compare les marques au sein des réponses que vous avez collectées pour ces prompts ; ce n’est ni une part de marché ni un classement de visibilité. Le shareOfVoice de l’endpoint de détail hérité est l’ancienne vue de pénétration des réponses, où chaque marque est comptée par rapport aux réponses collectées et où le total peut dépasser 100 : ne mélangez pas les deux dans un même graphique.
  • competitorOnly (et la liste opportunities) compte les réponses qui ont nommé un concurrent configuré alors que votre marque était absente. C’est l’écart sur lequel vous pouvez agir.
  • Les taux sont nullables, pas nuls. Aucune réponse dans la fenêtre donne null ; un taux de zéro signifie qu’il y a eu des réponses et qu’aucune ne correspondait.
  • Une observation terminée sans réponse compte comme non mentionnée. Elle reste dans le dénominateur, et quality.noAnswerObservations indique combien il y en a eu. Une tâche échouée est exclue de tous les taux et n’apparaît que dans health : un moteur en panne réduit l’échantillon au lieu de devenir silencieusement une absence, et quality ne la reconstruit jamais comme telle (historicalFailures vaut toujours null).
  • Les variations sont masquées quand elles induiraient en erreur. changes et le mentionRateChangePp par cellule valent null, et quality.comparable vaut false, lorsqu’une période n’a aucune réponse (insufficient_periods), lorsque des lignes ont été notées avant l’existence du contexte de notation (legacy_scoring_unknown), ou lorsque la définition de notation a changé entre les périodes (scoring_definitions_changed). Les lignes historiques gardent les définitions avec lesquelles elles ont été notées (quality.scoring) : modifier vos alias ou concurrents ne réécrit jamais le passé. Seule exception : la lecture mensuelle des concurrents décrite plus haut.
  • La taille d’échantillon est publiée. quality.lowSample est true en dessous de 30 réponses notées, quality.missingCells compte les cellules prompt × moteur configurées encore sans réponse, et quality.partialDays nomme les jours UTC que la fenêtre coupe en deux : le comptage plus faible d’un jour partiel est arithmétique, pas un déclin.
position sur une ligne notée est l’offset de caractère de la première occurrence d’alias dans le texte de la réponse : un indicateur de mise en avant, pas un classement. Il vaut null quand la marque est absente, si bien que 0 n’a jamais à signifier « absent ».

D’où viennent les réponses

GET /v1/monitors/{id}/sources répond à la question « quelles pages remportent ces prompts », avec la même fenêtre et les mêmes filtres que le rapport, en comptant des réponses distinctes plutôt que des citations brutes : une page citée trois fois dans une réponse compte une fois. Chaque ligne porte citations et prompts (tous deux des comptages de réponses distinctes), own pour vos domaines enregistrés, et un evidenceTaskId que vous pouvez ouvrir avec l’endpoint des réponses. Il n’y a pas de coupe silencieuse aux N premiers : chaque domaine ou page de la fenêtre est accessible en suivant le curseur.

Citations dans le temps

GET /v1/monitors/{id}/citations renvoie les données des graphiques de citations du tableau de bord : le total quotidien des citations sur la fenêtre, et une série quotidienne pour chaque domaine et page principal. Il lit seulement les résultats enregistrés et ne consomme donc aucun crédit. Ici, une citation est une page apparaissant dans une réponse : la même page deux fois dans une réponse compte une seule fois. /sources compte les réponses distinctes, ses chiffres peuvent donc différer. La part d’une source est son citations divisé par totals.citations. kind, q et offset ne font que restreindre les listes ; totals, days et types couvrent toujours toutes les sources de la fenêtre.

Exporter les lignes notées

GET /v1/monitors/{id}/results renvoie les lignes elles-mêmes, pour un chargement en entrepôt de données, un support hebdomadaire ou un tableur. La pagination est un keyset sur (ranAt, id) à la microseconde près : des lignes partageant un horodatage ne peuvent être ni sautées ni répétées. Pour rendre l’extraction reproductible : envoyez des since et until explicites, gardez-les fixes, et suivez nextCursor jusqu’à ce qu’il vaille null. Changer la fenêtre entre deux pages peut sauter ou répéter des lignes. Traitez le curseur comme opaque : il est renvoyé et réémis, jamais construit. Avec format=csv, la réponse est en text/csv (UTF-8 avec BOM, pour qu’Excel l’ouvre correctement) et l’état de pagination passe dans les en-têtes, car un corps CSV n’a nulle part ailleurs où le placer : Les colonnes sont ran_at, monitor, engine, prompt, mentioned, cited, position, competitors, task_id, plus answer_text, sources, scoring_context quand includeEvidence=true (sources et scoring_context en texte JSON dans leurs cellules). Les cellules qui pourraient être interprétées comme une formule de tableur sont neutralisées avant écriture : un texte tiers ne peut pas devenir une formule dans votre feuille.

Lire la réponse derrière un chiffre

GET /v1/monitors/{id}/answers/{taskId} renvoie la preuve conservée pour une ligne :
  • answerText : la réponse telle que le moteur l’a donnée, en markdown si disponible, 8 000 caractères au plus, coupée avec des points de suspension si elle était plus longue.
  • sources : les citations dans l’ordre du moteur, chacune avec son libellé et sa position (à partir de 1) dans cette liste.
  • aliases et competitors : ce à quoi cette ligne a été comparée, pour que la mention puisse être vérifiée plutôt que crue sur parole.
  • scoringContext : la définition exacte utilisée, avec un hash version, l’heure de notation, answerPresent et evidenceTruncated quand le texte ci-dessus a été coupé.
Les lignes notées avant que le contexte de notation ne soit stocké renvoient scoringKnown: false avec les alias actuels du moniteur et un evidenceTruncated à null. answerText vaut null quand le moteur n’a renvoyé aucun texte de réponse.

Erreurs sur cette surface

L’enveloppe est la même que partout ailleurs (voir Erreurs) ; les codes propres au suivi sont :

Un agent dans la boucle

Une séquence pratique pour un agent ou un script, avec uniquement les endpoints de cette page. Elle est illustrative : remplacez la clé, l’id du moniteur et la fenêtre par les vôtres.
  1. GET /v1/monitors/capabilities : lisez les moteurs, les prix et les limites avant de dépenser quoi que ce soit.
  2. GET /v1/monitors : réutilisez un moniteur existant pour le sujet et le marché, ou POST /v1/monitors pour en créer un (en appelant éventuellement d’abord POST /v1/monitors/suggest et en modifiant les candidats).
  3. POST /v1/monitors/{id}/run : si vous avez besoin de réponses avant la prochaine fenêtre planifiée.
  4. GET /v1/monitors/{id}/analytics?days=30&engine=CHATGPT : lisez d’abord quality (comparable, lowSample, missingCells, partialDays), puis les chiffres. Interrogez jusqu’à ce que health.pending se stabilise et que quality.sampleSize cesse d’augmenter.
  5. GET /v1/monitors/{id}/sources?days=30&groupBy=page : parcourez les pages avec nextCursor pour trouver celles qui remportent les prompts.
  6. GET /v1/monitors/{id}/answers/{taskId} : ouvrez la réponse derrière la première entrée de opportunities avant de décider quoi que ce soit.
  7. GET /v1/monitors/{id}/results?since=...&until=...&includeEvidence=true&format=csv : exportez la même fenêtre en suivant x-next-cursor jusqu’à ce qu’il soit vide.
Les mêmes opérations sont exposées aux agents sous forme d’outils MCP (get_monitor_capabilities, list_monitors, get_monitor, create_monitor, update_monitor, delete_monitor, run_monitor, get_monitor_analytics, get_monitor_sources, get_monitor_results, get_monitor_answer, suggest_monitor_prompts, get_monitor_alerts, test_monitor_alert). Les écritures sont annotées comme des mutations, et create_monitor et run_monitor précisent qu’ils consomment des crédits avant d’être appelés.

Limites

Consultez les tarifs et la référence des moteurs avant d’augmenter le volume.