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

# Obtenir l’analyse de préparation du site

> Lisez l’analyse enregistrée de préparation du site pour robots.txt, llms.txt et sitemap.xml.

Renvoie la dernière analyse enregistrée de préparation du site pour `robots.txt`, `llms.txt` et `sitemap.xml`. Le champ de réponse reste `aiReadiness` par compatibilité. Cette requête en lecture seule ne lance pas d’exploration.

<Note>
  Sans analyse enregistrée, `analyzed` vaut `false`, `aiReadiness` et les champs d’analyse valent `null`, et la réponse inclut un message expliquant comment le produit initialise l’analyse.
</Note>

<ParamField header="Authorization" type="string" required>
  Jeton bearer. Exemple : `Bearer qw-api-xxx`
</ParamField>

## Paramètres de chemin

<ParamField path="brandId" type="string" required>
  L’identifiant unique de la marque
</ParamField>

## Formule du score de préparation du site

Sur 100 :

* robots.txt présent : **+20**
* crawlers autorisés : **+round((entrées Allowed ou Partial / entrées de crawlers renvoyées) × 40)**. Sans entrée de crawler, ce critère vaut 0 point.
* llms.txt présent : **+20**
* sitemap.xml présent : **+20**

Un robots.txt absent ou invalide plafonne donc le score à 40.

## Réponse

<ResponseField name="success" type="boolean">Indique si la requête a réussi</ResponseField>

<ResponseField name="brand" type="object">`id`, `name`, `domain`</ResponseField>

<ResponseField name="analyzed" type="boolean">
  `false` tant qu’aucune analyse n’a été générée (tous les champs d’analyse valent alors `null`)
</ResponseField>

<ResponseField name="aiReadiness" type="object">
  <Expandable title="AI Readiness">
    <ResponseField name="score" type="number | null">Score de préparation du site (`0-100`), ou `null` lorsqu’au moins un fichier n’a pas pu être entièrement vérifié</ResponseField>
    <ResponseField name="isComplete" type="boolean">`false` lorsqu’au moins un fichier n’a pas pu être entièrement vérifié ; `score` vaut alors `null`</ResponseField>
    <ResponseField name="issuesCount" type="number">Nombre de problèmes détectés</ResponseField>
    <ResponseField name="optimizationsCount" type="number">Nombre d’optimisations suggérées</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="robotsUrl" type="string">URL contrôlée pour robots.txt</ResponseField>
<ResponseField name="llmsUrl" type="string">URL contrôlée pour llms.txt</ResponseField>
<ResponseField name="sitemapUrl" type="string">URL contrôlée pour sitemap.xml</ResponseField>

<ResponseField name="robotsAnalysis" type="object">
  <Expandable title="Analyse du fichier">
    <ResponseField name="status" type="string">`present`, `missing`, `error` ou `invalid`</ResponseField>
    <ResponseField name="verificationIncomplete" type="boolean">`true` lorsqu’une limite de taille ou une réponse partielle a empêché la vérification complète de ce fichier</ResponseField>
    <ResponseField name="finalUrl" type="string">URL finale après redirections</ResponseField>
    <ResponseField name="error" type="string">Message d’erreur lorsque le statut est `error`</ResponseField>
    <ResponseField name="content" type="string">Contenu du fichier récupéré</ResponseField>
    <ResponseField name="crawlers" type="object">Table par crawler `{ status: "Allowed" | "Disallowed" | "Partial", reason }` (robots.txt uniquement)</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="llmsAnalysis" type="object">Même forme que `robotsAnalysis` (sans `crawlers`)</ResponseField>
<ResponseField name="sitemapAnalysis" type="object">Même forme que `robotsAnalysis` (sans `crawlers`)</ResponseField>

<ResponseField name="lastAnalyzedAt" type="string">Horodatage de la dernière analyse (ISO 8601) ou `null`</ResponseField>
<ResponseField name="generatedLlmsTxt" type="string">Modèle de llms.txt généré, ou `null` s’il n’a jamais été généré</ResponseField>

## Exemple de requête

```bash theme={null}
curl -X GET "https://www.qwairy.co/api/v1/brands/cm1234567890abcdef/technical-analysis" \
  -H "Authorization: Bearer qw-api-your-token-here"
```

## Exemple de réponse

```json theme={null}
{
  "success": true,
  "brand": { "id": "cm1234567890abcdef", "name": "Northstar Labs", "domain": "northstar.example" },
  "analyzed": true,
  "aiReadiness": {
    "score": 80,
    "isComplete": true,
    "issuesCount": 0,
    "optimizationsCount": 1
  },
  "robotsUrl": "https://northstar.example/robots.txt",
  "llmsUrl": "https://northstar.example/llms.txt",
  "sitemapUrl": "https://northstar.example/sitemap.xml",
  "robotsAnalysis": {
    "status": "present",
    "finalUrl": "https://northstar.example/robots.txt",
    "crawlers": {
      "GPTBot": { "status": "Allowed", "reason": "No matching disallow rule" },
      "ClaudeBot": { "status": "Allowed", "reason": "No matching disallow rule" }
    }
  },
  "llmsAnalysis": { "status": "missing" },
  "sitemapAnalysis": { "status": "present", "finalUrl": "https://northstar.example/sitemap.xml" },
  "lastAnalyzedAt": "2026-05-12T08:30:00.000Z",
  "generatedLlmsTxt": null
}
```

## Erreurs

| Statut | Code | Description |
| - | - | - |
| `401` | erreur de passerelle | Échec de l’authentification |
| `404` | `BRAND_NOT_FOUND` | Marque introuvable ou inaccessible |
| `429` | erreur de passerelle | Limite de débit dépassée ; respectez `Retry-After` |


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