{
  "components": {
    "schemas": {
      "BatchScrapeResponseObj": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Si ignoreInvalidURLs vaut true, ce champ est un tableau contenant les URL invalides indiquées dans la requête. S’il n’y a aucune URL invalide, ce tableau est vide. Si ignoreInvalidURLs vaut false, ce champ est non défini (undefined).",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "success": {
            "type": "boolean"
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "BatchScrapeStatusResponseObj": {
        "properties": {
          "completed": {
            "description": "Le nombre de pages extraites avec succès.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "Le nombre de crédits utilisés pour le scraping par lots.",
            "type": "integer"
          },
          "data": {
            "description": "Les données du lot de scraping.",
            "items": {
              "properties": {
                "html": {
                  "description": "Version HTML du contenu de la page si `includeHtml` est défini sur `true`",
                  "nullable": true,
                  "type": "string"
                },
                "links": {
                  "description": "Liste des liens sur la page si `includeLinks` vaut `true`",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "markdown": {
                  "type": "string"
                },
                "metadata": {
                  "properties": {
                    "<any other metadata> ": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "error": {
                      "description": "Le message d’erreur de la page",
                      "nullable": true,
                      "type": "string"
                    },
                    "language": {
                      "nullable": true,
                      "type": "string"
                    },
                    "sourceURL": {
                      "format": "uri",
                      "type": "string"
                    },
                    "statusCode": {
                      "description": "Le code d'état de la page",
                      "type": "integer"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "rawHtml": {
                  "description": "Contenu HTML brut de la page si `includeRawHtml` est défini sur true",
                  "nullable": true,
                  "type": "string"
                },
                "screenshot": {
                  "description": "Capture d’écran de la page si `includeScreenshot` vaut true",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "La date et l’heure d’expiration du lot de scraping.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "L’URL permettant de récupérer les 10 Mo de données suivants. Renvoyée si le scraping par lots n’est pas terminé ou si la réponse dépasse 10 Mo.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "L’état actuel du scraping par lot. Les valeurs possibles sont `scraping`, `completed` ou `failed`.",
            "type": "string"
          },
          "total": {
            "description": "Nombre total de pages pour lesquelles un scraping a été tenté.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "CrawlErrorsResponseObj": {
        "properties": {
          "errors": {
            "description": "Tâches de scraping en échec et détails des erreurs",
            "items": {
              "properties": {
                "error": {
                  "description": "Message d’erreur",
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "timestamp": {
                  "description": "Horodatage ISO de l'échec",
                  "nullable": true,
                  "type": "string"
                },
                "url": {
                  "description": "URL explorée",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "robotsBlocked": {
            "description": "Liste des URL dont le scraping a été tenté mais qui ont été bloquées par le fichier robots.txt",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "CrawlResponse": {
        "properties": {
          "id": {
            "type": "string"
          },
          "success": {
            "type": "boolean"
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "CrawlStatusResponseObj": {
        "properties": {
          "completed": {
            "description": "Nombre de pages explorées avec succès.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "Le nombre de crédits consommés par le crawl.",
            "type": "integer"
          },
          "data": {
            "description": "Les données issues du crawl.",
            "items": {
              "properties": {
                "html": {
                  "description": "Version HTML du contenu de la page si `includeHtml` vaut true",
                  "nullable": true,
                  "type": "string"
                },
                "links": {
                  "description": "Liste des liens présents sur la page si `includeLinks` est à `true`",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "markdown": {
                  "type": "string"
                },
                "metadata": {
                  "properties": {
                    "<any other metadata> ": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "error": {
                      "description": "Le message d’erreur de la page",
                      "nullable": true,
                      "type": "string"
                    },
                    "language": {
                      "nullable": true,
                      "type": "string"
                    },
                    "sourceURL": {
                      "format": "uri",
                      "type": "string"
                    },
                    "statusCode": {
                      "description": "Le code de statut HTTP de la page",
                      "type": "integer"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "rawHtml": {
                  "description": "Contenu HTML brut de la page si `includeRawHtml` est défini sur true",
                  "nullable": true,
                  "type": "string"
                },
                "screenshot": {
                  "description": "Capture d’écran de la page si `includeScreenshot` vaut true",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "Date et heure d’expiration du crawl.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "URL permettant de récupérer les 10 Mo de données suivants. Renvoyée si le crawl n’est pas terminé ou si la réponse dépasse 10 Mo.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "Le statut actuel du crawl. Peut prendre les valeurs `scraping`, `completed` ou `failed`.",
            "type": "string"
          },
          "total": {
            "description": "Nombre total de pages ayant fait l'objet d'une tentative de crawl.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ExtractResponse": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Si ignoreInvalidURLs est true, il s’agit d’un tableau contenant les URL invalides spécifiées dans la requête. S’il n’y a aucune URL invalide, ce sera un tableau vide. Si ignoreInvalidURLs est false, ce champ sera undefined.",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ExtractStatusResponse": {
        "properties": {
          "data": {
            "type": "object"
          },
          "expiresAt": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "description": "L’état actuel de la tâche d’extraction",
            "enum": [
              "completed",
              "processing",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "success": {
            "type": "boolean"
          },
          "tokensUsed": {
            "description": "Nombre de jetons utilisés par le job d’extraction. Disponible uniquement une fois le job terminé.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "Formats": {
        "default": [
          "markdown"
        ],
        "description": "Formats de sortie à inclure dans la réponse. Vous pouvez spécifier un ou plusieurs formats, soit sous forme de chaînes de caractères (par exemple, `'markdown'`), soit sous forme d’objets avec des options supplémentaires (par exemple, `{ type: 'json', schema: {...} }`). Certains formats nécessitent la définition d’options spécifiques. Exemple : `['markdown', { type: 'json', schema: {...} }]`.",
        "items": {
          "oneOf": [
            {
              "properties": {
                "type": {
                  "enum": [
                    "markdown"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Markdown",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "summary"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Summary",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "html"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "HTML",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "rawHtml"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Raw HTML",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "links"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Links",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "summary"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Summary",
              "type": "object"
            },
            {
              "properties": {
                "fullPage": {
                  "default": false,
                  "description": "Indique s’il faut réaliser une capture d’écran de la page entière ou la limiter à la zone actuellement visible (viewport).",
                  "type": "boolean"
                },
                "quality": {
                  "description": "La qualité de la capture d’écran, sur une échelle de 1 à 100. 100 correspond à la qualité maximale.",
                  "type": "integer"
                },
                "type": {
                  "enum": [
                    "screenshot"
                  ],
                  "type": "string"
                },
                "viewport": {
                  "properties": {
                    "height": {
                      "description": "Hauteur du viewport en pixels",
                      "type": "integer"
                    },
                    "width": {
                      "description": "Largeur du viewport en pixels",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "width",
                    "height"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "type"
              ],
              "title": "Screenshot",
              "type": "object"
            },
            {
              "properties": {
                "prompt": {
                  "description": "Le prompt à utiliser pour la sortie JSON",
                  "type": "string"
                },
                "schema": {
                  "description": "Le schéma à utiliser pour la sortie au format JSON. Doit être conforme à [JSON Schema](https://json-schema.org/).",
                  "type": "object"
                },
                "type": {
                  "enum": [
                    "json"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "JSON",
              "type": "object"
            },
            {
              "properties": {
                "modes": {
                  "description": "Le mode de suivi des modifications à utiliser. « git-diff » fournit un diff détaillé, et « json » compare les données JSON extraites.",
                  "items": {
                    "enum": [
                      "git-diff",
                      "json"
                    ],
                    "type": "string"
                  },
                  "type": "array"
                },
                "prompt": {
                  "description": "Prompt à utiliser pour le suivi des modifications en mode « json ». S’il n’est pas renseigné, le prompt par défaut sera utilisé.",
                  "type": "string"
                },
                "schema": {
                  "description": "Schéma d’extraction JSON pour le mode « json ». Définit la structure des données à extraire et à comparer. Doit être conforme à [JSON Schema](https://json-schema.org/).",
                  "type": "object"
                },
                "tag": {
                  "default": null,
                  "description": "Tag à utiliser pour le suivi des modifications. Les tags permettent de répartir l’historique du suivi des modifications en « branches » distinctes : le suivi associé à un tag donné ne se comparera qu’aux extractions effectuées avec ce même tag. S’il n’est pas renseigné, le tag par défaut (null) sera utilisé.",
                  "nullable": true,
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "changeTracking"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Change Tracking",
              "type": "object"
            }
          ]
        },
        "type": "array"
      },
      "MapResponse": {
        "properties": {
          "links": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ScrapeOptions": {
        "properties": {
          "actions": {
            "description": "Actions à effectuer sur la page avant de récupérer le contenu",
            "items": {
              "oneOf": [
                {
                  "properties": {
                    "milliseconds": {
                      "description": "Durée d’attente en millisecondes",
                      "minimum": 1,
                      "type": "integer"
                    },
                    "selector": {
                      "description": "Sélecteur pour trouver l’élément par",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Attendre pendant un nombre spécifié de millisecondes",
                      "enum": [
                        "wait"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Wait",
                  "type": "object"
                },
                {
                  "properties": {
                    "fullPage": {
                      "default": false,
                      "description": "Indique s’il faut effectuer une capture d’écran de la page entière ou la limiter à la zone de visualisation actuelle (viewport).",
                      "type": "boolean"
                    },
                    "quality": {
                      "description": "La qualité de la capture d’écran, entre 1 et 100, 100 correspondant à la meilleure qualité.",
                      "type": "integer"
                    },
                    "type": {
                      "description": "Prenez une capture d’écran. Les liens seront disponibles dans le tableau `actions.screenshots` de la réponse.",
                      "enum": [
                        "screenshot"
                      ],
                      "type": "string"
                    },
                    "viewport": {
                      "properties": {
                        "height": {
                          "description": "La hauteur du viewport en pixels",
                          "type": "integer"
                        },
                        "width": {
                          "description": "Largeur du viewport en pixels",
                          "type": "integer"
                        }
                      },
                      "required": [
                        "width",
                        "height"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Screenshot",
                  "type": "object"
                },
                {
                  "properties": {
                    "all": {
                      "default": false,
                      "description": "Clique sur tous les éléments qui correspondent au sélecteur, et pas seulement sur le premier. Ne lève pas d’erreur si aucun élément ne correspond au sélecteur.",
                      "type": "boolean"
                    },
                    "selector": {
                      "description": "Sélecteur de requête permettant de trouver l’élément",
                      "example": "#load-more-button",
                      "type": "string"
                    },
                    "type": {
                      "description": "Cliquez sur un élément",
                      "enum": [
                        "click"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "selector"
                  ],
                  "title": "Click",
                  "type": "object"
                },
                {
                  "properties": {
                    "text": {
                      "description": "Texte à saisir",
                      "example": "Hello, world!",
                      "type": "string"
                    },
                    "type": {
                      "description": "Saisissez du texte dans un champ de saisie, une zone de texte ou un élément contenteditable. Remarque : vous devez d’abord donner le focus à l’élément à l’aide d’une action `click` avant d’écrire. Le texte sera saisi caractère par caractère pour simuler une saisie au clavier.",
                      "enum": [
                        "write"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "text"
                  ],
                  "title": "Write text",
                  "type": "object"
                },
                {
                  "description": "Appuyez sur une touche du clavier. Consultez https://asawicki.info/nosense/doc/devices/keyboard/key_codes.html pour la liste des codes de touches.",
                  "properties": {
                    "key": {
                      "description": "Touche à presser",
                      "example": "Enter",
                      "type": "string"
                    },
                    "type": {
                      "description": "Appuyez sur une touche",
                      "enum": [
                        "press"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "key"
                  ],
                  "title": "Press a key",
                  "type": "object"
                },
                {
                  "properties": {
                    "direction": {
                      "default": "down",
                      "description": "Sens de défilement",
                      "enum": [
                        "up",
                        "down"
                      ],
                      "type": "string"
                    },
                    "selector": {
                      "description": "Sélecteur CSS de l’élément à faire défiler",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Faire défiler la page ou un élément spécifique",
                      "enum": [
                        "scroll"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Scroll",
                  "type": "object"
                },
                {
                  "properties": {
                    "type": {
                      "description": "Extrait le contenu de la page en cours et renvoie l’URL ainsi que le HTML.",
                      "enum": [
                        "scrape"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Scrape",
                  "type": "object"
                },
                {
                  "properties": {
                    "script": {
                      "description": "Code JavaScript à exécuter",
                      "example": "document.querySelector('.button').click();",
                      "type": "string"
                    },
                    "type": {
                      "description": "Exécuter le code JavaScript sur la page",
                      "enum": [
                        "executeJavascript"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "script"
                  ],
                  "title": "Execute JavaScript",
                  "type": "object"
                },
                {
                  "properties": {
                    "format": {
                      "default": "Letter",
                      "description": "La taille de la page du PDF généré",
                      "enum": [
                        "A0",
                        "A1",
                        "A2",
                        "A3",
                        "A4",
                        "A5",
                        "A6",
                        "Letter",
                        "Legal",
                        "Tabloid",
                        "Ledger"
                      ],
                      "type": "string"
                    },
                    "landscape": {
                      "default": false,
                      "description": "Indique s’il faut générer le PDF au format paysage",
                      "type": "boolean"
                    },
                    "scale": {
                      "default": 1,
                      "description": "Le multiplicateur d’échelle du PDF généré",
                      "type": "number"
                    },
                    "type": {
                      "description": "Générer un PDF de la page actuelle. Le PDF sera renvoyé dans le tableau `actions.pdfs` de la réponse.",
                      "enum": [
                        "pdf"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Generate PDF",
                  "type": "object"
                }
              ]
            },
            "type": "array"
          },
          "blockAds": {
            "default": true,
            "description": "Active le blocage des publicités et des fenêtres contextuelles de consentement aux cookies.",
            "type": "boolean"
          },
          "excludeTags": {
            "description": "Balises à exclure du résultat.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "formats": {
            "$ref": "#/components/schemas/Formats"
          },
          "headers": {
            "description": "En-têtes à envoyer avec la requête. Ils peuvent être utilisés pour envoyer des cookies, un user-agent, etc.",
            "type": "object"
          },
          "includeTags": {
            "description": "Balises à inclure dans le résultat.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "location": {
            "description": "Paramètres de localisation pour la requête. Lorsqu’ils sont définis, un proxy approprié est utilisé, si disponible, et la langue ainsi que le fuseau horaire correspondants sont émulés. La valeur par défaut est « US » si non spécifié.",
            "properties": {
              "country": {
                "default": "US",
                "description": "Code de pays ISO 3166-1 alpha-2 (p. ex. « US », « AU », « DE », « JP »)",
                "pattern": "^[A-Z]{2}$",
                "type": "string"
              },
              "languages": {
                "description": "Langues et paramètres régionaux préférés pour la requête, par ordre de priorité. Par défaut, la langue du lieu spécifié est utilisée. Voir https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language",
                "items": {
                  "example": "en-US",
                  "type": "string"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "maxAge": {
            "default": 172800000,
            "description": "Renvoie une version mise en cache de la page si elle a été mise en cache il y a moins de cette durée (en millisecondes). Si la version mise en cache de la page est plus ancienne que cette valeur, la page sera à nouveau scrapée. Si vous n’avez pas besoin de données extrêmement récentes, activer cette option peut accélérer vos scrapes jusqu’à 500 %. La valeur par défaut est de 2 jours.",
            "type": "integer"
          },
          "mobile": {
            "default": false,
            "description": "Définissez cette valeur sur true si vous souhaitez simuler le scraping depuis un appareil mobile. Utile pour tester des pages responsives et prendre des captures d’écran sur mobile.",
            "type": "boolean"
          },
          "onlyMainContent": {
            "default": true,
            "description": "Retourner uniquement le contenu principal de la page, en excluant les en-têtes, barres de navigation, pieds de page, etc.",
            "type": "boolean"
          },
          "parsers": {
            "default": [
              "pdf"
            ],
            "description": "Contrôle la façon dont les fichiers sont traités lors du scraping. Lorsque « pdf » est inclus (par défaut), le contenu du PDF est extrait et converti au format Markdown, avec une facturation basée sur le nombre de pages (1 crédit par page). Lorsqu’un tableau vide est transmis, le fichier PDF est renvoyé en encodage base64 avec un tarif fixe de 1 crédit au total.",
            "items": {
              "enum": [
                "pdf"
              ],
              "type": "string"
            },
            "type": "array"
          },
          "proxy": {
            "default": "auto",
            "description": "Spécifie le type de proxy à utiliser.\n\n - **basic** : Proxies pour le scraping de sites avec des systèmes antibot inexistants ou basiques. Rapides et généralement efficaces.\n - **enhanced** : Proxies améliorés pour le scraping de sites avec des systèmes antibot avancés. Plus lents, mais plus fiables sur certains sites. Facturés au même coût en crédits que basic.\n - **auto** : Firecrawl réessaiera automatiquement d’effectuer le scraping avec des proxies améliorés si le proxy basic échoue. Les proxies améliorés n’entraînent aucun supplément de crédits, donc dans tous les cas, seul le coût standard sera facturé.\n\nSi vous ne spécifiez pas de proxy, Firecrawl utilisera auto par défaut.",
            "enum": [
              "basic",
              "enhanced",
              "auto"
            ],
            "type": "string"
          },
          "removeBase64Images": {
            "default": true,
            "description": "Supprime toutes les images encodées en base64 de la sortie, qui peuvent être excessivement longues. Le texte alternatif de l’image est conservé, mais l’URL est remplacée par un espace réservé.",
            "type": "boolean"
          },
          "skipTlsVerification": {
            "default": true,
            "description": "Ignorer la vérification du certificat TLS pour les requêtes",
            "type": "boolean"
          },
          "storeInCache": {
            "default": true,
            "description": "Si ce paramètre est défini sur true, la page sera stockée dans l’index et le cache de Firecrawl. Le définir sur false est utile si votre activité de scraping peut soulever des problèmes de protection des données. L’utilisation de certains paramètres associés à un scraping sensible (actions, en-têtes) fera automatiquement passer ce paramètre à false.",
            "type": "boolean"
          },
          "timeout": {
            "description": "Délai d'expiration de la requête, en millisecondes.",
            "type": "integer"
          },
          "waitFor": {
            "default": 0,
            "description": "Spécifiez un délai en millisecondes avant de récupérer le contenu, afin de laisser à la page suffisamment de temps pour se charger.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ScrapeResponse": {
        "properties": {
          "data": {
            "properties": {
              "actions": {
                "description": "Résultats des actions spécifiées dans le paramètre `actions`. Uniquement présent si le paramètre `actions` a été fourni dans la requête.",
                "nullable": true,
                "properties": {
                  "javascriptReturns": {
                    "description": "Valeurs renvoyées par JavaScript, dans le même ordre que les actions executeJavascript fournies.",
                    "items": {
                      "properties": {
                        "type": {
                          "type": "string"
                        },
                        "value": {}
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "pdfs": {
                    "description": "PDF générés dans le même ordre que les actions PDF fournies.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "scrapes": {
                    "description": "Extraire le contenu dans le même ordre que les actions d'extraction fournies.",
                    "items": {
                      "properties": {
                        "html": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "screenshots": {
                    "description": "Les URL de captures d'écran, dans le même ordre que les actions screenshot fournies.",
                    "items": {
                      "format": "url",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "changeTracking": {
                "description": "Informations de suivi des modifications si `changeTracking` figure dans `formats`. Uniquement présent lorsque le format `changeTracking` est demandé.",
                "nullable": true,
                "properties": {
                  "changeStatus": {
                    "description": "Le résultat de la comparaison entre les deux versions de la page. « new » indique que cette page n’existait pas auparavant, « same » indique que le contenu n’a pas changé, « changed » indique que le contenu a changé, « removed » indique que la page a été supprimée.",
                    "enum": [
                      "new",
                      "same",
                      "changed",
                      "removed"
                    ],
                    "type": "string"
                  },
                  "diff": {
                    "description": "Diff de style Git des modifications lors de l’utilisation du mode « git-diff ». Présent uniquement lorsque le mode est défini sur « git-diff ».",
                    "nullable": true,
                    "type": "string"
                  },
                  "json": {
                    "description": "Résultats de comparaison au format JSON lors de l'utilisation du mode `json`. Uniquement présents lorsque le mode est défini sur `json`. Contient la liste de toutes les clés et de leurs valeurs issues des extractions `previous` et `current`, en fonction du type défini dans le `schema`. Exemple [ici](/features/change-tracking)",
                    "nullable": true,
                    "type": "object"
                  },
                  "previousScrapeAt": {
                    "description": "Horodatage du précédent scraping auquel la page actuelle est comparée. Null s’il n’existe aucun précédent scraping.",
                    "format": "date-time",
                    "nullable": true,
                    "type": "string"
                  },
                  "visibility": {
                    "description": "La visibilité de la page/URL actuelle. « visible » signifie que l’URL a été découverte de manière organique (liens ou sitemap), « hidden » signifie que l’URL a été découverte à partir de la mémoire de crawls précédents.",
                    "enum": [
                      "visible",
                      "hidden"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "html": {
                "description": "Version HTML du contenu de la page si `html` fait partie de `formats`",
                "nullable": true,
                "type": "string"
              },
              "links": {
                "description": "Liste des liens présents sur la page si `links` fait partie de `formats`",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "markdown": {
                "type": "string"
              },
              "metadata": {
                "properties": {
                  "<any other metadata> ": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "error": {
                    "description": "Le message d’erreur de la page",
                    "nullable": true,
                    "type": "string"
                  },
                  "language": {
                    "nullable": true,
                    "type": "string"
                  },
                  "sourceURL": {
                    "format": "uri",
                    "type": "string"
                  },
                  "statusCode": {
                    "description": "Le code d’état HTTP de la page",
                    "type": "integer"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "rawHtml": {
                "description": "Contenu HTML brut de la page si `rawHtml` figure dans `formats`",
                "nullable": true,
                "type": "string"
              },
              "screenshot": {
                "description": "Capture d'écran de la page si `screenshot` fait partie des `formats`",
                "nullable": true,
                "type": "string"
              },
              "summary": {
                "description": "Résumé de la page si `summary` est inclus dans `formats`",
                "nullable": true,
                "type": "string"
              },
              "warning": {
                "description": "Peut être affiché lors de l’utilisation de l’extraction LLM. Un message d’avertissement vous indiquera tout problème d’extraction.",
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "contact": {
      "email": "support@firecrawl.dev",
      "name": "Firecrawl Support",
      "url": "https://firecrawl.dev/support"
    },
    "description": "API pour interagir avec les services Firecrawl afin d’effectuer des tâches de scraping et de crawling web.",
    "title": "Firecrawl API",
    "version": "v2"
  },
  "openapi": "3.0.0",
  "paths": {
    "/batch/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "ignoreInvalidURLs": {
                        "default": true,
                        "description": "Si des URL non valides sont spécifiées dans le tableau urls, elles seront ignorées. Plutôt que de faire échouer l’ensemble de la requête, un scraping par lot sera lancé avec les URL valides restantes, et les URL non valides seront renvoyées dans le champ invalidURLs de la réponse.",
                        "type": "boolean"
                      },
                      "maxConcurrency": {
                        "description": "Nombre maximal de scrapes simultanés. Ce paramètre vous permet de définir une limite de parallélisme pour ce batch de scraping. S’il n’est pas spécifié, le batch de scraping respecte la limite de parallélisme définie pour votre équipe.",
                        "type": "integer"
                      },
                      "urls": {
                        "items": {
                          "description": "L’URL à scraper",
                          "format": "uri",
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "webhook": {
                        "description": "Un objet représentant une spécification de webhook.",
                        "properties": {
                          "events": {
                            "description": "Type d’événements à envoyer à l’URL du webhook (par défaut : tous).",
                            "items": {
                              "enum": [
                                "completed",
                                "page",
                                "failed",
                                "started"
                              ],
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "headers": {
                            "additionalProperties": {
                              "type": "string"
                            },
                            "description": "En-têtes à envoyer à l’URL du webhook.",
                            "type": "object"
                          },
                          "metadata": {
                            "additionalProperties": true,
                            "description": "Métadonnées personnalisées qui seront incluses dans tous les payloads de webhook de ce crawl",
                            "type": "object"
                          },
                          "url": {
                            "description": "L’URL à laquelle envoyer le webhook. Ce dernier sera déclenché au démarrage du scraping par lot (batch_scrape.started), pour chaque page scrappée (batch_scrape.page) et lorsque le scraping par lot est terminé (batch_scrape.completed) ou échoue (batch_scrape.failed). La réponse sera identique à celle renvoyée par l’endpoint `/scrape`.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "urls"
                    ],
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  {
                    "properties": {
                      "zeroDataRetention": {
                        "default": false,
                        "description": "Si cette valeur est définie sur true, aucune donnée ne sera conservée pour ce scraping par lot. Pour activer cette option, veuillez contacter help@firecrawl.dev",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchScrapeResponseObj"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Effectuer un scraping de plusieurs URL et, en option, en extraire des informations à l’aide d’un LLM",
        "tags": [
          "Scraping"
        ]
      }
    },
    "/batch/scrape/{id}": {
      "delete": {
        "operationId": "cancelBatchScrape",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "example": "Batch scrape job successfully cancelled.",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Annulation réussie"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Batch scrape job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tâche de scraping par lots introuvable"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Annuler un job de scraping par lot",
        "tags": [
          "Scraping"
        ]
      },
      "get": {
        "operationId": "getBatchScrapeStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchScrapeStatusResponseObj"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Récupérer le statut d’un job de scraping par lots",
        "tags": [
          "Scraping"
        ]
      },
      "parameters": [
        {
          "description": "L’ID de la tâche de scraping en lot",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/batch/scrape/{id}/errors": {
      "get": {
        "operationId": "getBatchScrapeErrors",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlErrorsResponseObj"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Récupérer les erreurs d'une tâche de scraping par lots",
        "tags": [
          "Scraping"
        ]
      },
      "parameters": [
        {
          "description": "L’ID de la tâche de scraping par lots",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/crawl": {
      "post": {
        "operationId": "crawlUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "allowExternalLinks": {
                    "default": false,
                    "description": "Permet au crawler de suivre les liens vers des sites web externes.",
                    "type": "boolean"
                  },
                  "allowSubdomains": {
                    "default": false,
                    "description": "Autorise le crawler à suivre les liens pointant vers les sous-domaines du domaine principal.",
                    "type": "boolean"
                  },
                  "crawlEntireDomain": {
                    "default": false,
                    "description": "Autorise le crawler à suivre les liens internes vers des URL de même niveau ou parentes, et pas seulement vers les chemins enfants.\n\nfalse : N'explore que les URL plus profondes (enfants).\n→ ex. /features/feature-1 → /features/feature-1/tips ✅\n→ Ne suivra pas /pricing ou / ❌\n\ntrue : Explore tous les liens internes, y compris ceux de même niveau et les parents.\n→ ex. /features/feature-1 → /pricing, /, etc. ✅\n\nUtilisez true pour une couverture interne plus large, au-delà des chemins imbriqués.",
                    "type": "boolean"
                  },
                  "delay": {
                    "description": "Délai en secondes entre chaque opération de scraping. Cela permet de respecter les limites de fréquence des sites web.",
                    "type": "number"
                  },
                  "excludePaths": {
                    "description": "Des expressions régulières de chemin d’URL qui excluent de l’exploration les URL correspondantes. Par exemple, si vous définissez `\"excludePaths\": [\"blog/.*\"]` pour l’URL de base firecrawl.dev, tous les résultats correspondant à ce modèle seront exclus, comme https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "ignoreQueryParameters": {
                    "default": false,
                    "description": "Ne relancez pas le scraping du même chemin avec des paramètres de requête différents (ou sans paramètres)",
                    "type": "boolean"
                  },
                  "includePaths": {
                    "description": "Motifs d’expressions régulières (regex) pour les chemins d’URL qui indiquent quelles URL inclure dans le crawl. Seuls les chemins correspondant aux motifs spécifiés seront inclus dans la réponse. Par exemple, si vous définissez `\"includePaths\": [\"blog/.*\"]` pour l’URL de base firecrawl.dev, seuls les résultats correspondant à ce motif seront inclus, comme https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "limit": {
                    "default": 10000,
                    "description": "Nombre maximal de pages à explorer. La limite par défaut est de 10 000.",
                    "type": "integer"
                  },
                  "maxConcurrency": {
                    "description": "Nombre maximal d’opérations de scraping simultanées. Ce paramètre vous permet de définir une limite de parallélisme pour ce crawl. S’il n’est pas renseigné, le crawl respecte la limite de parallélisme définie pour votre équipe.",
                    "type": "integer"
                  },
                  "maxDiscoveryDepth": {
                    "description": "Profondeur maximale d’exploration en fonction de l’ordre de découverte. Le site racine et les pages provenant du sitemap ont une profondeur de découverte de 0. Par exemple, si vous définissez ce paramètre sur 1 et que vous activez ignoreSitemap, vous n’explorerez que l’URL saisie et toutes les URL liées depuis cette page.",
                    "type": "integer"
                  },
                  "prompt": {
                    "description": "Invite à utiliser pour générer les options du crawler (tous les paramètres ci-dessous) à partir d’une description en langage naturel. Les paramètres définis explicitement auront priorité sur les équivalents générés.",
                    "type": "string"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "sitemap": {
                    "default": "include",
                    "description": "Mode sitemap pour l’exploration. Si vous le définissez sur « skip », le crawler ignorera le sitemap du site web et n’explorera que l’URL fournie, puis découvrira les pages à partir de là.",
                    "enum": [
                      "skip",
                      "include"
                    ],
                    "type": "string"
                  },
                  "url": {
                    "description": "L’URL de base à partir de laquelle démarrer l’exploration",
                    "format": "uri",
                    "type": "string"
                  },
                  "webhook": {
                    "description": "Un objet de spécification de webhook.",
                    "properties": {
                      "events": {
                        "description": "Type d’événements à envoyer à l’URL du webhook. (par défaut : tous)",
                        "items": {
                          "enum": [
                            "completed",
                            "page",
                            "failed",
                            "started"
                          ],
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "headers": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "En-têtes à envoyer à l’URL du webhook.",
                        "type": "object"
                      },
                      "metadata": {
                        "additionalProperties": true,
                        "description": "Métadonnées personnalisées qui seront incluses dans tous les payloads de webhook de ce crawl",
                        "type": "object"
                      },
                      "url": {
                        "description": "L’URL à laquelle envoyer le webhook. Celui-ci sera déclenché au démarrage du crawl (crawl.started), pour chaque page explorée (crawl.page) et lorsque le crawl est terminé (crawl.completed ou crawl.failed). La réponse sera identique à celle de l’endpoint `/scrape`.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "type": "object"
                  },
                  "zeroDataRetention": {
                    "default": false,
                    "description": "Si la valeur est true, cela activera l’absence totale de conservation des données pour ce crawl. Pour activer cette fonctionnalité, veuillez contacter help@firecrawl.dev",
                    "type": "boolean"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlResponse"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Explorer plusieurs URL selon les options",
        "tags": [
          "Crawling"
        ]
      }
    },
    "/crawl/active": {
      "get": {
        "operationId": "getActiveCrawls",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "crawls": {
                      "items": {
                        "properties": {
                          "id": {
                            "description": "L’identifiant unique de l’exploration",
                            "format": "uuid",
                            "type": "string"
                          },
                          "options": {
                            "description": "Options du crawler utilisées pour ce crawl",
                            "properties": {
                              "scrapeOptions": {
                                "$ref": "#/components/schemas/ScrapeOptions"
                              }
                            },
                            "type": "object"
                          },
                          "teamId": {
                            "description": "ID de l’équipe propriétaire du crawl",
                            "type": "string"
                          },
                          "url": {
                            "description": "L’URL de départ du crawl",
                            "format": "uri",
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "teamId",
                          "url",
                          "status",
                          "options"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "success",
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Récupérer tous les crawls actifs de l’équipe authentifiée",
        "tags": [
          "Crawling"
        ]
      }
    },
    "/crawl/{id}": {
      "delete": {
        "operationId": "cancelCrawl",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "enum": [
                        "cancelled"
                      ],
                      "example": "cancelled",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Annulation réussie"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Crawl job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tâche de crawl introuvable"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Annuler un job de crawl",
        "tags": [
          "Crawling"
        ]
      },
      "get": {
        "operationId": "getCrawlStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlStatusResponseObj"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir le statut d'une tâche de crawl",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "L’identifiant de la tâche de crawl",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/crawl/{id}/errors": {
      "get": {
        "operationId": "getCrawlErrors",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlErrorsResponseObj"
                }
              }
            },
            "description": "Réponse réussie"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Récupérer les erreurs d’une tâche de crawl",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "L’ID de la tâche de crawl",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/extract": {
      "post": {
        "operationId": "extractData",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "enableWebSearch": {
                    "default": false,
                    "description": "Lorsque cette option est activée, l’extraction utilisera la recherche web pour trouver des données supplémentaires",
                    "type": "boolean"
                  },
                  "ignoreInvalidURLs": {
                    "default": true,
                    "description": "Si des URL non valides sont spécifiées dans le tableau urls, elles seront ignorées. Plutôt que de provoquer l’échec de l’ensemble de la requête, une extraction sera effectuée en utilisant uniquement les URL valides restantes, et les URL non valides seront renvoyées dans le champ invalidURLs de la réponse.",
                    "type": "boolean"
                  },
                  "ignoreSitemap": {
                    "default": false,
                    "description": "Si cette option est définie sur true, les fichiers sitemap.xml sont ignorés pendant l’analyse du site web",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Si la valeur est définie sur true, les sous-domaines des URL fournies seront également explorés",
                    "type": "boolean"
                  },
                  "prompt": {
                    "description": "Prompt pour guider le processus d’extraction",
                    "type": "string"
                  },
                  "schema": {
                    "description": "Schéma définissant la structure des données extraites. Doit être conforme à la [spécification JSON Schema](https://json-schema.org/).",
                    "type": "object"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "showSources": {
                    "default": false,
                    "description": "Si la valeur est `true`, les sources utilisées pour extraire les données seront incluses dans la réponse sous la clé `sources`.",
                    "type": "boolean"
                  },
                  "urls": {
                    "items": {
                      "description": "Les URL à partir desquelles les données seront extraites. Les URL doivent être au format glob.",
                      "format": "uri",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "urls"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractResponse"
                }
              }
            },
            "description": "Extraction réussie"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid input data.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Requête invalide"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Extraire des données structurées à partir de pages à l’aide de modèles de langage (LLM)",
        "tags": [
          "Extraction"
        ]
      }
    },
    "/extract/{id}": {
      "get": {
        "operationId": "getExtractStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractStatusResponse"
                }
              }
            },
            "description": "Réponse en cas de succès"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Consulter le statut d’une tâche d’extraction",
        "tags": [
          "Extraction"
        ]
      },
      "parameters": [
        {
          "description": "ID de la tâche d’extraction",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/map": {
      "post": {
        "operationId": "mapUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "ignoreQueryParameters": {
                    "default": true,
                    "description": "Ne retournez pas d’URL comportant des paramètres de requête",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Inclure les sous-domaines du site",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5000,
                    "description": "Nombre maximal de liens à retourner",
                    "maximum": 30000,
                    "type": "integer"
                  },
                  "search": {
                    "description": "Requête de recherche à utiliser pour la cartographie. Pendant la phase Alpha, la composante « intelligente » de la fonctionnalité de recherche est limitée à 500 résultats de recherche. En revanche, si map trouve davantage de résultats, aucune limite n’est appliquée.",
                    "type": "string"
                  },
                  "sitemap": {
                    "default": "include",
                    "description": "Mode sitemap lors du mappage. Si vous le réglez sur `skip`, le sitemap ne sera pas utilisé pour trouver des URL. Si vous le réglez sur `only`, seules les URL présentes dans le sitemap seront renvoyées. Par défaut (`include`), le sitemap est utilisé conjointement avec les autres méthodes pour trouver des URL.",
                    "enum": [
                      "skip",
                      "include",
                      "only"
                    ],
                    "type": "string"
                  },
                  "timeout": {
                    "description": "Délai d’expiration en millisecondes. Aucun délai d’expiration n’est défini par défaut.",
                    "type": "integer"
                  },
                  "url": {
                    "description": "L’URL de base à partir de laquelle lancer le crawl",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MapResponse"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Mapper plusieurs URL selon les options",
        "tags": [
          "Mapping"
        ]
      }
    },
    "/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrl",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "url": {
                        "description": "L’URL à analyser",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  {
                    "properties": {
                      "zeroDataRetention": {
                        "default": false,
                        "description": "Si ce paramètre est défini sur true, cela désactivera toute conservation des données pour ce scraping. Pour activer cette fonctionnalité, veuillez contacter help@firecrawl.dev",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScrapeResponse"
                }
              }
            },
            "description": "Réponse réussie"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "code": {
                      "example": "UNKNOWN_ERROR",
                      "type": "string"
                    },
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Scraper une seule URL et éventuellement en extraire des informations à l’aide d’un LLM",
        "tags": [
          "Scraping"
        ]
      }
    },
    "/search": {
      "post": {
        "operationId": "searchAndScrape",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "ignoreInvalidURLs": {
                    "default": false,
                    "description": "Exclut des résultats de recherche les URL invalides pour d’autres endpoints Firecrawl. Cela permet de réduire les erreurs si vous envoyez les données issues de la recherche vers d’autres endpoints de l’API Firecrawl.",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5,
                    "description": "Nombre maximal de résultats à retourner",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "location": {
                    "description": "Paramètre de localisation pour les résultats de recherche",
                    "type": "string"
                  },
                  "query": {
                    "description": "Requête de recherche",
                    "type": "string"
                  },
                  "scrapeOptions": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/ScrapeOptions"
                      }
                    ],
                    "default": {},
                    "description": "Options d’extraction des résultats de recherche"
                  },
                  "sources": {
                    "default": [
                      "web"
                    ],
                    "description": "Sources à utiliser pour la recherche. Détermine les tableaux disponibles dans la réponse.",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "location": {
                              "description": "Paramètre de localisation pour les résultats de recherche",
                              "type": "string"
                            },
                            "tbs": {
                              "description": "Paramètre de recherche temporel. Prend en charge les plages temporelles prédéfinies (`qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`) ainsi que les plages de dates personnalisées (`cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY`).",
                              "type": "string"
                            },
                            "type": {
                              "enum": [
                                "web"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "title": "Web",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "type": {
                              "enum": [
                                "images"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "title": "Images",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "type": {
                              "enum": [
                                "news"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "title": "News",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "tbs": {
                    "description": "Paramètre de recherche temporel. Prend en charge des intervalles de temps prédéfinis (`qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`) et des plages de dates personnalisées (`cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY`).",
                    "type": "string"
                  },
                  "timeout": {
                    "default": 60000,
                    "description": "Délai d’expiration (en millisecondes)",
                    "type": "integer"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "description": "Les résultats de la recherche. Les tableaux disponibles dépendront des sources que vous avez spécifiées dans la requête. Par défaut, le tableau `web` sera retourné.",
                      "properties": {
                        "images": {
                          "items": {
                            "properties": {
                              "imageHeight": {
                                "description": "Hauteur de l’image",
                                "type": "integer"
                              },
                              "imageUrl": {
                                "description": "URL de l’image",
                                "type": "string"
                              },
                              "imageWidth": {
                                "description": "Largeur de l’image",
                                "type": "integer"
                              },
                              "position": {
                                "description": "Position du résultat de recherche",
                                "type": "integer"
                              },
                              "title": {
                                "description": "Titre du résultat de la recherche",
                                "type": "string"
                              },
                              "url": {
                                "description": "URL du résultat de la recherche",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "news": {
                          "items": {
                            "properties": {
                              "date": {
                                "description": "Date de l’article",
                                "type": "string"
                              },
                              "html": {
                                "description": "Contenu HTML si demandé dans le paramètre formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "imageUrl": {
                                "description": "URL de l'image de l'article",
                                "type": "string"
                              },
                              "links": {
                                "description": "Liens trouvés si demandés via formats",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "markdown": {
                                "description": "Contenu Markdown si le scraping a été demandé",
                                "nullable": true,
                                "type": "string"
                              },
                              "metadata": {
                                "properties": {
                                  "description": {
                                    "type": "string"
                                  },
                                  "error": {
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "sourceURL": {
                                    "type": "string"
                                  },
                                  "statusCode": {
                                    "type": "integer"
                                  },
                                  "title": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "position": {
                                "description": "Position de l’article",
                                "type": "integer"
                              },
                              "rawHtml": {
                                "description": "Contenu HTML brut lorsqu’il est demandé dans formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "screenshot": {
                                "description": "URL de la capture d’écran si ce format est demandé dans formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "snippet": {
                                "description": "Extrait de l’article",
                                "type": "string"
                              },
                              "title": {
                                "description": "Titre de l’article",
                                "type": "string"
                              },
                              "url": {
                                "description": "URL de l’article",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "web": {
                          "items": {
                            "properties": {
                              "description": {
                                "description": "Description du résultat de recherche",
                                "type": "string"
                              },
                              "html": {
                                "description": "Contenu HTML si ce format est demandé dans formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "links": {
                                "description": "Liens renvoyés si demandés dans formats",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "markdown": {
                                "description": "Contenu Markdown lorsque le scraping a été demandé",
                                "nullable": true,
                                "type": "string"
                              },
                              "metadata": {
                                "properties": {
                                  "description": {
                                    "type": "string"
                                  },
                                  "error": {
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "sourceURL": {
                                    "type": "string"
                                  },
                                  "statusCode": {
                                    "type": "integer"
                                  },
                                  "title": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "rawHtml": {
                                "description": "Contenu HTML brut si ce format est demandé dans formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "screenshot": {
                                "description": "URL de la capture d’écran si ce format est demandé dans formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "title": {
                                "description": "Titre du résultat de recherche",
                                "type": "string"
                              },
                              "url": {
                                "description": "URL du résultat de la recherche",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "type": "boolean"
                    },
                    "warning": {
                      "description": "Message d'avertissement en cas de problème",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse réussie"
          },
          "408": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request timed out",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Délai d’attente dépassé"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "code": {
                      "example": "UNKNOWN_ERROR",
                      "type": "string"
                    },
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Rechercher et éventuellement scraper les résultats de recherche",
        "tags": [
          "Search"
        ]
      }
    },
    "/team/credit-usage": {
      "get": {
        "operationId": "getCreditUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billingPeriodEnd": {
                          "description": "Date de fin de la période de facturation. null si vous utilisez le plan gratuit",
                          "example": "2025-01-31T23:59:59Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "billingPeriodStart": {
                          "description": "Date de début de la période de facturation. Null si vous utilisez l’offre gratuite",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "planCredits": {
                          "description": "Nombre de crédits inclus dans le forfait. Cela n’inclut pas les crédits de coupons ni les crédits ajoutés au paiement à l’utilisation.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remainingCredits": {
                          "description": "Nombre de crédits restants pour l'équipe",
                          "example": 1000,
                          "type": "number"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Could not find credit usage information",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Impossible de trouver les informations sur l’utilisation des crédits"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching credit usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir le nombre de crédits restants de l'équipe authentifiée",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/credit-usage/historical": {
      "get": {
        "operationId": "getHistoricalCreditUsage",
        "parameters": [
          {
            "description": "Récupérer l’historique d’utilisation des crédits par clé API",
            "in": "query",
            "name": "byApiKey",
            "required": false,
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "periods": {
                      "items": {
                        "properties": {
                          "apiKey": {
                            "description": "Nom de la clé d’API utilisée pour la période de facturation. null si byApiKey est false (valeur par défaut)",
                            "nullable": true,
                            "type": "string"
                          },
                          "endDate": {
                            "description": "Date de fin de la période de facturation",
                            "example": "2025-01-31T23:59:59Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "startDate": {
                            "description": "Date de début de la période de facturation",
                            "example": "2025-01-01T00:00:00Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "totalCredits": {
                            "description": "Nombre total de crédits utilisés sur la période de facturation",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching historical credit usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir l’historique d’utilisation des crédits pour l’équipe authentifiée",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage": {
      "get": {
        "operationId": "getTokenUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billingPeriodEnd": {
                          "description": "Date de fin de la période de facturation. null si le plan gratuit est utilisé",
                          "example": "2025-01-31T23:59:59Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "billingPeriodStart": {
                          "description": "Date de début de la période de facturation. null si vous utilisez le plan gratuit",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "planTokens": {
                          "description": "Nombre de jetons inclus dans l’offre. N’inclut pas les jetons issus de coupons.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remainingTokens": {
                          "description": "Nombre de jetons restants pour l’équipe",
                          "example": 1000,
                          "type": "number"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse réussie"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Could not find token usage information",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Informations sur l’utilisation des jetons introuvables"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching token usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir le nombre de jetons restants de l’équipe authentifiée (uniquement pour Extract)",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage/historical": {
      "get": {
        "operationId": "getHistoricalTokenUsage",
        "parameters": [
          {
            "description": "Récupérer l’historique d’utilisation des jetons par clé API",
            "in": "query",
            "name": "byApiKey",
            "required": false,
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "periods": {
                      "items": {
                        "properties": {
                          "apiKey": {
                            "description": "Nom de la clé d’API utilisée pour la période de facturation. null si byApiKey est false (valeur par défaut)",
                            "nullable": true,
                            "type": "string"
                          },
                          "endDate": {
                            "description": "Date de fin de la période de facturation",
                            "example": "2025-01-31T23:59:59Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "startDate": {
                            "description": "Date de début de la période de facturation",
                            "example": "2025-01-01T00:00:00Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "totalTokens": {
                            "description": "Nombre total de jetons utilisés pendant la période de facturation",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching historical token usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir l’historique d’utilisation des jetons pour l’équipe authentifiée (Extract uniquement)",
        "tags": [
          "Billing"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://api.firecrawl.dev/v2"
    }
  ]
}