{
  "components": {
    "schemas": {
      "BaseScrapeOptions": {
        "properties": {
          "actions": {
            "description": "Actions à effectuer sur la page avant d’extraire le contenu",
            "items": {
              "oneOf": [
                {
                  "properties": {
                    "milliseconds": {
                      "description": "Délai d’attente en millisecondes",
                      "minimum": 1,
                      "type": "integer"
                    },
                    "selector": {
                      "description": "Sélecteur permettant de trouver l’élément par",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Attendre 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 se limiter à la zone d’affichage actuelle.",
                      "type": "boolean"
                    },
                    "quality": {
                      "description": "La qualité de la capture d’écran, de 1 à 100. 100 indique la qualité maximale.",
                      "type": "integer"
                    },
                    "type": {
                      "description": "Prenez une capture d’écran. Les liens figureront dans le tableau `actions.screenshots` de la réponse.",
                      "enum": [
                        "screenshot"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Screenshot",
                  "type": "object"
                },
                {
                  "properties": {
                    "all": {
                      "default": false,
                      "description": "Clique sur tous les éléments correspondant au sélecteur, et pas seulement sur le premier. Ne génère pas d’erreur si aucun élément ne correspond.",
                      "type": "boolean"
                    },
                    "selector": {
                      "description": "Sélecteur de requête pour rechercher l’élément par",
                      "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": "Saisir 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 de type « 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. Voir 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 de cette page",
                      "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 pour l’élément à faire défiler",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Faites 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 et 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 du code JavaScript sur la page",
                      "enum": [
                        "executeJavascript"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "script"
                  ],
                  "title": "Execute JavaScript",
                  "type": "object"
                },
                {
                  "properties": {
                    "format": {
                      "default": "Letter",
                      "description": "Le format de page du PDF obtenu",
                      "enum": [
                        "A0",
                        "A1",
                        "A2",
                        "A3",
                        "A4",
                        "A5",
                        "A6",
                        "Letter",
                        "Legal",
                        "Tabloid",
                        "Ledger"
                      ],
                      "type": "string"
                    },
                    "landscape": {
                      "default": false,
                      "description": "Indique si le PDF doit être généré en mode paysage",
                      "type": "boolean"
                    },
                    "scale": {
                      "default": 1,
                      "description": "Le facteur 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 pop-ups de cookies.",
            "type": "boolean"
          },
          "excludeTags": {
            "description": "Balises à exclure du résultat.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "headers": {
            "description": "En-têtes HTTP à envoyer avec la requête. Ils peuvent servir à transmettre des cookies, un user-agent, etc.",
            "type": "object"
          },
          "includeTags": {
            "description": "Balises à inclure dans le résultat.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "jsonOptions": {
            "description": "objet d’options au format JSON",
            "properties": {
              "prompt": {
                "description": "Le prompt à utiliser pour l’extraction sans schéma (optionnel)",
                "type": "string"
              },
              "schema": {
                "description": "Le schéma à utiliser pour l’extraction (optionnel). Doit être conforme à [JSON Schema](https://json-schema.org/).",
                "type": "object"
              },
              "systemPrompt": {
                "description": "Le prompt système à utiliser pour l’extraction (facultatif)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "location": {
            "description": "Paramètres de localisation de la requête. Lorsqu’ils sont spécifiés, un proxy approprié sera utilisé si disponible et les paramètres de langue et de fuseau horaire correspondants seront reproduits. Si rien n’est précisé, la valeur par défaut est « US ».",
            "properties": {
              "country": {
                "default": "US",
                "description": "Code de pays ISO 3166-1 alpha-2 (par ex. « US », « AU », « DE », « JP »)",
                "pattern": "^[A-Z]{2}$",
                "type": "string"
              },
              "languages": {
                "description": "Langues et paramètres régionaux préférés de la requête, par ordre de priorité. Par défaut, utilise la langue du lieu spécifié. 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": 0,
            "description": "Retourne une version mise en cache de la page si elle est plus récente que cet âge, en millisecondes. Si une version mise en cache de la page est plus ancienne que cette valeur, la page sera à nouveau explorée. Si vous n’avez pas besoin de données extrêmement fraîches, activer cette option peut accélérer vos opérations de scraping jusqu’à 500 %. La valeur par défaut est 0, ce qui désactive la mise en cache.",
            "type": "integer"
          },
          "mobile": {
            "default": false,
            "description": "Mettez cette option à true si vous souhaitez émuler 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": "Ne renvoyer que le contenu principal de la page, en excluant les en-têtes, éléments de navigation, pieds de page, etc.",
            "type": "boolean"
          },
          "parsePDF": {
            "default": true,
            "description": "Contrôle la façon dont les fichiers PDF sont traités lors du scraping. Lorsque true, 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). Lorsque false, le fichier PDF est renvoyé encodé en base64 avec un tarif forfaitaire de 1 crédit au total.",
            "type": "boolean"
          },
          "proxy": {
            "description": "Spécifie le type de proxy à utiliser.\n\n - **basic** : proxy pour le scraping de sites avec peu ou pas de protections anti‑bots. Rapide et généralement suffisant.\n - **enhanced** : proxy avancé pour le scraping de sites avec des solutions anti‑bots sophistiquées. Plus lent, mais plus fiable sur certains sites. Facturé au même coût en crédits que **basic**.\n - **auto** : Firecrawl réessaiera automatiquement le scraping avec un proxy **enhanced** si le proxy **basic** échoue. Les proxys avancés n’entraînent aucun surcoût en crédits. Dans tous les cas, seul le coût standard sera facturé.\n\nSi vous ne spécifiez pas de proxy, Firecrawl utilisera **basic** par défaut.",
            "enum": [
              "basic",
              "enhanced",
              "auto"
            ],
            "type": "string"
          },
          "removeBase64Images": {
            "default": true,
            "description": "Supprime toutes les images en base64 de la sortie, car elles peuvent être extrêmement volumineuses. Le texte alternatif de l’image est conservé dans la sortie, mais l’URL est remplacée par un placeholder.",
            "type": "boolean"
          },
          "skipTlsVerification": {
            "default": false,
            "description": "Ignorer la vérification du certificat TLS lors des requêtes",
            "type": "boolean"
          },
          "storeInCache": {
            "default": true,
            "description": "Si la valeur est true, la page sera stockée dans l’index et le cache Firecrawl. Définir ce paramètre sur false est utile si votre activité de scraping peut soulever des préoccupations en matière de protection des données. L’utilisation de certains paramètres associés à un scraping sensible (actions, headers) imposera la valeur false à ce paramètre.",
            "type": "boolean"
          },
          "timeout": {
            "default": 30000,
            "description": "Délai d’expiration de la requête (en millisecondes)",
            "type": "integer"
          },
          "waitFor": {
            "default": 0,
            "description": "Indiquez un délai en millisecondes avant de récupérer le contenu, pour laisser à la page le temps de se charger.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "BatchScrapeResponseObj": {
        "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"
          },
          "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 consommés pour le scraping par lots.",
            "type": "integer"
          },
          "data": {
            "description": "Les données de l'extraction par lot.",
            "items": {
              "properties": {
                "html": {
                  "description": "Version HTML du contenu de la page si `includeHtml` est à `true`",
                  "nullable": true,
                  "type": "string"
                },
                "links": {
                  "description": "Liste des liens de 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` vaut 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 suivants de données. 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": "État actuel du scraping par lot. Peut être `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": "Jobs 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 collectée",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "robotsBlocked": {
            "description": "Liste des URL dont le scraping a été tenté mais bloqué par 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": "Le nombre de pages explorées avec succès.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "Nombre de crédits consommés par le crawl.",
            "type": "integer"
          },
          "data": {
            "description": "Les données du crawl.",
            "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 de 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 de statut de la page",
                      "type": "integer"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "rawHtml": {
                  "description": "Contenu HTML brut de la page si `includeRawHtml` vaut `true`",
                  "nullable": true,
                  "type": "string"
                },
                "screenshot": {
                  "description": "Capture d’écran de la page si `includeScreenshot` est défini sur `true`",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "La date et l’heure d’expiration du crawl.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "L’URL permettant de récupérer les 10 Mo suivants de données. Fournie si le crawl n’est pas terminé ou si la réponse dépasse 10 Mo.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "Statut actuel du crawl. Peut être `scraping`, `completed` ou `failed`.",
            "type": "string"
          },
          "total": {
            "description": "Nombre total de pages pour lesquelles un crawl a été tenté.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ExtractResponse": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Si ignoreInvalidURLs vaut true, il s’agit d’un tableau contenant les URL invalides qui ont été spécifiées dans la requête. S’il n’y a aucune URL invalide, ce sera un tableau vide. Si ignoreInvalidURLs vaut 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": "Le statut actuel de la tâche d’extraction",
            "enum": [
              "completed",
              "processing",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "MapResponse": {
        "properties": {
          "links": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ScrapeOptions": {
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseScrapeOptions"
          },
          {
            "properties": {
              "changeTrackingOptions": {
                "description": "Options de suivi des modifications (bêta). Applicable uniquement lorsque 'changeTracking' est inclus dans formats. Le format 'markdown' doit également être spécifié lors de l’utilisation du suivi des modifications.",
                "properties": {
                  "modes": {
                    "description": "Le mode à utiliser pour le suivi des modifications. « 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": "Invite (prompt) à utiliser pour le suivi des modifications en mode « json ». S’il n’est pas fourni, l’invite par défaut sera utilisée.",
                    "type": "string"
                  },
                  "schema": {
                    "description": "Schéma d’extraction JSON utilisé en mode « json ». Définit la structure des données à extraire et à comparer. Doit respecter la spécification [JSON Schema](https://json-schema.org/).",
                    "type": "object"
                  },
                  "tag": {
                    "default": null,
                    "description": "Tag à utiliser pour le suivi des modifications. Les tags peuvent séparer l’historique de suivi des modifications en « branches » distinctes : le suivi associé à un tag donné ne sera comparé qu’aux opérations de scraping effectuées avec ce même tag. Si aucun tag n’est fourni, le tag par défaut (null) sera utilisé.",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "formats": {
                "default": [
                  "markdown"
                ],
                "description": "Formats à inclure dans la sortie.",
                "items": {
                  "enum": [
                    "markdown",
                    "html",
                    "rawHtml",
                    "links",
                    "screenshot",
                    "screenshot@fullPage",
                    "json",
                    "changeTracking"
                  ],
                  "type": "string"
                },
                "type": "array"
              }
            },
            "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": "Les valeurs de retour 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 de scrape indiquées.",
                    "items": {
                      "properties": {
                        "html": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "screenshots": {
                    "description": "URLs de captures d’écran, dans le même ordre que les actions de capture d’écran fournies.",
                    "items": {
                      "format": "url",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "changeTracking": {
                "description": "Informations de suivi des modifications si `changeTracking` figure dans `formats`. Présentes uniquement 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 » signifie que cette page n’existait pas auparavant, « same » signifie que le contenu n’a pas changé, « changed » signifie que le contenu a changé et « removed » signifie que la page a été supprimée.",
                    "enum": [
                      "new",
                      "same",
                      "changed",
                      "removed"
                    ],
                    "type": "string"
                  },
                  "diff": {
                    "description": "Diff de type Git des modifications lors de l’utilisation du mode « git-diff ». Uniquement présent lorsque le mode est défini sur « git-diff ».",
                    "nullable": true,
                    "type": "string"
                  },
                  "json": {
                    "description": "Résultats de comparaison JSON lors de l’utilisation du mode `json`. Uniquement disponible lorsque le mode est défini sur `json`. Retourne une 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 scraping précédent.",
                    "format": "date-time",
                    "nullable": true,
                    "type": "string"
                  },
                  "visibility": {
                    "description": "La visibilité de la page ou de l’URL en cours. « visible » signifie que l’URL a été découverte de manière organique (via des liens ou un sitemap), « hidden » signifie que l’URL a été découverte via 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` figure dans `formats`",
                "nullable": true,
                "type": "string"
              },
              "links": {
                "description": "Liste des liens présents sur la page si `links` figure dans `formats`",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "llm_extraction": {
                "description": "Affiché lors de l’utilisation de l’extraction LLM. Données extraites de la page selon le schéma défini.",
                "nullable": true,
                "type": "object"
              },
              "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 `rawHtml` figure dans `formats`",
                "nullable": true,
                "type": "string"
              },
              "screenshot": {
                "description": "Capture d’écran de la page si `screenshot` est inclus dans `formats`",
                "nullable": true,
                "type": "string"
              },
              "warning": {
                "description": "Peut être affiché lors de l’utilisation de LLM Extraction. Un message d’avertissement vous signalera tout problème lié à l’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 web scraping et de crawling de sites web.",
    "title": "Firecrawl API",
    "version": "v1"
  },
  "openapi": "3.0.0",
  "paths": {
    "/batch/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "ignoreInvalidURLs": {
                        "default": false,
                        "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, une opération de scraping par lots sera effectuée 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 scraping par lot. S’il n’est pas défini, le scraping par lot respecte la limite de parallélisme de votre équipe.",
                        "type": "integer"
                      },
                      "urls": {
                        "items": {
                          "description": "L’URL à scraper",
                          "format": "uri",
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "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 toutes les requêtes webhook de ce crawl",
                            "type": "object"
                          },
                          "url": {
                            "description": "L’URL à laquelle envoyer le webhook. Celui-ci sera déclenché au démarrage d’un batch scrape (batch_scrape.started), pour chaque page traitée (batch_scrape.page) et lorsque le batch scrape est terminé (batch_scrape.completed ou batch_scrape.failed). La réponse sera la même que celle de 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 lot de 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/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": "Scraper plusieurs URL et, éventuellement, 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 effectuée"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Batch scrape job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Job 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 une tâche de scraping par lots",
        "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 par 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 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 du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir les erreurs d'une tâche de scraping par lot",
        "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": {
                  "allowBackwardLinks": {
                    "default": false,
                    "deprecated": true,
                    "description": "⚠️ OBSOLÈTE : utilisez plutôt « crawlEntireDomain ». Permet au crawler de suivre les liens internes vers des URL au même niveau ou parentes, et pas seulement vers des URL enfants.",
                    "type": "boolean"
                  },
                  "allowExternalLinks": {
                    "default": false,
                    "description": "Permet au crawler de suivre les liens vers des sites web externes.",
                    "type": "boolean"
                  },
                  "allowSubdomains": {
                    "default": false,
                    "description": "Permet au crawler de suivre les liens vers les sous-domaines du domaine principal.",
                    "type": "boolean"
                  },
                  "crawlEntireDomain": {
                    "default": false,
                    "description": "Permet au crawler de suivre les liens internes vers des URL parentes ou de même niveau, 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 la valeur true pour une couverture interne plus large, au-delà des chemins imbriqués.",
                    "type": "boolean"
                  },
                  "delay": {
                    "description": "Délai en secondes entre deux opérations de scraping. Ce paramètre aide à respecter les limites de fréquence imposées par les sites web.",
                    "type": "number"
                  },
                  "excludePaths": {
                    "description": "Expressions régulières de chemins d’URL qui permettent d’exclure du crawl les URL correspondantes. Par exemple, si vous définissez \"excludePaths\": [\"blog/.*\"] pour l’URL de base firecrawl.dev, tous les résultats correspondant à ce motif 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ètre de requête)",
                    "type": "boolean"
                  },
                  "ignoreSitemap": {
                    "default": false,
                    "description": "Ignorer le sitemap du site lors de l’exploration",
                    "type": "boolean"
                  },
                  "includePaths": {
                    "description": "Motifs d’expressions régulières appliqués aux chemins d’URL qui définissent les URL à inclure dans le crawl. Seuls les chemins correspondant aux motifs indiqué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 de scrapes simultanés. Ce paramètre vous permet de définir la limite de concurrence pour ce crawl. S’il n’est pas renseigné, le crawl utilise la limite de concurrence de votre équipe.",
                    "type": "integer"
                  },
                  "maxDepth": {
                    "default": 10,
                    "description": "Profondeur absolue maximale à explorer à partir de l’URL de base fournie. Concrètement, cela correspond au nombre maximal de « / » que le chemin (pathname) d’une URL collectée peut contenir.",
                    "type": "integer"
                  },
                  "maxDiscoveryDepth": {
                    "description": "Profondeur maximale de crawl basée sur l’ordre de découverte. Le site racine et les pages du sitemap ont une profondeur de découverte de 0. Par exemple, si vous la définissez sur 1 et que vous activez ignoreSitemap, vous ne parcourrez que l’URL saisie et toutes les URL qui sont liées depuis cette page.",
                    "type": "integer"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "url": {
                    "description": "L’URL de base à partir de laquelle lancer 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 toutes les données de webhook pour ce crawl",
                        "type": "object"
                      },
                      "url": {
                        "description": "L’URL à laquelle envoyer le webhook. Celui-ci sera déclenché au lancement 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 cette valeur est définie sur true, aucune donnée ne sera conservée lors de ce crawl. Pour activer cette option, 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 spécifiées",
        "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 cette exploration",
                            "properties": {
                              "scrapeOptions": {
                                "$ref": "#/components/schemas/ScrapeOptions"
                              }
                            },
                            "type": "object"
                          },
                          "teamId": {
                            "description": "L’ID de l’équipe à laquelle appartient le 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": "Obtenir 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 effectuée"
          },
          "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": "Récupérer l'état d'une tâche de crawl",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "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 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’un job de crawl",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "ID de la tâche de crawl",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/deep-research": {
      "post": {
        "operationId": "startDeepResearch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "analysisPrompt": {
                    "description": "Le prompt à utiliser pour l’analyse finale. Utile pour mettre en forme le markdown de l’analyse finale selon un format spécifique.",
                    "type": "string"
                  },
                  "formats": {
                    "items": {
                      "default": [
                        "markdown"
                      ],
                      "enum": [
                        "markdown",
                        "json"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "jsonOptions": {
                    "description": "Options de sortie au format JSON",
                    "properties": {
                      "prompt": {
                        "description": "Le prompt à utiliser pour la sortie au format JSON",
                        "type": "string"
                      },
                      "schema": {
                        "description": "Le schéma à utiliser pour la sortie au format JSON. Doit être conforme à la [spécification JSON Schema](https://json-schema.org/).",
                        "type": "object"
                      },
                      "systemPrompt": {
                        "description": "L’invite système à utiliser pour la sortie JSON",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "maxDepth": {
                    "default": 7,
                    "description": "Profondeur maximale des itérations de recherche",
                    "maximum": 12,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "maxUrls": {
                    "default": 20,
                    "description": "Nombre maximal d’URL à analyser",
                    "maximum": 1000,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "description": "La requête à étudier",
                    "type": "string"
                  },
                  "systemPrompt": {
                    "description": "L’invite système à utiliser pour l’agent de recherche. Permet d’orienter l’agent de recherche dans une direction précise.",
                    "type": "string"
                  },
                  "timeLimit": {
                    "default": 300,
                    "description": "Limite de temps (en secondes)",
                    "maximum": 600,
                    "minimum": 30,
                    "type": "integer"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "id": {
                      "description": "ID de la tâche de recherche",
                      "format": "uuid",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tâche de recherche lancée avec succès"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid parameters provided",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paramètres de requête non valides"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Lancer une recherche approfondie sur une requête",
        "tags": [
          "Research"
        ]
      }
    },
    "/deep-research/{id}": {
      "get": {
        "operationId": "getDeepResearchStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "activities": {
                          "items": {
                            "properties": {
                              "depth": {
                                "type": "integer"
                              },
                              "message": {
                                "type": "string"
                              },
                              "status": {
                                "type": "string"
                              },
                              "timestamp": {
                                "format": "date-time",
                                "type": "string"
                              },
                              "type": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "currentDepth": {
                          "type": "integer"
                        },
                        "error": {
                          "type": "string"
                        },
                        "expiresAt": {
                          "format": "date-time",
                          "type": "string"
                        },
                        "finalAnalysis": {
                          "type": "string"
                        },
                        "json": {
                          "description": "Affiché lorsque le format JSON est utilisé",
                          "nullable": true,
                          "type": "object"
                        },
                        "maxDepth": {
                          "type": "integer"
                        },
                        "sources": {
                          "items": {
                            "properties": {
                              "description": {
                                "type": "string"
                              },
                              "favicon": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "status": {
                          "enum": [
                            "processing",
                            "completed",
                            "failed"
                          ],
                          "type": "string"
                        },
                        "totalUrls": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse en cas de succès"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Research job not found",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tâche de recherche introuvable"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Récupérez l’état et les résultats d’une opération de recherche approfondie",
        "tags": [
          "Research"
        ]
      },
      "parameters": [
        {
          "description": "L’identifiant de la tâche de recherche",
          "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": "Si la valeur est true, l’extraction utilisera la recherche sur le web pour trouver des données supplémentaires",
                    "type": "boolean"
                  },
                  "ignoreInvalidURLs": {
                    "default": false,
                    "description": "Si des URL non valides sont spécifiées dans le tableau urls, elles seront ignorées. Au lieu de faire échouer 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": "Lorsque la valeur est true, les fichiers sitemap.xml seront ignorés lors de l’analyse du site web",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Lorsque ce paramètre est à true, les sous-domaines des URL fournies seront également explorés",
                    "type": "boolean"
                  },
                  "prompt": {
                    "description": "Prompt permettant de guider le processus d'extraction",
                    "type": "string"
                  },
                  "schema": {
                    "description": "Schéma définissant la structure des données extraites. Doit être conforme au standard [JSON Schema](https://json-schema.org/).",
                    "type": "object"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "showSources": {
                    "default": false,
                    "description": "Lorsque cette option vaut 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 dont extraire les données. 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 depuis des 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": "Récupérer l’état d’une tâche d’extraction",
        "tags": [
          "Extraction"
        ]
      },
      "parameters": [
        {
          "description": "L’ID du job d’extraction",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/llmstxt": {
      "post": {
        "operationId": "generateLLMsTxt",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "maxUrls": {
                    "default": 2,
                    "description": "Nombre maximal d’URL à analyser",
                    "type": "integer"
                  },
                  "showFullText": {
                    "default": false,
                    "description": "Inclure l’intégralité du texte dans la réponse",
                    "type": "boolean"
                  },
                  "url": {
                    "description": "L’URL utilisée pour générer LLMs.txt",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "id": {
                      "description": "ID de la tâche de génération de LLMs.txt",
                      "format": "uuid",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "La tâche de génération du fichier LLMs.txt a été lancée avec succès"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid parameters provided",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paramètres de requête invalides"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Générer un fichier LLMs.txt pour un site Web",
        "tags": [
          "LLMs.txt"
        ]
      }
    },
    "/llmstxt/{id}": {
      "get": {
        "operationId": "getLLMsTxtStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "llmsfulltxt": {
                          "description": "Le contenu textuel complet lorsque showFullText vaut true",
                          "type": "string"
                        },
                        "llmstxt": {
                          "description": "Le contenu généré du fichier LLMs.txt",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "expiresAt": {
                      "description": "Date d’expiration du contenu généré",
                      "format": "date-time",
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "processing",
                        "completed",
                        "failed"
                      ],
                      "type": "string"
                    },
                    "success": {
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse réussie"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "LLMs.txt generation job not found",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tâche de génération de LLMs.txt introuvable"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir l’état et les résultats d’une tâche de génération de LLMs.txt",
        "tags": [
          "LLMs.txt"
        ]
      },
      "parameters": [
        {
          "description": "L’ID de la tâche de génération du fichier LLMs.txt",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/map": {
      "post": {
        "operationId": "mapUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "ignoreSitemap": {
                    "default": true,
                    "description": "Ignorer le sitemap du site lors de l’exploration.",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Inclure les sous-domaines du site",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5000,
                    "description": "Nombre maximal de liens à renvoyer",
                    "maximum": 30000,
                    "type": "integer"
                  },
                  "search": {
                    "description": "Requête de recherche à utiliser pour la cartographie. Pendant la phase Alpha, la composante « intelligente » de la recherche est limitée à 500 résultats. En revanche, si la cartographie renvoie davantage de résultats, aucune limite n’est appliquée.",
                    "type": "string"
                  },
                  "sitemapOnly": {
                    "default": false,
                    "description": "Ne renvoyer que les liens présents dans le sitemap du site",
                    "type": "boolean"
                  },
                  "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 pour démarrer 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 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 à explorer",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "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 cette opération de 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": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "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 la recherche les URL qui ne sont pas valides pour d’autres endpoints Firecrawl. Cela permet de réduire les erreurs si vous réutilisez les données issues de la recherche dans 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": "La requête de recherche",
                    "type": "string"
                  },
                  "scrapeOptions": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseScrapeOptions"
                      },
                      {
                        "properties": {
                          "formats": {
                            "default": [],
                            "items": {
                              "enum": [
                                "markdown",
                                "html",
                                "rawHtml",
                                "links",
                                "screenshot",
                                "screenshot@fullPage",
                                "json",
                                "extract"
                              ],
                              "type": "string"
                            },
                            "type": "array"
                          }
                        },
                        "type": "object"
                      }
                    ],
                    "default": {},
                    "description": "Options pour le scraping des résultats de recherche"
                  },
                  "tbs": {
                    "description": "Paramètre de recherche temporel. Prend en charge des intervalles 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’attente en millisecondes",
                    "type": "integer"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "properties": {
                          "description": {
                            "description": "Description du résultat de la recherche",
                            "type": "string"
                          },
                          "html": {
                            "description": "Contenu HTML si demandé dans le paramètre formats",
                            "nullable": true,
                            "type": "string"
                          },
                          "links": {
                            "description": "Liens trouvés, si demandés, dans formats",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "markdown": {
                            "description": "Contenu en 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"
                          },
                          "rawHtml": {
                            "description": "Contenu HTML brut si demandé dans formats",
                            "nullable": true,
                            "type": "string"
                          },
                          "screenshot": {
                            "description": "URL de la capture d’écran si elle est demandée dans formats",
                            "nullable": true,
                            "type": "string"
                          },
                          "title": {
                            "description": "Titre du résultat de la recherche",
                            "type": "string"
                          },
                          "url": {
                            "description": "URL du résultat de recherche",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "type": "boolean"
                    },
                    "warning": {
                      "description": "Message d'avertissement en cas de problèmes",
                      "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": {
                    "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, extraire les résultats de recherche",
        "tags": [
          "Search"
        ]
      }
    },
    "/team/credit-usage": {
      "get": {
        "operationId": "getCreditUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billing_period_end": {
                          "description": "Date de fin de la période de facturation. null si vous utilisez le forfait gratuit",
                          "example": "2025-01-31T23:59:59Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "billing_period_start": {
                          "description": "Date de début de la période de facturation. null si vous utilisez le forfait gratuit",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "plan_credits": {
                          "description": "Nombre de crédits inclus dans l’offre. Cela n’inclut pas les crédits issus de coupons ni les crédits ajoutés via le paiement à l’utilisation.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remaining_credits": {
                          "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": "Informations relatives à l'utilisation des crédits introuvables"
          },
          "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": "Récupérer le solde de crédits 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é API utilisée pendant la période de facturation. null si byApiKey vaut 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 au cours de la période de facturation",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse réussie"
          },
          "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 de l’équipe authentifiée",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage": {
      "get": {
        "operationId": "getTokenUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billing_period_end": {
                          "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"
                        },
                        "billing_period_start": {
                          "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"
                        },
                        "plan_tokens": {
                          "description": "Nombre de jetons inclus dans l’offre. Les jetons issus de coupons ne sont pas comptabilisés.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remaining_tokens": {
                          "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": "Impossible de trouver les informations sur l’utilisation des jetons"
          },
          "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": "Récupérer le nombre de jetons restants pour l’équipe authentifiée (extraction uniquement)",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage/historical": {
      "get": {
        "operationId": "getHistoricalTokenUsage",
        "parameters": [
          {
            "description": "Obtenir l’historique d’utilisation des jetons par clé d’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é API utilisée pour la période de facturation. null si byApiKey vaut false (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 tokens utilisés au cours de 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 du serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir l’historique d’utilisation des tokens de l’équipe authentifiée (extraction uniquement)",
        "tags": [
          "Billing"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://api.firecrawl.dev/v1"
    }
  ]
}