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 portentsource: "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.
competitorsReadAtsur 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 :
rankordonne 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 arank: null.- Le
mentionRated’une marque se divise par son propresampleSize, 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. shareOfVoicevaut100 × mentions de cette marque / toutes les mentions de marques suiviesdans la fenêtre : les parts d’une même fenêtre totalisent donc 100.GET /v1/monitorsajouteleader(la marque la plus citée, avec son taux) à chaque moniteur de catégorie. Ses compteursmentionedetcitedvalent toujours0.GET /v1/monitors/{id}/answers/{taskId}renvoiemode, unaliasesvide et les marques suivies commecompetitors.
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.
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 :- 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.pendingdans un rapport pour voir une exécution en cours. - La fenêtre suivante est un horaire, pas une garantie.
nextRunAtest 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.
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é, etGET /v1/monitors/capabilities les renvoie sous metrics pour qu’un client puisse les afficher à côté des chiffres.
mentionRatepour la fenêtre, ses groupes par moteur et ses groupes par cellule vaut100 × 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.)citationRatea 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 affichementionRate: null, pas 0 %, car 0 % se lirait comme une vraie disparition. shareOfVoicedansbrandsvaut100 × mentions de cette marque / toutes les mentions des marques suiviessur 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é. LeshareOfVoicede 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 listeopportunities) 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.noAnswerObservationsindique combien il y en a eu. Une tâche échouée est exclue de tous les taux et n’apparaît que danshealth: un moteur en panne réduit l’échantillon au lieu de devenir silencieusement une absence, etqualityne la reconstruit jamais comme telle (historicalFailuresvaut toujoursnull). - Les variations sont masquées quand elles induiraient en erreur.
changeset lementionRateChangePppar cellule valentnull, etquality.comparablevautfalse, 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.lowSampleest true en dessous de 30 réponses notées,quality.missingCellscompte les cellules prompt × moteur configurées encore sans réponse, etquality.partialDaysnomme 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.aliasesetcompetitors: 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 hashversion, l’heure de notation,answerPresentetevidenceTruncatedquand le texte ci-dessus a été coupé.
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.GET /v1/monitors/capabilities: lisez les moteurs, les prix et les limites avant de dépenser quoi que ce soit.GET /v1/monitors: réutilisez un moniteur existant pour le sujet et le marché, ouPOST /v1/monitorspour en créer un (en appelant éventuellement d’abordPOST /v1/monitors/suggestet en modifiant les candidats).POST /v1/monitors/{id}/run: si vous avez besoin de réponses avant la prochaine fenêtre planifiée.GET /v1/monitors/{id}/analytics?days=30&engine=CHATGPT: lisez d’abordquality(comparable,lowSample,missingCells,partialDays), puis les chiffres. Interrogez jusqu’à ce quehealth.pendingse stabilise et quequality.sampleSizecesse d’augmenter.GET /v1/monitors/{id}/sources?days=30&groupBy=page: parcourez les pages avecnextCursorpour trouver celles qui remportent les prompts.GET /v1/monitors/{id}/answers/{taskId}: ouvrez la réponse derrière la première entrée deopportunitiesavant de décider quoi que ce soit.GET /v1/monitors/{id}/results?since=...&until=...&includeEvidence=true&format=csv: exportez la même fenêtre en suivantx-next-cursorjusqu’à ce qu’il soit vide.
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.