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

# Preuves de moniteur : sources citées, réponses et export des résultats

> Voyez quelles pages citent les moteurs, ouvrez la réponse exacte derrière n'importe quel chiffre et exportez les réponses notées d'un moniteur en JSON ou en CSV.

Chaque chiffre d'un [rapport de moniteur](/fr/monitors/reports.md) provient de réponses notées que vous pouvez ouvrir. Cette page
couvre les endpoints de lecture qui les montrent : quelles sources sont citées, comment les citations évoluent dans le temps, la
réponse derrière une note, un prompt en détail, les réponses par localisation, et l'export complet. Ils ne lisent que
des résultats enregistrés et ne coûtent donc rien.

| Endpoint | Répond à |
| - | - |
| [`GET /v1/monitors/{id}/sources`](#quelles-sources-sont-citées) | Quels domaines ou pages sont cités, chaque ligne étant accessible par curseur. |
| [`GET /v1/monitors/{id}/citations`](#citations-dans-le-temps) | Totaux de citations et séries quotidiennes pour les principaux domaines et pages. |
| [`GET /v1/monitors/{id}/answers/{taskId}`](#lire-une-réponse) | La réponse enregistrée derrière une note. |
| [`GET /v1/monitors/{id}/prompt`](#un-prompt-en-détail) | La série quotidienne, les sources et les réponses récentes d'un prompt. |
| [`GET /v1/monitors/{id}/grid`](#réponses-par-localisation) | Les réponses par point de la localisation ou de la grille d'un moniteur. |
| [`GET /v1/monitors/{id}/results`](#exporter-les-réponses-notées) | Les réponses notées elles-mêmes, en JSON ou en CSV. |

## Quelles sources sont citées

`GET /v1/monitors/{id}/sources` ([référence](/fr/api-reference/monitors/list-sources.md)) classe les domaines ou
pages que les moteurs ont cités, avec la même fenêtre et les mêmes filtres que le rapport. Il compte des **réponses distinctes**,
pas des citations brutes : une page citée trois fois dans une réponse compte une fois.

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/sources?days=30&groupBy=domain&limit=2" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| Paramètre | Description |
| - | - |
| `groupBy` | `domain` (par défaut) : l'hôte sans `www.`, port ni identifiants. `page` : l'URL complète. |
| `limit` | 1 à 100, 20 par défaut. |
| `cursor` | Le `nextCursor` de la réponse précédente, inchangé. |
| `days`, `since`, `until`, `engine`, `prompt` | Comme pour le [rapport](/fr/monitors/reports.md#paramètres-de-requête). |

Par exemple :

```json theme={"theme":"css-variables"}
{
  "success": true,
  "data": {
    "results": [
      {
        "key": "reviews.example",
        "domain": "reviews.example",
        "url": null,
        "label": "Best wireless earbuds of 2026",
        "citations": 11,
        "prompts": 2,
        "own": false,
        "evidenceTaskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a61"
      },
      {
        "key": "rtings.example",
        "domain": "rtings.example",
        "url": null,
        "label": "Earbuds reviews",
        "citations": 7,
        "prompts": 1,
        "own": false,
        "evidenceTaskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a62"
      }
    ],
    "nextCursor": "eyJrZXkiOiJydGluZ3MuZXhhbXBsZSIsImNpdGF0aW9ucyI6N30",
    "groupBy": "domain",
    "window": { "since": "2026-09-19T07:00:00.000Z", "until": "2026-10-19T07:00:00.000Z" },
    "filters": { "engine": null, "prompt": null },
    "counting": "distinct_answers",
    "ownership": "current_monitor_domains"
  }
}
```

| Champ | Signification |
| - | - |
| `citations` | Réponses qui ont cité ce domaine ou cette page. |
| `prompts` | Prompts distincts dont les réponses l'ont cité. |
| `own` | S'il s'agit de l'un des `domains` actuels du moniteur ou d'un de leurs sous-domaines (`ownership: "current_monitor_domains"`). |
| `url` | L'URL de la page avec `groupBy=page` ; `null` pour les domaines. |
| `label` | Le libellé de la citation tel que le moteur l'a donné, s'il existe. |
| `evidenceTaskId` | Une réponse qui l'a cité. Ouvrez-la avec l'[endpoint des réponses](#lire-une-réponse). |

Les lignes sont triées par `citations`, puis par `key`. `nextCursor` vaut `null` sur la dernière page ; il n'y a pas de coupe
aux N premiers : chaque domaine ou page cité dans la fenêtre est accessible. Traitez le curseur comme opaque.

## Citations dans le temps

`GET /v1/monitors/{id}/citations` ([référence](/fr/api-reference/monitors/get-citations.md)) renvoie les données
des graphiques de citations du tableau de bord : les totaux de la fenêtre, une série quotidienne, et les 20 principaux domaines et
pages, chacun avec sa propre série quotidienne.

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/citations?days=30&kind=owned" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| Paramètre | Description |
| - | - |
| `days` | `7`, `30` (par défaut) ou `90`. |
| `since`, `until` | Une fenêtre fixe, comme pour le rapport. S'ils sont fournis, `days` est seulement renvoyé tel quel dans `windowDays`. |
| `engine` | Un moteur, ou `all` (par défaut). |
| `prompt` | Un prompt, par texte exact. |
| `kind` | `all` (par défaut), `owned`, `editorial`, `review_media`, `pr_wire`, `institution`, `reviews`, `commerce`, `social`, `blog`, `community`, `video`, `brand`, `content` ou `other`. |
| `q` | Conserve les domaines dont le nom, ou les pages dont l'URL, contient ce texte. 200 caractères au plus. |
| `offset` | 0 à 10 000, pour parcourir les listes de domaines et de pages 20 par 20. |

Ici, une citation est une page dans une réponse : `citations` compte donc des pages citées, pas des réponses. `/sources`
compte des réponses distinctes : ses chiffres peuvent donc différer.

| Champ | Contenu |
| - | - |
| `totals` | `answers` (réponses notées), `citedAnswers`, `citations` et `ownedCitations` pour la fenêtre. |
| `days` | Une entrée par jour UTC avec des réponses : `day`, `answers`, `citations`, `ownedCitations`. Un jour avec des réponses mais sans citation a `citations: 0` ; un jour sans réponse est absent. |
| `domains`, `pages` | Jusqu'à 20 lignes à partir de `offset` : `key`, `domain`, `label`, `kind`, `owned`, `citations`, `answers`, `prompts`, et `daily`, une liste de `{ day, citations }` pour les jours avec des citations. |
| `types` | Par `kind` : `citations` et `domains` distincts. |
| `pagination` | `offset`, `limit` (20), `totalDomains`, `totalPages`. |
| `windowDays`, `engine`, `prompt`, `since`, `until` | Le périmètre lu. |

`kind` vaut `owned` pour vos domaines ; les autres types proviennent d'une liste fixe d'éditeurs connus, et tout domaine
inconnu est `other`. La part d'une source est son `citations` divisé par `totals.citations`. `kind`, `q` et
`offset` ne restreignent que `domains`, `pages` et `pagination` ; `totals`, `days` et `types` couvrent toujours toutes les
sources de la fenêtre.

## Lire une réponse

`GET /v1/monitors/{id}/answers/{taskId}` ([référence](/fr/api-reference/monitors/get-answer.md)) renvoie la
réponse enregistrée derrière une note, avec ce à quoi elle a été comparée, pour qu'une mention puisse être vérifiée plutôt que
crue sur parole. Les ids de tâche proviennent de `evidenceTaskId`, `mentionTaskId` et `latestTaskId` dans un rapport, de
`/sources` et des lignes exportées.

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/answers/6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a61" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

Par exemple :

```json theme={"theme":"css-variables"}
{
  "success": true,
  "data": {
    "answer": {
      "taskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a61",
      "engine": "CHATGPT",
      "prompt": "best wireless earbuds for commuting",
      "mentioned": true,
      "cited": true,
      "position": 81,
      "ranAt": "2026-10-17T09:01:48.311Z",
      "answerText": "For commuting, look at the **Northwind Audio Pro** for noise cancelling or the **Acme Audio Air** for battery life.",
      "sources": [
        { "url": "https://reviews.example/best-earbuds", "label": "Best wireless earbuds of 2026", "position": 1 },
        { "url": "https://acme-audio.example/air", "label": "Acme Audio Air", "position": 2 }
      ],
      "competitorHits": ["Northwind Audio"],
      "scoringContext": {
        "aliases": ["Acme Audio", "Acme"],
        "domains": ["acme-audio.example"],
        "competitors": [
          { "name": "Northwind Audio", "aliases": ["Northwind Audio"], "source": "user" },
          { "name": "Contoso Sound", "aliases": ["Contoso Sound", "Contoso"], "source": "user" }
        ],
        "country": "US",
        "version": "3f9a6c1e8b2d4f7a9c0e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e7b9d1f3a",
        "scoredAt": "2026-10-17T09:01:48.305Z",
        "answerPresent": true,
        "evidenceTruncated": false
      },
      "analysis": null
    },
    "display": {
      "markdown": "For commuting, look at the **Northwind Audio Pro** for noise cancelling or the **Acme Audio Air** for battery life.",
      "text": "For commuting, look at the Northwind Audio Pro for noise cancelling or the Acme Audio Air for battery life."
    },
    "mode": "BRAND",
    "aliases": ["Acme Audio", "Acme"],
    "competitors": [
      { "name": "Northwind Audio", "aliases": ["Northwind Audio"], "source": "user" },
      { "name": "Contoso Sound", "aliases": ["Contoso Sound", "Contoso"], "source": "user" }
    ],
    "scoringKnown": true,
    "evidenceTruncated": false
  }
}
```

| Champ | Signification |
| - | - |
| `answer` | La réponse notée, telle qu'enregistrée. |
| `answer.answerText` | La réponse, en markdown quand le moteur l'a fournie ainsi, coupée à 8 000 caractères avec un `…` final. `null` quand le moteur n'a renvoyé aucun texte. |
| `answer.sources` | Les pages citées dans l'ordre du moteur, dédupliquées par URL, chacune avec son `label` et sa `position` (à partir de 1). |
| `answer.competitorHits` | Les concurrents cités dans la réponse. |
| `answer.position` | Offset de caractère de la première occurrence de votre marque, ou `null`. |
| `answer.scoringContext` | La définition avec laquelle la réponse a été notée : `aliases`, `domains`, `competitors`, `country`, son hash `version`, `scoredAt`, `answerPresent` et `evidenceTruncated`. `null` pour les réponses notées avant son stockage. |
| `answer.analysis` | Le résultat de l'[analyse de la réponse](/fr/engines/answer-analysis.md) quand le moniteur a `analysis: true`, sinon `null`. |
| `display` | Les champs d'affichage de la réponse de la tâche d'origine, comme `markdown`, `text`, `sources`, `searchQueries`, la mise en page, les lieux et les produits, selon le moteur. `null` quand la tâche d'origine n'est plus stockée. |
| `mode` | Le mode du moniteur. Sur un moniteur de catégorie, `aliases` est vide et `competitors` est la liste des marques suivies. |
| `aliases`, `competitors` | Ce à quoi cette réponse a été comparée : issus de `scoringContext`, ou les valeurs actuelles du moniteur quand il vaut `null`. |
| `scoringKnown` | `false` quand la réponse est antérieure au stockage du contexte de notation ; `aliases` et `competitors` sont alors les valeurs actuelles du moniteur. |
| `evidenceTruncated` | Si `answerText` a été coupé. `null` quand `scoringKnown` vaut `false`. |

Un id de tâche qui n'est pas une réponse notée de ce moniteur renvoie `404 NOT_FOUND`.

## Un prompt en détail

`GET /v1/monitors/{id}/prompt` ([référence](/fr/api-reference/monitors/get-prompt.md)) renvoie les données d'un
prompt. `prompt` (texte exact) est obligatoire et fonctionne pour les prompts que vous avez depuis retirés du moniteur ;
`days` vaut `7`, `30` (par défaut) ou `90`.

```bash theme={"theme":"css-variables"}
curl -G "https://api.querying.ai/v1/monitors/$MONITOR_ID/prompt" \
  --data-urlencode "prompt=best wireless earbuds for commuting" \
  --data-urlencode "days=30" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| Champ | Contenu |
| - | - |
| `monitor` | `id`, `name`, `engines` et `aliases`. |
| `prompt`, `windowDays` | Ce qui a été lu. |
| `series` | Par jour UTC et par moteur : `day`, `engine`, `runs`, `mentioned`, `cited`. |
| `topDomains` | Jusqu'à 12 domaines cités : `domain`, `citations`, `prompts`, `own`. |
| `topPages` | Jusqu'à 20 pages citées : `url`, `domain`, `label`, `citations`, `prompts`, `own`. |
| `results` | Jusqu'à 100 réponses notées les plus récentes : `taskId`, `engine`, `prompt`, `mentioned`, `cited`, `position`, `ranAt`, `competitorHits`. |

Ici, `citations` compte les pages citées dans l'ensemble des réponses, pas des réponses distinctes. Pour une liste de sources
complète et paginée pour un prompt, utilisez `/sources?prompt=...`.

## Réponses par localisation

`GET /v1/monitors/{id}/grid` ([référence](/fr/api-reference/monitors/get-grid.md)) renvoie les réponses d'un moniteur par
point de sa [localisation ou grille](/fr/monitors.md#localisation-et-grilles) actuelle. Les paramètres facultatifs `engine` (l'un des
moteurs du moniteur) et `prompt` la restreignent ; `days` vaut `7`, `30` (par défaut) ou `90`.

La réponse contient `location`, `grid`, `engine`, `prompt`, `windowDays` et `points`. Chaque point a `row`,
`col`, `location`, `runs`, `mentioned`, `cited`, `topCompetitor` (`{ name, mentions }` ou `null`) et
`latest` (`{ taskId, engine, mentioned, ranAt }` de la réponse la plus récente, ou `null`). Les réponses sont associées aux
points par leurs coordonnées exactes : les réponses issues d'une localisation ou d'une grille antérieure du même moniteur sont
donc exclues. Un moniteur sans localisation ni grille ne renvoie aucun point.

## Exporter les réponses notées

`GET /v1/monitors/{id}/results` ([référence](/fr/api-reference/monitors/export-results.md)) renvoie les réponses
notées elles-mêmes, pour un chargement en entrepôt de données, un tableur ou une présentation. Pour livrer plutôt chaque nouvelle réponse vers un
stockage cloud selon un calendrier, voir [Exports de résultats](/fr/exports.md).

```bash theme={"theme":"css-variables"}
curl "https://api.querying.ai/v1/monitors/$MONITOR_ID/results?since=2026-10-01T00:00:00Z&until=2026-10-18T00:00:00Z&mentioned=false" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

| Paramètre | Description |
| - | - |
| `since`, `until` | Fenêtre semi-ouverte. Par défaut : les 30 jours se terminant maintenant. Instants ISO avec fuseau horaire ; un `YYYY-MM-DD` seul est aussi accepté ici et lu comme minuit UTC. Il n'y a pas de durée maximale. |
| `engine`, `prompt` | Comme pour le rapport. |
| `mentioned`, `cited` | `true` ou `false`. `mentioned=false` est la vue des écarts. |
| `competitor` | Conserve les réponses dont les concurrents détectés enregistrés incluent ce nom exact, de 1 à 80 caractères. Il correspond au nom tel qu'il était stocké lors de la notation de chaque réponse et n'est pas vérifié par rapport aux concurrents actuels du moniteur : un nom que le moniteur n'a jamais suivi ne renvoie aucune ligne, pas une erreur. |
| `includeEvidence` | `true` ajoute `answerText`, `sources` et `scoringContext` à chaque ligne. |
| `limit` | 1 à 10 000, 10 000 par défaut. Avec `includeEvidence=true` : 1 à 100, 100 par défaut. |
| `format` | `json` (par défaut) ou `csv`. |
| `cursor` | Le `nextCursor` de la page précédente. |

La réponse JSON, par exemple :

```json theme={"theme":"css-variables"}
{
  "success": true,
  "data": {
    "monitor": { "id": "d39b8de0-b159-4229-bf58-7064e5369db1", "name": "Earbud brand tracking" },
    "since": "2026-10-01T00:00:00.000Z",
    "until": "2026-10-18T00:00:00.000Z",
    "filters": { "engine": null, "prompt": null, "mentioned": false, "cited": null, "competitor": null },
    "truncated": false,
    "nextCursor": null,
    "results": [
      {
        "id": "0b6e4a52-7c1d-4f8e-9a3b-2d5c6e7f8a91",
        "taskId": "6f1c2a9e-3b4d-4e5f-8a7b-1c2d3e4f5a63",
        "engine": "CHATGPT",
        "prompt": "are cheap earbuds worth it",
        "mentioned": false,
        "cited": false,
        "position": null,
        "ranAt": "2026-10-17T09:02:57.204118Z",
        "competitorHits": ["Northwind Audio"]
      }
    ]
  }
}
```

Les lignes sont triées de la plus récente à la plus ancienne. La pagination est un keyset sur `ranAt` (à la microseconde près) et l'`id` de ligne : des lignes
partageant un horodatage ne sont jamais sautées ni répétées. Pour une 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.

### CSV

Avec `format=csv`, la réponse est en `text/csv`, UTF-8 avec BOM pour que les tableurs l'ouvrent
correctement. Un corps CSV ne peut pas porter la pagination : elle passe donc dans les en-têtes.

| En-tête | Signification |
| - | - |
| `x-next-cursor` | Le curseur de la page suivante ; vide sur la dernière page. |
| `x-result-truncated` | `true` quand plus de lignes correspondaient que ce que cette page a renvoyé. |
| `x-result-since`, `x-result-until` | La fenêtre résolue, pour qu'un export repris puisse la figer. |

Les colonnes sont `ran_at, monitor, engine, prompt, mentioned, cited, position, competitors, task_id`, plus
`answer_text, sources, scoring_context` avec `includeEvidence=true`. `competitors` joint les noms avec
`|` ; `sources` et `scoring_context` contiennent du texte JSON. Une cellule qui commence par `=`, `+`, `-`, `@`, une tabulation
ou un retour chariot est préfixée par `'` : le texte d'un moteur ne peut donc pas devenir une formule de tableur.

```bash theme={"theme":"css-variables"}
curl -D headers.txt -o page1.csv \
  "https://api.querying.ai/v1/monitors/$MONITOR_ID/results?since=2026-10-01T00:00:00Z&until=2026-10-18T00:00:00Z&format=csv&includeEvidence=true" \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

## Erreurs et limites

| Limite | Valeur |
| - | - |
| Fenêtre de rapport et de sources | 90 jours |
| Page `/sources` | 1 à 100 lignes, 20 par défaut |
| Listes `/citations` | 20 lignes par page ; `offset` jusqu'à 10 000 |
| Page `/results` | 10 000 lignes ; 100 avec `includeEvidence=true` |
| Texte de réponse stocké | 8 000 caractères |
| `/prompt` | 12 domaines, 20 pages, 100 réponses |

Des paramètres invalides renvoient `400 VALIDATION_ERROR` en nommant le problème, y compris un curseur qui n'a pas été
renvoyé par la page précédente. Un moniteur d'un autre compte, ou un id de tâche inconnu, renvoie
`404 NOT_FOUND`. Voir [Moniteurs](/fr/monitors.md#erreurs) pour les codes communs.

## Étapes suivantes

> **[Événements et alertes](/fr/monitors/events-and-alerts.md)**
>
> Recevez un webhook quand les réponses d'un prompt changent.

> **[Exports de résultats](/fr/exports.md)**
>
> Livrez les réponses notées vers votre propre stockage selon un calendrier.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.