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

# API ChatGPT : réponses, sources et requêtes de recherche

> Posez une question à ChatGPT et recevez sa réponse, les sources citées, les requêtes de recherche, les produits et les conversations de suivi.

`CHATGPT` interroge ChatGPT avec la recherche web et renvoie la réponse, chaque source trouvée, les recherches lancées et les fiches de produits et de lieux affichées.

| | |
| - | - |
| taskType | `CHATGPT` |
| Lit | `prompt` (se rabat sur `query`) |
| Crédits | 1 par réponse |
| Pays | Facultatif, `US` par défaut. `CN` et `HK` sont interrogés depuis une sortie à Singapour avec une localisation d'appareil locale. |
| Localisation | Accepte `payload.location`. Consultez [Régions et localisation](/fr/engines/capacity.md). |

## Requête

```bash theme={"theme":"css-variables"}
curl -X POST https://api.querying.ai/v1/async/task \
  -H "Authorization: Bearer $QUERYING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskType": "CHATGPT", "payload": { "prompt": "best CRM for a small team", "country": "US" } }'
```

## Réponse

| Champ | Type | Description |
| - | - | - |
| `text` | string | La réponse en texte brut. |
| `markdown` | string | La réponse en Markdown, chaque photo à la place de sa carte. Activé par défaut. |
| `model` | string | Le modèle avec lequel ChatGPT a répondu. |
| `sources` | array | Chaque source : `position`, `url`, `label`, `footnote`, `datePublished`, `searchQueries`, `cited`, `citedText`. |
| `searchQueries` | string\[] | Les recherches web lancées par ChatGPT. Activé par défaut. |
| `shoppingCards`, `inlineProducts` | array | Fiches produit et noms de produit liés dans la réponse. Activé par défaut (`include.shopping`). |
| `ads` | array | Éléments sponsorisés de la réponse. Activé par défaut (`include.ads`). |
| `entities` | array | Lieux et produits nommés dans les cartes, chacun avec son `type`, comme `local_business` ou `product`, et son `name`. |
| `entityDetails` | array | Le panneau de détail de chaque carte. Uniquement avec `include.entityDetails`. Consultez [Détails des cartes](#détails-des-cartes). |
| `map` | array | Lieux affichés dans les cartes : adresse, coordonnées, téléphone, note et l'emoji `icon` avec lequel ChatGPT les épingle. `provider` est le flux d'où vient la fiche (`serp` et `bright-feed` pour Google Maps, `yelp-feed` pour Yelp, `tripadvisor-feed` pour Tripadvisor) ; `placeId` et `providerUrl` sont l'identifiant et la page du lieu dans ce flux. `resolvedBy: "address"` marque un lieu que ChatGPT a trouvé par l'adresse écrite par le modèle. `localName` est l'autre nom de la fiche, comme le nom coréen d'un commerce en Corée, et `closed` vaut `permanently` ou `temporarily`. |
| `citationPills` | array | Les sources derrière chaque pastille de citation en ligne. |
| `layout` | object | La disposition en cartes, quand ChatGPT présente la réponse sous forme de cartes. Voir plus bas. |
| `forms` | array | Les formulaires de suivi de la réponse, s'il y en a. Consultez [Conversations](#continuer-une-conversation-plus-tard). |
| `conversation` | object | `id`, `turn` et `expiresAt` de la conversation à laquelle appartient la réponse. |
| `html` | object | L'écran affiché par ChatGPT. Uniquement avec `include.html`. |
| `rawResponse` | array | Événements de flux analysés. Uniquement avec `include.rawResponse`. |

Par exemple, une réponse abrégée :

```json theme={"theme":"css-variables"}
{
  "text": "For a small team, HubSpot CRM and Pipedrive are the usual picks ...",
  "markdown": "For a small team, **HubSpot CRM** and **Pipedrive** are the usual picks ...",
  "model": "gpt-5-3",
  "sources": [
    {
      "position": 1,
      "url": "https://www.example.com/best-crm-small-business",
      "label": "The best CRM software for small businesses",
      "searchQueries": ["best CRM for small teams"],
      "cited": true,
      "citedText": ["HubSpot CRM and Pipedrive are the usual picks"]
    }
  ],
  "searchQueries": ["best CRM for small teams"],
  "conversation": { "id": "8f6c1d2e-...", "turn": 1, "expiresAt": "2026-10-19T12:00:00.000Z" }
}
```

Chaque source porte `searchQueries` (les recherches dont les résultats l'incluaient), `cited` (si la réponse la cite dans le texte) et `citedText` (le passage de la réponse que chaque citation appuie). Les sources qu'aucune recherche n'a renvoyées, comme les produits, n'ont pas de `searchQueries`.

### Disposition en cartes

`layout` apparaît quand ChatGPT présente la réponse sous forme de cartes. Ses `nodes` suivent l'ordre affiché par ChatGPT :

| Nœud | Contient |
| - | - |
| `row`, `box` | Des groupes de cartes. |
| `title`, `text`, `badge` | Le texte des cartes. |
| `image` | La photo : `images[].url`, `thumbnailUrl` et `pageUrl`. |
| `markdown` | Le reste de la réponse. |
| `map` | Dans `places`, la `position` de chaque lieu affiché. |
| `form` | Un formulaire qui vous demande de choisir une question de suivi. Ses nœuds `choice` portent les options et celle choisie au départ ; son nœud `button` porte la question que ChatGPT enverrait ensuite (`prompt`). Les formulaires sont exclus de `text` et `markdown`. |

## Flags include

`CHATGPT` respecte tous les flags de réponse. Tous sont activés par défaut sauf `rawResponse` et `html` ; envoyez `false` pour en désactiver un.

| Flag | Défaut | Effet |
| - | - | - |
| `markdown` | `true` | Ajoute `markdown`. |
| `searchQueries` | `true` | Ajoute `searchQueries`. |
| `shopping` | `true` | Ajoute les fiches produit. |
| `ads` | `true` | Ajoute `ads`. |
| `rawResponse` | `false` | Ajoute `rawResponse`. Consultez [Réponses Markdown et brutes](/fr/engines/response-options.md). |
| `html` | `false` | Ajoute `html`, 0,25 crédit quand la page est enregistrée. Refusé avec `422 EVIDENCE_UNSUPPORTED` avec `location`, `CN`, `HK` ou `continueFrom`. Consultez [Pages HTML](/fr/engines/html-pages.md). |
| `analysis` | `false` | Ajoute `analysis`, 1 crédit. Consultez [Analyse de la réponse](/fr/engines/answer-analysis.md). |
| `citationAnalysis` | `false` | Lance une [Citation Analysis](/fr/research/citation-analysis.md) sur la réponse. |
| `entityDetails` | `false` | Ajoute `entityDetails` sans crédit supplémentaire. Consultez [Détails des cartes](#détails-des-cartes). |

## Détails des cartes

Avec `include.entityDetails`, chaque carte de la réponse (un produit, un lieu, une app ou une marque) arrive avec le panneau de détail que ChatGPT ouvre quand le lecteur clique dessus : description, caractéristiques, avis et pages qui les appuient. Les panneaux citent leurs propres pages et montrent ainsi des sources absentes du texte de la réponse.

| Champ | Description |
| - | - |
| `name`, `category`, `query` | La carte telle que la réponse l'affiche, son type (`product`, `local_business`, `software`, `organization`) et le nom sous lequel ChatGPT l'a recherchée. |
| `status` | `ok`, ou `failed` avec une `error`. |
| `markdown` | Le panneau en Markdown, avec les puces de citation écrites comme dans la réponse. |
| `sources` | Chaque page citée une fois, dans l'ordre de sa première citation : `position`, `url`, `label`, `site`, `description`. |
| `products` | La fiche d'achat en tête du panneau d'un produit : `title`, `price`, `merchant`, `rating`, `num_reviews`, `url` et `offers`, au format de `shoppingCards[].products`. Seulement quand le panneau en affiche une. |
| `images` | Les photos du panneau. |
| `complete` | `false` quand ChatGPT a arrêté d'écrire le panneau avant la fin. Le texte et les sources jusqu'à ce point sont inclus. |

`error` vaut `ENTITY_DETAIL_FAILED` si la demande du panneau échoue, `ENTITY_DETAIL_EMPTY` si le panneau ne contient aucun texte et `ENTITY_DETAIL_UNAVAILABLE` si les données de conversation ou les identifiants du tour nécessaires sont absents. Les détails fonctionnent aussi avec `payload.location`, `CN`, `HK`, les réponses du chemin de repli et `include.html`.

Un panneau que ChatGPT a déjà écrit revient en une seconde environ ; un panneau qu'il écrit à la demande prend de 10 à 30 secondes, avec jusqu'à 4 panneaux à la fois. Jusqu'à 20 cartes sont ouvertes par réponse. Les panneaux n'ajoutent aucun crédit, et chaque réponse de suivi reçoit ses propres panneaux.

```json theme={"theme":"css-variables"}
"entityDetails": [
  {
    "name": "Brooks Adrenaline GTS 25",
    "category": "product",
    "query": "Brooks Adrenaline GTS 25",
    "status": "ok",
    "markdown": "## Brooks Adrenaline GTS 25\n\nThe **Brooks Adrenaline GTS 25** is a **stability road running shoe** ... ([Brooks Running](https://www.brooksrunning.com/...))\n\n### Key specifications\n\n| Feature | Details |\n| --- | --- |\n| Heel-to-toe drop | 10 mm |\n...",
    "sources": [
      { "position": 1, "url": "https://www.brooksrunning.com/...", "label": "Men's Adrenaline GTS 25 Running Shoes | Brooks Running", "site": "Brooks Running" },
      { "position": 2, "url": "https://www.rei.com/product/249691/...", "label": "Brooks Adrenaline GTS 25 Road-Running Shoes - Men's | REI Co-op", "site": "REI" }
    ],
    "images": ["https://images.openai.com/..."],
    "complete": true
  }
]
```

## Questions de suivi

`payload.followUps` pose jusqu'à 4 questions de plus dans la même conversation après la première réponse, dans l'ordre. Chaque élément est l'un des suivants :

* `{ "prompt": "..." }` : une question à vous.
* `{ "select": { "button": 0, "choices": { "budget": "Under $100" } } }` : appuie sur le bouton d'un formulaire de suivi de la réponse précédente.

`button` compte les boutons de la réponse à partir de 0 ; par défaut, c'est le premier. `choices` choisit les options par le `name` de chaque nœud `choice`, ou sous forme de tableau dans l'ordre du formulaire ; un choix est la `value` ou le `label` d'une option, ou sa position à partir de 0. Les choix que vous ne faites pas gardent l'option présélectionnée par ChatGPT : `{ "select": {} }` envoie donc le `prompt` propre au bouton.

```json theme={"theme":"css-variables"}
{
  "taskType": "CHATGPT",
  "payload": {
    "prompt": "best CRM for a small team",
    "country": "US",
    "followUps": [{ "prompt": "Which of these has the best free plan?" }]
  }
}
```

Les champs de premier niveau restent ceux de la première réponse. `followUps` dans la réponse liste chaque réponse suivante avec la question envoyée (`prompt`), ce sur quoi un `select` a appuyé (`selection` : le `label` du bouton et la valeur de chaque choix) et les mêmes champs que la première réponse.

Quand un `select` ne peut pas être appliqué, les questions de suivi restantes ne sont pas posées, et `followUpsStopped` indique l'`index` de la question de suivi, un `code` et un `message` :

| Code | Signification |
| - | - |
| `NO_FOLLOW_UP_FORM` | La réponse précédente n'affichait aucun formulaire. |
| `BUTTON_NOT_FOUND` | Aucun bouton à cet index. |
| `CHOICE_NOT_FOUND` | Aucun choix portant ce nom. |
| `OPTION_NOT_FOUND` | Aucune option ne correspond au choix. |
| `PROMPT_UNAVAILABLE` | Le bouton n'avait aucune question à envoyer. |

La tâche se termine quand même avec les réponses obtenues. Chaque réponse coûte 1 crédit : la tâche réserve des crédits pour chaque question de suivi et ne facture que les réponses qu'elle renvoie. `include.analysis`, `include.citationAnalysis` et `include.html` s'appliquent à la première réponse. Les autres moteurs refusent `followUps` avec `400 VALIDATION_ERROR`.

## Continuer une conversation plus tard

Pour lire une réponse avant de choisir la question suivante, envoyez une nouvelle tâche `CHATGPT` avec `payload.continueFrom` égal à l'id d'une tâche terminée, et soit un `prompt`, soit un `select` qui appuie sur un formulaire de la dernière réponse de cette tâche (mêmes règles que pour `followUps`).

```json theme={"theme":"css-variables"}
{
  "taskType": "CHATGPT",
  "payload": {
    "continueFrom": "8f6c1d2e-...",
    "select": { "button": 0 }
  }
}
```

* Une réponse qui affiche un formulaire contient `forms` : les `buttons` de chaque formulaire, dont l'ordre est `select.button`, et ses `choices` avec leur `name`, l'option sélectionnée au départ et les `options`.
* `conversation.id` est la tâche qui a ouvert la conversation, `turn` compte ses réponses jusqu'ici et `expiresAt` est le dernier moment pour la continuer, 3 heures après sa première réponse.
* Une continuation pose la question sous la dernière réponse de la tâche que vous nommez : nommer deux fois la même tâche crée donc une branche dans la conversation.
* Elle conserve le `country` et la `location` d'origine. Omettez-les ou envoyez les mêmes valeurs.
* Une tâche d'un autre compte ou d'un autre moteur, une tâche non terminée ou un `select` invalide est refusé avec `400 VALIDATION_ERROR`. Une conversation expirée est refusée avec `400 CONVERSATION_EXPIRED`. Aucun des deux n'est facturé.
* Une continuation coûte le même prix que toute tâche ChatGPT.

## Voir aussi

* [Page produit ChatGPT](https://querying.ai/fr/engines/chatgpt)
* [Vue d'ensemble des moteurs](/fr/engines/overview.md)


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