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

# Introduction

> Recherchez sur le web, scrapez n’importe quelle page et interagissez avec elle, le tout via une seule API.

export const McpClientSelector = () => {
  const writeClipboard = async text => {
    try {
      await navigator.clipboard.writeText(text);
      return true;
    } catch {
      const textarea = document.createElement("textarea");
      textarea.value = text;
      textarea.setAttribute("readonly", "");
      textarea.style.position = "fixed";
      textarea.style.top = "-9999px";
      document.body.appendChild(textarea);
      textarea.select();
      let copied = false;
      try {
        copied = document.execCommand("copy");
      } catch {
        copied = false;
      }
      document.body.removeChild(textarea);
      return copied;
    }
  };
  const mcpUrl = "https://mcp.firecrawl.dev/v2/mcp";
  const cursorInstallUrl = "cursor://anysphere.cursor-deeplink/mcp/install?name=firecrawl&config=eyJ1cmwiOiJodHRwczovL21jcC5maXJlY3Jhd2wuZGV2L3YyL21jcCJ9";
  const cursorConfig = `{
  "mcpServers": {
    "firecrawl": {
      "url": "${mcpUrl}"
    }
  }
}`;
  const opencodeConfig = `{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "firecrawl": {
      "type": "remote",
      "url": "${mcpUrl}",
      "enabled": true
    }
  }
}`;
  const clients = [{
    id: "claude-code",
    name: "Claude Code",
    detail: "Run in terminal",
    icon: "/images/agent-clients/claude-code.svg",
    iconClassName: "",
    command: `claude mcp add --transport http firecrawl ${mcpUrl}`,
    description: "Run this in your terminal to add Firecrawl as a remote MCP server in Claude Code.",
    hint: <>
          Then run <code>/mcp</code> and confirm <strong>firecrawl</strong> is connected.
        </>
  }, {
    id: "codex",
    name: "Codex",
    detail: "Run in terminal",
    icon: "/images/agent-clients/codex.svg",
    iconClassName: "",
    command: `codex mcp add firecrawl --url ${mcpUrl}`,
    description: "Run this in your terminal to add Firecrawl as a remote MCP server in Codex.",
    hint: <>
          Then run <code>codex mcp list</code> and confirm <strong>firecrawl</strong> is
          enabled.
        </>
  }, {
    id: "cursor",
    name: "Cursor",
    detail: "One-click + JSON",
    icon: "/images/agent-clients/cursor.svg",
    iconClassName: "fc-client-icon-mono",
    code: cursorConfig,
    codeLabel: "mcp.json",
    codeClassName: "",
    installUrl: cursorInstallUrl,
    description: "Install the hosted MCP server in one click, or copy the configuration below.",
    hint: <>
          Open <strong>Cursor Settings</strong>, select <strong>MCP</strong>, and confirm{" "}
          <strong>firecrawl</strong> is connected.
        </>
  }, {
    id: "opencode",
    name: "OpenCode",
    detail: "Copy config",
    icon: "/images/agent-clients/opencode.svg",
    iconClassName: "fc-client-icon-mono",
    code: opencodeConfig,
    codeLabel: "opencode.json",
    codeClassName: "",
    description: "Add this remote server configuration to your global or project config.",
    hint: <>
          Then run <code>opencode mcp list</code> and confirm{" "}
          <strong>firecrawl</strong> is connected.
        </>
  }];
  const [activeId, setActiveId] = useState(clients[0].id);
  const [copiedId, setCopiedId] = useState(null);
  const [status, setStatus] = useState("");
  const tabRefs = useRef([]);
  const timeoutRef = useRef(null);
  useEffect(() => () => window.clearTimeout(timeoutRef.current), []);
  const copy = async (id, text, label) => {
    const copied = await writeClipboard(text);
    if (copied) {
      window.clearTimeout(timeoutRef.current);
      setCopiedId(id);
      setStatus(`${label} copied to clipboard.`);
      timeoutRef.current = window.setTimeout(() => {
        setCopiedId(null);
        setStatus("");
      }, 2000);
    } else {
      setCopiedId(null);
      setStatus(`Could not copy ${label.toLowerCase()}.`);
    }
  };
  const copyIcon = () => <svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
      <rect width="14" height="14" x="8" y="8" rx="2" />
      <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
    </svg>;
  const checkIcon = () => <svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
      <path d="m20 6-11 11-5-5" />
    </svg>;
  const arrowIcon = () => <svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
      <path d="M5 12h14" />
      <path d="m13 6 6 6-6 6" />
    </svg>;
  const curvyCorners = () => {
    const path = "M11 1L11 11L10 11L10 7C10 3.68629 7.31371 1 4 1L0 1L0 0L11 0L11 1Z";
    return <span className="fc-curvy-corners" aria-hidden="true">
        <svg className="fc-curve fc-curve-tl" viewBox="0 0 11 11">
          <path d={path} />
        </svg>
        <svg className="fc-curve fc-curve-tr" viewBox="0 0 11 11">
          <path d={path} />
        </svg>
        <svg className="fc-curve fc-curve-bl" viewBox="0 0 11 11">
          <path d={path} />
        </svg>
        <svg className="fc-curve fc-curve-br" viewBox="0 0 11 11">
          <path d={path} />
        </svg>
      </span>;
  };
  const copyButton = ({id, text, label}) => {
    const copied = copiedId === id;
    return <button type="button" className={`fc-copy-button${copied ? " is-copied" : ""}`} onClick={() => copy(id, text, label)} aria-label={copied ? `${label} copied` : `Copy ${label}`}>
        {copied ? checkIcon() : copyIcon()}
        <span>{copied ? "Copied" : "Copy"}</span>
      </button>;
  };
  const commandRow = ({id, command, label, prompt}) => <div className="fc-command-row">
      <div className="fc-command-scroll" tabIndex={0}>
        {prompt && <span className="fc-command-prompt" aria-hidden="true">
            $
          </span>}
        <code>{command}</code>
      </div>
      {copyButton({
    id,
    text: command,
    label
  })}
    </div>;
  const codeBlock = ({client}) => <div className={`fc-code-block ${client.codeClassName || ""}`.trim()}>
      <div className="fc-code-header">
        <span>{client.codeLabel}</span>
        {copyButton({
    id: `code-${client.id}`,
    text: client.code,
    label: client.codeLabel
  })}
      </div>
      <pre>
        <code>{client.code}</code>
      </pre>
    </div>;
  const selectTab = index => {
    const client = clients[index];
    setActiveId(client.id);
    tabRefs.current[index]?.focus();
  };
  const handleKeyDown = (event, index) => {
    let nextIndex = index;
    if (event.key === "ArrowRight") nextIndex = (index + 1) % clients.length; else if (event.key === "ArrowLeft") nextIndex = (index - 1 + clients.length) % clients.length; else if (event.key === "Home") nextIndex = 0; else if (event.key === "End") nextIndex = clients.length - 1; else return;
    event.preventDefault();
    selectTab(nextIndex);
  };
  return <section className="fc-agent-first not-prose" aria-labelledby="fc-mcp-heading">
      {curvyCorners()}
      <div className="fc-agent-first-header">
        <div>
          <h3 id="fc-mcp-heading">Setup Firecrawl MCP Server</h3>
          <p>No API key required. Sign up only when you need more.</p>
        </div>
        <a className="fc-all-options-link" href="/mcp-server">
          See all setup options {arrowIcon()}
        </a>
      </div>

      <div className="fc-client-tabs" role="tablist" aria-label="Choose an MCP client">
        {clients.map((client, index) => {
    const selected = activeId === client.id;
    return <button key={client.id} id={`fc-tab-${client.id}`} ref={element => {
      tabRefs.current[index] = element;
    }} type="button" role="tab" className={`fc-client-tab${selected ? " is-active" : ""}`} aria-selected={selected} aria-controls={`fc-panel-${client.id}`} tabIndex={selected ? 0 : -1} onClick={() => setActiveId(client.id)} onKeyDown={event => handleKeyDown(event, index)}>
              <span className={`fc-client-icon ${client.iconClassName}`} style={{
      backgroundImage: `url("${client.icon}")`
    }} aria-hidden="true" />
              <span className="fc-client-tab-copy">
                <strong>{client.name}</strong>
                <span>{client.detail}</span>
              </span>
            </button>;
  })}
      </div>

      <div className="fc-client-panels">
        {clients.map(client => {
    const selected = activeId === client.id;
    return <div key={client.id} id={`fc-panel-${client.id}`} role="tabpanel" aria-labelledby={`fc-tab-${client.id}`} hidden={!selected} className="fc-client-panel">
              <p className="fc-client-description">{client.description}</p>
              {client.installUrl && <a className="fc-install-button" href={client.installUrl}>
                  Add to Cursor {arrowIcon()}
                </a>}
              {client.command ? commandRow({
      id: `code-${client.id}`,
      command: client.command,
      label: "Command",
      prompt: true
    }) : codeBlock({
      client
    })}
              <p className="fc-client-hint">{client.hint}</p>
            </div>;
  })}
      </div>
      <div className="fc-agent-first-footer">
        <p className="fc-footer-lead">Using another MCP client? Point it at:</p>
        {commandRow({
    id: "endpoint-url",
    command: mcpUrl,
    label: "Endpoint URL"
  })}
      </div>
      <span className="fc-sr-only" aria-live="polite">
        {status}
      </span>
    </section>;
};

export const AgentSetupButton = () => {
  const prompt = "Read and follow https://www.firecrawl.dev/agent-onboarding/SKILL.md";
  const writeClipboard = async text => {
    try {
      await navigator.clipboard.writeText(text);
      return true;
    } catch {
      const textarea = document.createElement("textarea");
      textarea.value = text;
      textarea.setAttribute("readonly", "");
      textarea.style.position = "fixed";
      textarea.style.top = "-9999px";
      document.body.appendChild(textarea);
      textarea.select();
      let copied = false;
      try {
        copied = document.execCommand("copy");
      } catch {
        copied = false;
      }
      document.body.removeChild(textarea);
      return copied;
    }
  };
  const [copied, setCopied] = useState(false);
  const [status, setStatus] = useState("");
  const timeoutRef = useRef(null);
  useEffect(() => () => window.clearTimeout(timeoutRef.current), []);
  const copyPrompt = async () => {
    const copied = await writeClipboard(prompt);
    if (copied) {
      window.clearTimeout(timeoutRef.current);
      setCopied(true);
      setStatus("Agent setup prompt copied to clipboard.");
      timeoutRef.current = window.setTimeout(() => {
        setCopied(false);
        setStatus("");
      }, 2000);
    } else {
      setCopied(false);
      setStatus("Could not copy the agent setup prompt.");
    }
  };
  const icon = copied ? <svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
      <path d="m20 6-11 11-5-5" />
    </svg> : <svg aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
      <rect width="14" height="14" x="8" y="8" rx="2" />
      <path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
    </svg>;
  return <div className="fc-agent-prompt not-prose">
      <button type="button" className={`fc-agent-prompt-button${copied ? " is-copied" : ""}`} onClick={copyPrompt} aria-label={copied ? "Copied agent setup prompt" : "Setup for agents"}>
        {icon}
        <span>{copied ? "Copied" : "Setup for agents"}</span>
      </button>
      <span className="fc-sr-only" aria-live="polite">
        {status}
      </span>
    </div>;
};

<Note>
  **Pour les agents IA :** Utilisez [llms.txt](/fr/llms.txt) pour obtenir un index complet de toute la documentation.
</Note>

<div id="get-started">
  ## Pour commencer
</div>

<McpClientSelector />

<div id="install-the-firecrawl-cli">
  ### Installer le CLI Firecrawl
</div>

Une seule commande installe le CLI Firecrawl, vous authentifie dans votre Browser et ajoute des skills à chaque agent de codage détecté.

```bash theme={null}
npx -y firecrawl-cli@latest init --all --browser
```

<Note>
  Redémarrez votre agent de codage après la configuration afin qu’il puisse découvrir les nouveaux skills. Consultez
  [Skills + CLI](/fr/sdks/cli) pour la configuration complète.
</Note>

<div id="set-up-with-an-agent">
  ### Configurer avec un agent
</div>

Fournissez à votre agent ce prompt de configuration Firecrawl.

<AgentSetupButton />

<div id="build-and-test-directly">
  ### Créez et testez directement
</div>

<CardGroup cols={2}>
  <Card title="Obtenez votre clé d'API" icon="key" href="https://www.firecrawl.dev/app/api-keys">
    Créez un compte gratuit pour un accès direct à l'API et des limites plus élevées
  </Card>

  <Card title="Essayez-le dans le Playground" icon="play" href="https://www.firecrawl.dev/playground">
    Testez Firecrawl dans le navigateur sans écrire de code
  </Card>
</CardGroup>

***

<div id="what-can-firecrawl-do">
  ## Que peut faire Firecrawl ?
</div>

<CardGroup cols={3}>
  <Card title="Recherche" icon="magnifying-glass" href="#search">
    Rechercher sur le web et obtenir le contenu complet des pages à partir des résultats
  </Card>

  <Card title="Scrape" icon="file-lines" href="#scrape">
    Extraire le contenu de n’importe quelle URL en markdown, HTML ou JSON structuré
  </Card>

  <Card title="Interact" icon="hand-pointer" href="#interact">
    Continuer à travailler avec n’importe quelle page scrapée : cliquer, remplir des formulaires, extraire du contenu dynamique
  </Card>
</CardGroup>

<div id="why-firecrawl">
  ### Pourquoi Firecrawl ?
</div>

* **Sortie prête pour les LLM** : Markdown propre, JSON structuré, captures d’écran, et plus encore.
* **Gère les aspects complexes** : proxys, protections anti-bot, rendu JavaScript et contenu dynamique.
* **Fiable** : conçu pour la production, avec une haute disponibilité et des résultats constants.
* **Rapide** : des résultats en quelques secondes, optimisé pour un débit élevé.
* **MCP Server** : connectez Firecrawl à n’importe quel outil d’IA via le [Model Context Protocol](/fr/mcp-server).

***

<div id="search">
  ## Recherche
</div>

Effectuez une recherche sur le web et obtenez le contenu complet des pages à partir des résultats en un seul appel. Consultez la [documentation de la fonctionnalité de recherche](/fr/features/search) pour toutes les options.

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(
    # Aucune clé API requise pour démarrer — ajoutez-en une pour des limites de débit plus élevées :
    # api_key="fc-YOUR-API-KEY",
  )

  results = firecrawl.search(
      query="firecrawl",
      limit=3,
  )
  print(results)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({
    // Aucune clé API requise pour démarrer — ajoutez-en une pour des limites de débit plus élevées :
    // apiKey: "fc-YOUR-API-KEY",
  });

  const results = await firecrawl.search('firecrawl', {
    limit: 3,
    scrapeOptions: { formats: ['markdown'] }
  });
  console.log(results);
  ```

  ```bash cURL theme={null}
  # Aucune clé API requise pour démarrer — ajoutez -H "Authorization: Bearer $FIRECRAWL_API_KEY" pour des limites de débit plus élevées :
  curl -s -X POST "https://api.firecrawl.dev/v2/search" \
    -H "Content-Type: application/json" \
    -d '{
      "query": "firecrawl",
      "limit": 3
    }'
  ```

  ```bash CLI theme={null}
  # Rechercher sur le web
  firecrawl search "firecrawl web scraping" --limit 5 --pretty
  ```
</CodeGroup>

<Accordion title="Réponse">
  Les SDK renverront directement l’objet `data`. cURL renverra la charge utile complète.

  ```json JSON theme={null}
  {
    "success": true,
    "data": {
      "web": [
        {
          "url": "https://www.firecrawl.dev/",
          "title": "Firecrawl - L'API de données web pour l'IA",
          "description": "L'API d'exploration, de scraping et de recherche pour l'IA. Conçue pour passer à l'échelle. Firecrawl met l'ensemble du web à la portée des agents et développeurs d'IA.",
          "position": 1
        },
        {
          "url": "https://github.com/firecrawl/firecrawl",
          "title": "mendableai/firecrawl : Transformez des sites entiers en contenus prêts pour les LLM… - GitHub",
          "description": "Firecrawl est un service d'API qui prend une URL, l'explore et la convertit en Markdown propre ou en données structurées.",
          "position": 2
        },
        ...
      ],
      "images": [
        {
          "title": "Guide de démarrage rapide | Firecrawl",
          "imageUrl": "https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/logo/logo.png",
          "imageWidth": 5814,
          "imageHeight": 1200,
          "url": "https://docs.firecrawl.dev/",
          "position": 1
        },
        ...
      ],
      "news": [
        {
          "title": "La startup de Y Combinator Firecrawl est prête à payer 1 M$ pour embaucher trois agents IA comme employés",
          "url": "https://techcrunch.com/2025/05/17/y-combinator-startup-firecrawl-is-ready-to-pay-1m-to-hire-three-ai-agents-as-employees/",
          "snippet": "Elle a désormais publié trois nouvelles annonces sur le job board de YC pour « agents IA uniquement » et a réservé un budget total de 1 million de dollars pour y parvenir.",
          "date": "il y a 3 mois",
          "position": 1
        },
        ...
      ]
    }
  }
  ```
</Accordion>

<div id="scrape">
  ## Scrape
</div>

Extrayez n’importe quelle URL et obtenez son contenu en markdown, HTML ou d’autres formats. Consultez la [documentation de la fonctionnalité Scrape](/fr/features/scrape) pour toutes les options.

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(
    # Aucune clé API requise pour démarrer — ajoutez-en une pour des limites de débit plus élevées :
    # api_key="fc-YOUR-API-KEY",
  )

  # Extraire le contenu d'un site :
  doc = firecrawl.scrape("https://firecrawl.dev", formats=["markdown", "html"])
  print(doc)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const firecrawl = new Firecrawl({
    // Aucune clé API requise pour démarrer — ajoutez-en une pour des limites de débit plus élevées :
    // apiKey: "fc-YOUR-API-KEY",
  });

  // Récupérer le contenu d'un site :
  const doc = await firecrawl.scrape('https://firecrawl.dev', { formats: ['markdown', 'html'] });
  console.log(doc);
  ```

  ```bash cURL theme={null}
  # Aucune clé API requise pour démarrer — ajoutez -H "Authorization: Bearer $FIRECRAWL_API_KEY" pour des limites de débit plus élevées :
  curl -s -X POST "https://api.firecrawl.dev/v2/scrape" \
    -H "Content-Type: application/json" \
    -d '{
      "url": "https://firecrawl.dev",
      "formats": ["markdown", "html"]
    }'
  ```

  ```bash CLI theme={null}
  # Scrape a URL and get markdown
  firecrawl https://firecrawl.dev

  # Avec plusieurs formats (renvoie du JSON)
  firecrawl https://firecrawl.dev --format markdown,html,links --pretty
  ```
</CodeGroup>

<Accordion title="Réponse">
  Les SDK vont renvoyer directement l’objet data. cURL renverra la charge utile exactement comme indiqué ci-dessous.

  ```json theme={null}
  {
    "success": true,
    "data" : {
      "markdown": "Launch Week I est là ! [Découvrez notre sortie du Jour 2 🚀](https://www.firecrawl.dev/blog/launch-week-i-day-2-doubled-rate-limits)[💥 2 mois offerts...",
      "html": "<!DOCTYPE html><html lang=\"en\" class=\"light\" style=\"color-scheme: light;\"><body class=\"__variable_36bd41 __variable_d7dc5d font-inter ...",
      "metadata": {
        "title": "Accueil - Firecrawl",
        "description": "Firecrawl explore et convertit n'importe quel site web en markdown propre.",
        "language": "en",
        "keywords": "Firecrawl,Markdown,Données,Mendable,Langchain",
        "robots": "follow, index",
        "ogTitle": "Firecrawl",
        "ogDescription": "Transformez n'importe quel site web en données prêtes pour les LLM.",
        "ogUrl": "https://www.firecrawl.dev/",
        "ogImage": "https://www.firecrawl.dev/og.png?123",
        "ogLocaleAlternate": [],
        "ogSiteName": "Firecrawl",
        "sourceURL": "https://firecrawl.dev",
        "statusCode": 200,
        "contentType": "text/html"
      }
    }
  }
  ```
</Accordion>

<div id="interact">
  ## Interact
</div>

Scrapez une page, puis continuez à travailler avec elle : cliquez sur des boutons, remplissez des formulaires, extrayez du contenu dynamique ou naviguez plus en profondeur. Décrivez ce que vous voulez en anglais courant ou écrivez du code pour un contrôle total. Consultez la [documentation de la fonctionnalité Interact](/fr/features/interact) pour toutes les options.

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  app = Firecrawl(
    # Aucune clé API requise pour démarrer — ajoutez-en une pour des limites de débit plus élevées :
    # api_key="fc-YOUR-API-KEY",
  )

  # 1. Scraper la page d'accueil d'Amazon
  result = app.scrape("https://www.amazon.com", formats=["markdown"])
  scrape_id = result.metadata.scrape_id

  # 2. Interagir — rechercher un produit et obtenir son prix
  app.interact(scrape_id, prompt="Search for iPhone 16 Pro Max")
  response = app.interact(scrape_id, prompt="Click on the first result and tell me the price")
  print(response.output)

  # 3. Arrêter la session
  app.stop_interaction(scrape_id)
  ```

  ```js Node theme={null}
  import { Firecrawl } from 'firecrawl';

  const app = new Firecrawl({
    // Aucune clé API requise pour démarrer — ajoutez-en une pour des limites de débit plus élevées :
    // apiKey: 'fc-YOUR-API-KEY',
  });

  // 1. Scraper la page d'accueil d'Amazon
  const result = await app.scrape('https://www.amazon.com', { formats: ['markdown'] });
  const scrapeId = result.metadata?.scrapeId;

  // 2. Interagir — rechercher un produit et obtenir son prix
  await app.interact(scrapeId, { prompt: 'Search for iPhone 16 Pro Max' });
  const response = await app.interact(scrapeId, { prompt: 'Click on the first result and tell me the price' });
  console.log(response.output);

  // 3. Arrêter la session
  await app.stopInteraction(scrapeId);
  ```

  ```bash cURL theme={null}
  # 1. Scraper la page d'accueil d'Amazon
  # Aucune API key requise pour démarrer — ajoutez -H "Authorization: Bearer $FIRECRAWL_API_KEY" pour des limites de débit plus élevées :
  RESPONSE=$(curl -s -X POST "https://api.firecrawl.dev/v2/scrape" \
    -H "Content-Type: application/json" \
    -d '{"url": "https://www.amazon.com", "formats": ["markdown"]}')

  SCRAPE_ID=$(echo $RESPONSE | jq -r '.data.metadata.scrapeId')

  # 2. Interagir — rechercher un produit et obtenir son prix
  curl -s -X POST "https://api.firecrawl.dev/v2/scrape/$SCRAPE_ID/interact" \
    -H "Content-Type: application/json" \
    -d '{"prompt": "Search for iPhone 16 Pro Max"}'

  curl -s -X POST "https://api.firecrawl.dev/v2/scrape/$SCRAPE_ID/interact" \
    -H "Content-Type: application/json" \
    -d '{"prompt": "Click on the first result and tell me the price"}'

  # 3. Arrêter la session
  curl -s -X DELETE "https://api.firecrawl.dev/v2/scrape/$SCRAPE_ID/interact"
  ```

  ```bash CLI theme={null}
  # 1. Scrape la page d'accueil d'Amazon (l'ID de scrape est sauvegardé automatiquement)
  firecrawl scrape https://www.amazon.com

  # 2. Interagir — rechercher un produit et obtenir son prix
  firecrawl interact "Search for iPhone 16 Pro Max"
  firecrawl interact "Click on the first result and tell me the price"

  # 3. Arrêter la session
  firecrawl interact stop
  ```
</CodeGroup>

<Accordion title="Réponse">
  ```json Response theme={null}
  {
    "success": true,
    "cdpUrl": "wss://browser.firecrawl.dev/...",
    "liveViewUrl": "https://liveview.firecrawl.dev/...",
    "interactiveLiveViewUrl": "https://liveview.firecrawl.dev/...",
    "output": "The iPhone 16 Pro Max (256GB) is priced at $1,199.00.",
    "exitCode": 0,
    "killed": false
  }
  ```
</Accordion>

***

<div id="more-capabilities">
  ## Plus de fonctionnalités
</div>

<CardGroup cols={2}>
  <Card title="Agent" icon="robot" href="/fr/features/agent">
    Collecter automatiquement des données web grâce à l’IA
  </Card>

  <Card title="Interact" icon="hand-pointer" href="/fr/features/interact">
    Cliquer, remplir des formulaires, extraire du contenu dynamique
  </Card>

  <Card title="Webhooks" icon="webhook" href="/fr/webhooks">
    Envoi asynchrone d’événements
  </Card>

  <Card title="Browser Sandbox" icon="browser" href="/fr/features/browser">
    Gérer des sessions de navigateur pour des workflows interactifs
  </Card>

  <Card title="Map" icon="map" href="/fr/features/map">
    Découvrir toutes les URL d’un site web
  </Card>

  <Card title="Crawl" icon="spider-web" href="/fr/features/crawl">
    Collecter récursivement le contenu de sites entiers
  </Card>
</CardGroup>

***

<div id="resources">
  ## Ressources
</div>

<CardGroup cols={2}>
  <Card title="Référence de l’API" icon="code" href="/fr/api-reference/v2-introduction">
    Documentation complète de l’API avec des exemples interactifs
  </Card>

  <Card title="SDKs" icon="boxes-stacked" href="/fr/sdks/overview">
    SDKs Python, Node.js, CLI et communautaires
  </Card>

  <Card title="Open Source" icon="github" href="/fr/contributing/open-source-or-cloud">
    Hébergez Firecrawl vous-même ou contribuez au projet
  </Card>

  <Card title="Intégrations" icon="puzzle-piece" href="/fr/developer-guides/llm-sdks-and-frameworks/openai">
    LangChain, LlamaIndex, OpenAI et plus encore
  </Card>
</CardGroup>
