{
  "components": {
    "schemas": {
      "CrawlResponse": {
        "properties": {
          "jobId": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "CrawlStatusResponseObj": {
        "properties": {
          "content": {
            "type": "string"
          },
          "html": {
            "description": "Version HTML du contenu de la page si `includeHtml` vaut `true`",
            "nullable": true,
            "type": "string"
          },
          "index": {
            "description": "Le numéro de la page explorée. Utile avec `partial_data` pour savoir de quelle page proviennent les données.",
            "type": "integer"
          },
          "markdown": {
            "type": "string"
          },
          "metadata": {
            "properties": {
              "<any other metadata> ": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "language": {
                "nullable": true,
                "type": "string"
              },
              "pageError": {
                "description": "Le message d'erreur de la page",
                "nullable": true,
                "type": "string"
              },
              "pageStatusCode": {
                "description": "Le code d’état HTTP de la page",
                "type": "integer"
              },
              "sourceURL": {
                "format": "uri",
                "type": "string"
              },
              "title": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "rawHtml": {
            "description": "Contenu HTML brut de la page si `includeRawHtml` vaut `true`",
            "nullable": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "ScrapeResponse": {
        "properties": {
          "data": {
            "properties": {
              "content": {
                "type": "string"
              },
              "html": {
                "description": "Version HTML du contenu de la page si `includeHtml` a la valeur `true`",
                "nullable": true,
                "type": "string"
              },
              "llm_extraction": {
                "description": "Affiché lors de l’utilisation de l’extraction LLM. Données extraites de la page conformément au schéma défini.",
                "nullable": true,
                "type": "object"
              },
              "markdown": {
                "type": "string"
              },
              "metadata": {
                "properties": {
                  "<any other metadata> ": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "language": {
                    "nullable": true,
                    "type": "string"
                  },
                  "pageError": {
                    "description": "Le message d’erreur de la page",
                    "nullable": true,
                    "type": "string"
                  },
                  "pageStatusCode": {
                    "description": "Le code de statut HTTP de la page",
                    "type": "integer"
                  },
                  "sourceURL": {
                    "format": "uri",
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "rawHtml": {
                "description": "Contenu HTML brut de la page si `includeRawHtml` vaut true",
                "nullable": true,
                "type": "string"
              },
              "warning": {
                "description": "Peut s’afficher lors de l’utilisation de l’extraction LLM. Un message d’avertissement vous indiquera tout problème rencontré lors de l’extraction.",
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "SearchResponse": {
        "properties": {
          "data": {
            "items": {
              "properties": {
                "content": {
                  "type": "string"
                },
                "markdown": {
                  "type": "string"
                },
                "metadata": {
                  "properties": {
                    "description": {
                      "type": "string"
                    },
                    "language": {
                      "nullable": true,
                      "type": "string"
                    },
                    "sourceURL": {
                      "format": "uri",
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "url": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "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 et effectuer des tâches de web scraping et de crawling.",
    "title": "Firecrawl API",
    "version": "v0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/crawl": {
      "post": {
        "operationId": "crawlUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "crawlerOptions": {
                    "properties": {
                      "allowBackwardCrawling": {
                        "default": false,
                        "description": "Permet au crawler de remonter d’une URL spécifique vers des pages précédemment liées. Par exemple, de « example.com/product/123 » à « example.com/product »",
                        "type": "boolean"
                      },
                      "allowExternalContentLinks": {
                        "default": false,
                        "description": "Permet au crawler de suivre les liens pointant vers des sites web externes.",
                        "type": "boolean"
                      },
                      "excludes": {
                        "description": "Modèles d’URL à exclure",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "generateImgAltText": {
                        "default": false,
                        "description": "Générer du texte alternatif pour les images à l’aide de modèles de langage (LLM) (nécessite un abonnement payant)",
                        "type": "boolean"
                      },
                      "ignoreSitemap": {
                        "default": false,
                        "description": "Ignorer le sitemap du site lors du crawl",
                        "type": "boolean"
                      },
                      "includes": {
                        "description": "Modèles d’URL à inclure",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "limit": {
                        "default": 10000,
                        "description": "Nombre maximal de pages à explorer",
                        "type": "integer"
                      },
                      "maxDepth": {
                        "description": "Profondeur maximale d’exploration par rapport à l’URL fournie. Une valeur maxDepth de 0 n’extrait que l’URL fournie. Une valeur maxDepth de 1 extrait l’URL fournie et toutes les pages à un niveau de profondeur. Une valeur maxDepth de 2 extrait l’URL fournie et toutes les pages jusqu’à deux niveaux de profondeur. Les valeurs plus élevées suivent le même principe.",
                        "type": "integer"
                      },
                      "mode": {
                        "default": "default",
                        "description": "Le mode d’exploration à utiliser. Le mode rapide explore les sites web sans sitemap jusqu’à 4 fois plus vite, mais peut être moins précis et ne doit pas être utilisé sur des sites fortement dépendants du rendu JavaScript.",
                        "enum": [
                          "default",
                          "fast"
                        ],
                        "type": "string"
                      },
                      "returnOnlyUrls": {
                        "default": false,
                        "description": "Si la valeur est true, renvoie uniquement les URL sous forme de liste dans le statut de crawl. Attention : la réponse renvoyée sera une liste d’URL dans le champ data, et non une liste de documents.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "pageOptions": {
                    "properties": {
                      "fullPageScreenshot": {
                        "default": false,
                        "description": "Incluez une capture d’écran de la page entière que vous scrapez.",
                        "type": "boolean"
                      },
                      "headers": {
                        "description": "En-têtes à inclure dans la requête. Ils peuvent être utilisés pour envoyer des cookies, un user-agent, etc.",
                        "type": "object"
                      },
                      "includeHtml": {
                        "default": false,
                        "description": "Inclut la version HTML du contenu de la page. La réponse contiendra une clé html.",
                        "type": "boolean"
                      },
                      "includeRawHtml": {
                        "default": false,
                        "description": "Inclut le contenu HTML brut de la page. Produit une clé rawHtml dans la réponse.",
                        "type": "boolean"
                      },
                      "onlyIncludeTags": {
                        "description": "N’incluez dans le résultat final que les balises, classes et IDs présents sur la page. Utilisez des valeurs séparées par des virgules. Exemple : 'script, .ad, #footer'",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "onlyMainContent": {
                        "default": false,
                        "description": "Renvoyer uniquement le contenu principal de la page, en excluant les en-têtes, éléments de navigation, pieds de page, etc.",
                        "type": "boolean"
                      },
                      "removeTags": {
                        "description": "Balises, classes et ID à supprimer de la page. Utilisez des valeurs séparées par des virgules. Exemple : 'script, .ad, #footer'",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "replaceAllPathsWithAbsolutePaths": {
                        "default": false,
                        "description": "Remplacez tous les chemins relatifs des images et des liens par des chemins absolus",
                        "type": "boolean"
                      },
                      "screenshot": {
                        "default": false,
                        "description": "Incluez une capture d’écran de la partie supérieure de la page que vous scrapez.",
                        "type": "boolean"
                      },
                      "waitFor": {
                        "default": 0,
                        "description": "Attendre x millisecondes pour laisser la page se charger avant de récupérer le contenu",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "url": {
                    "description": "L’URL de base à partir de laquelle lancer le crawl",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlResponse"
                }
              }
            },
            "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": "Explorer plusieurs URL selon les options",
        "tags": [
          "Crawling"
        ]
      }
    },
    "/crawl/cancel/{jobId}": {
      "delete": {
        "operationId": "cancelCrawlJob",
        "parameters": [
          {
            "description": "ID de la tâche de crawl",
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "description": "Retours annulés.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "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": "Annuler une tâche de crawl",
        "tags": [
          "Crawl"
        ]
      }
    },
    "/crawl/status/{jobId}": {
      "get": {
        "operationId": "getCrawlStatus",
        "parameters": [
          {
            "description": "Identifiant de la tâche de crawl",
            "in": "path",
            "name": "jobId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "current": {
                      "description": "Numéro de la page actuelle",
                      "type": "integer"
                    },
                    "data": {
                      "description": "Données renvoyées par la tâche (null lorsqu’elle est en cours)",
                      "items": {
                        "$ref": "#/components/schemas/CrawlStatusResponseObj"
                      },
                      "type": "array"
                    },
                    "partial_data": {
                      "description": "Documents partiels renvoyés au fur et à mesure du crawl (streaming). **Cette fonctionnalité est actuellement en alpha – attendez-vous à des changements majeurs**. Lorsqu’une page est prête, elle est ajoutée au tableau `partial_data`, il n’est donc pas nécessaire d’attendre que l’ensemble du site ait été exploré. Quand le crawl est terminé, `partial_data` est vidé et le résultat est disponible dans `data`. Il y a un maximum de 50 éléments dans le tableau de réponse. L’élément le plus ancien (en haut du tableau) est supprimé lorsqu’un nouvel élément est ajouté au tableau.",
                      "items": {
                        "$ref": "#/components/schemas/CrawlStatusResponseObj"
                      },
                      "type": "array"
                    },
                    "status": {
                      "description": "Statut du job (terminé, en cours, échoué, en pause)",
                      "type": "string"
                    },
                    "total": {
                      "description": "Nombre total de pages",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Réponse réussie"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Paiement requis"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trop de requêtes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erreur serveur"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenir l’état d’une tâche de crawl",
        "tags": [
          "Crawl"
        ]
      }
    },
    "/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrl",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "extractorOptions": {
                    "default": {},
                    "description": "Options d’extraction d’informations structurées à partir du contenu de la page. Remarque : l’extraction basée sur un LLM n’est pas effectuée par défaut et n’est lancée que lorsqu’elle est explicitement configurée. Le mode « markdown » renvoie simplement le markdown récupéré et constitue le mode de scraping par défaut.",
                    "properties": {
                      "extractionPrompt": {
                        "description": "Un prompt décrivant les informations à extraire de la page, applicable aux modes d’extraction LLM.",
                        "type": "string"
                      },
                      "extractionSchema": {
                        "additionalProperties": true,
                        "description": "Schéma des données à extraire, nécessaire uniquement pour les modes d’extraction LLM.",
                        "required": [
                          "company_mission",
                          "supports_sso",
                          "is_open_source"
                        ],
                        "type": "object"
                      },
                      "mode": {
                        "description": "Le mode d’extraction à utiliser. 'markdown' : renvoie le contenu Markdown extrait, sans effectuer d’extraction via LLM. 'llm-extraction' : extrait des informations à partir du contenu nettoyé et analysé à l’aide d’un LLM. 'llm-extraction-from-raw-html' : extrait des informations directement à partir du HTML brut à l’aide d’un LLM. 'llm-extraction-from-markdown' : extrait des informations à partir du contenu Markdown à l’aide d’un LLM.",
                        "enum": [
                          "markdown",
                          "llm-extraction",
                          "llm-extraction-from-raw-html",
                          "llm-extraction-from-markdown"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "pageOptions": {
                    "properties": {
                      "fullPageScreenshot": {
                        "default": false,
                        "description": "Incluez une capture d’écran de la page entière que vous scrapez.",
                        "type": "boolean"
                      },
                      "headers": {
                        "description": "En-têtes à inclure dans la requête. Peuvent être utilisés pour envoyer des cookies, un user-agent, etc.",
                        "type": "object"
                      },
                      "includeHtml": {
                        "default": false,
                        "description": "Inclure la version HTML du contenu de la page. La réponse contiendra une clé html.",
                        "type": "boolean"
                      },
                      "includeRawHtml": {
                        "default": false,
                        "description": "Inclure le contenu HTML brut de la page. Retourne une clé rawHtml dans la réponse.",
                        "type": "boolean"
                      },
                      "onlyIncludeTags": {
                        "description": "N’incluez dans le résultat final que les balises, classes et ID présents sur la page. Utilisez des valeurs séparées par des virgules. Exemple : 'script, .ad, #footer'",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "onlyMainContent": {
                        "default": false,
                        "description": "Renvoyez uniquement le contenu principal de la page, en excluant les en-têtes, barres de navigation, pieds de page, etc.",
                        "type": "boolean"
                      },
                      "removeTags": {
                        "description": "Balises, classes et ID à supprimer de la page. Utilisez des valeurs séparées par des virgules. Exemple : « script, .ad, #footer »",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "replaceAllPathsWithAbsolutePaths": {
                        "default": false,
                        "description": "Remplacez tous les chemins relatifs par des chemins absolus pour les images et les liens",
                        "type": "boolean"
                      },
                      "screenshot": {
                        "default": false,
                        "description": "Incluez une capture d’écran de la partie supérieure de la page que vous scrapez.",
                        "type": "boolean"
                      },
                      "waitFor": {
                        "default": 0,
                        "description": "Attendre x millisecondes que la page se charge avant de récupérer le contenu",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "timeout": {
                    "default": 30000,
                    "description": "Délai d’attente de la requête, en millisecondes",
                    "type": "integer"
                  },
                  "url": {
                    "description": "L’URL à analyser",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScrapeResponse"
                }
              }
            },
            "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": "Scraper une seule URL et, en option, en extraire des informations à l’aide d’un LLM",
        "tags": [
          "Scraping"
        ]
      }
    },
    "/search": {
      "post": {
        "operationId": "searchGoogle",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "pageOptions": {
                    "properties": {
                      "fetchPageContent": {
                        "default": true,
                        "description": "Récupère le contenu de chaque page. S’il est à false, une API SERP simple et rapide est utilisée par défaut.",
                        "type": "boolean"
                      },
                      "includeHtml": {
                        "default": false,
                        "description": "Inclure la version HTML du contenu de la page. Une clé html sera présente dans la réponse.",
                        "type": "boolean"
                      },
                      "includeRawHtml": {
                        "default": false,
                        "description": "Inclut le contenu HTML brut de la page. Produit une clé rawHtml dans la réponse.",
                        "type": "boolean"
                      },
                      "onlyMainContent": {
                        "default": false,
                        "description": "Ne renvoyez que le contenu principal de la page, sans les en-têtes, éléments de navigation, pieds de page, etc.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "query": {
                    "description": "La requête à rechercher",
                    "format": "uri",
                    "type": "string"
                  },
                  "searchOptions": {
                    "properties": {
                      "limit": {
                        "description": "Nombre maximal de résultats. Limite fixée à 20 pendant la bêta.",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            },
            "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": "Recherche un mot-clé sur Google et renvoie les principaux résultats, avec pour chacun le contenu de la page au format Markdown",
        "tags": [
          "Search"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://api.firecrawl.dev/v0"
    }
  ]
}