# agente

> Reúna dados em qualquer lugar da web.

import AgentPython from "/snippets/pt-BR/v2/agent/base/python.mdx";
import AgentJS from "/snippets/pt-BR/v2/agent/base/js.mdx";
import AgentCURL from "/snippets/pt-BR/v2/agent/base/curl.mdx";
import AgentOutput from "/snippets/pt-BR/v2/agent/base/output.mdx";
import AgentWithSchemaPython from "/snippets/pt-BR/v2/agent/with-schema/python.mdx";
import AgentWithSchemaJS from "/snippets/pt-BR/v2/agent/with-schema/js.mdx";
import AgentWithSchemaCURL from "/snippets/pt-BR/v2/agent/with-schema/curl.mdx";
import AgentWithSchemaOutput from "/snippets/pt-BR/v2/agent/with-schema/output.mdx";
import AgentWithURLsPython from "/snippets/pt-BR/v2/agent/with-urls/python.mdx";
import AgentWithURLsJS from "/snippets/pt-BR/v2/agent/with-urls/js.mdx";
import AgentWithURLsCURL from "/snippets/pt-BR/v2/agent/with-urls/curl.mdx";
import AgentStatusPython from "/snippets/pt-BR/v2/agent/status/python.mdx";
import AgentStatusJS from "/snippets/pt-BR/v2/agent/status/js.mdx";
import AgentStatusCURL from "/snippets/pt-BR/v2/agent/status/curl.mdx";
import AgentListPython from "/snippets/pt-BR/v2/agent/list/python.mdx";
import AgentListJS from "/snippets/pt-BR/v2/agent/list/js.mdx";
import AgentListCURL from "/snippets/pt-BR/v2/agent/list/curl.mdx";
import AgentStatusPending from "/snippets/pt-BR/v2/agent/status/pending.mdx";
import AgentStatusCompleted from "/snippets/pt-BR/v2/agent/status/completed.mdx";
import AgentWithModelPython from "/snippets/pt-BR/v2/agent/with-model/python.mdx";
import AgentWithModelJS from "/snippets/pt-BR/v2/agent/with-model/js.mdx";
import AgentWithModelCURL from "/snippets/pt-BR/v2/agent/with-model/curl.mdx";
import AgentTracePython from "/snippets/pt-BR/v2/agent/trace/python.mdx";
import AgentTraceJS from "/snippets/pt-BR/v2/agent/trace/js.mdx";
import AgentTraceCURL from "/snippets/pt-BR/v2/agent/trace/curl.mdx";
import AgentSnapshotPython from "/snippets/pt-BR/v2/agent/snapshot/python.mdx";
import AgentSnapshotJS from "/snippets/pt-BR/v2/agent/snapshot/js.mdx";
import AgentSnapshotCURL from "/snippets/pt-BR/v2/agent/snapshot/curl.mdx";
import AgentTracePollPython from "/snippets/pt-BR/v2/agent/trace/poll/python.mdx";
import AgentTracePollJS from "/snippets/pt-BR/v2/agent/trace/poll/js.mdx";
import AgentTracePollCURL from "/snippets/pt-BR/v2/agent/trace/poll/curl.mdx";
import AgentArtifactsPython from "/snippets/pt-BR/v2/agent/artifacts/python.mdx";
import AgentArtifactsJS from "/snippets/pt-BR/v2/agent/artifacts/js.mdx";
import AgentArtifactsCURL from "/snippets/pt-BR/v2/agent/artifacts/curl.mdx";
import PlaygroundCTA from "/snippets/pt-BR/shared/playground-cta-agent.mdx";
import ChooseDataExtractor from "/snippets/pt-BR/shared/choose-data-extractor/from-agent.mdx";
import AgentFeedbackCTA from "/snippets/pt-BR/agent-feedback-cta.mdx";

**Escolhendo a ferramenta certa.** agente é a escolha certa quando você **não sabe quais são as URLs** ou precisa de navegação autônoma pela web.

<ChooseDataExtractor />

Firecrawl `/agent` é uma API mágica que pesquisa, navega e coleta dados da mais ampla variedade de sites, encontrando dados em locais de difícil acesso e descobrindo dados de maneiras que nenhuma outra API consegue. Ele realiza em poucos minutos o que levaria muitas horas para um humano — coleta de dados de ponta a ponta, sem scripts ou trabalho manual.
Seja para obter um único dado ou conjuntos de dados completos em escala, o Firecrawl `/agent` trabalha para obter seus dados.

**Pense no `/agent` como uma pesquisa profunda por dados, onde quer que eles estejam!**

<Info>
  **Research Preview**: agente está em acesso antecipado. Espere algumas imperfeições. Ele ficará significativamente melhor com o tempo.
</Info>

<AgentFeedbackCTA src="docs-agent" />

agente aproveita tudo o que há de melhor no `/extract` e leva isso além:

* **Nenhuma URL necessária**: Basta descrever o que você precisa via parâmetro `prompt`. URLs são opcionais
* **Pesquisa aprofundada na web**: Pesquisa e navega autonomamente em profundidade em sites para encontrar seus dados
* **Confiável e preciso**: Funciona com uma grande variedade de consultas e casos de uso
* **Mais rápido**: Processa múltiplas fontes em paralelo para resultados mais rápidos

<PlaygroundCTA />

<div id="using-agent">
  ## Usando `/agent`
</div>

O único parâmetro obrigatório é `prompt`. Basta descrever quais dados deseja extrair. Para obter uma saída estruturada, forneça um schema JSON. Os SDKs oferecem suporte a Pydantic (Python) e Zod (Node) para definições de schema com segurança de tipos:

<CodeGroup>
  <AgentWithSchemaPython />

  <AgentWithSchemaJS />

  <AgentWithSchemaCURL />
</CodeGroup>

<div id="response">
  ### Resposta
</div>

<AgentWithSchemaOutput />

<div id="providing-urls-optional">
  ## Fornecendo URLs (Opcional)
</div>

Opcionalmente, você pode fornecer URLs para que o agente se concentre em páginas específicas:

<CodeGroup>
  <AgentWithURLsPython />

  <AgentWithURLsJS />

  <AgentWithURLsCURL />
</CodeGroup>

<div id="job-status-and-completion">
  ## Status e conclusão de jobs
</div>

Jobs de agente são executados de forma assíncrona. Ao enviar um job, você recebe um Job ID que pode usar para verificar o status:

* **Método padrão**: `agent()` aguarda e retorna os resultados finais
* **Iniciar e depois consultar**: use `start_agent` (Python) ou `startAgent` (Node) para obter um Job ID imediatamente e depois verificar o status com `get_agent_status` / `getAgentStatus`
* **Notificação em vez de consulta**: passe um `webhook` ao iniciar o job para receber [eventos do agente](/pt-BR/webhooks/events#agent-events) conforme a execução avança e é concluída

<Note>Os resultados do job ficam disponíveis via API por 24 horas após a conclusão. Após esse período, você ainda pode ver o histórico do seu agente e os resultados nos [logs de atividade](https://www.firecrawl.dev/app/logs).</Note>

<CodeGroup>
  <AgentStatusPython />

  <AgentStatusJS />

  <AgentStatusCURL />
</CodeGroup>

<div id="possible-states">
  ### Estados possíveis
</div>

| Status       | Descrição                                                                                                                              |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| `processing` | O agente ainda está trabalhando na sua requisição                                                                                      |
| `completed`  | Extração concluída com sucesso                                                                                                         |
| `failed`     | Ocorreu um erro durante a extração ou o job foi cancelado (jobs cancelados informam `failed` com uma mensagem de erro de cancelamento) |

<Note>
  **O cancelamento é cooperativo.** Quando você chama o endpoint de cancelamento, a solicitação é registrada imediatamente, mas qualquer etapa já em andamento (uma etapa de raciocínio do LLM, uma chamada de ferramenta ou uma ação no navegador) continua até um ponto de interrupção seguro antes de o job parar. Os créditos podem continuar sendo consumidos durante esse breve intervalo, então o `creditsUsed` final pode ser maior do que o valor informado no momento em que você clicou em cancelar. Um job cancelado informa o status `failed` quando consultado e emite um evento de webhook `agent.cancelled`.
</Note>

<div id="pending-example">
  #### Exemplo pendente
</div>

<AgentStatusPending />

<div id="completed-example">
  #### Exemplo concluído
</div>

<AgentStatusCompleted />

<div id="listing-agent-runs">
  ## Listando execuções de agentes
</div>

`GET /agent` lista todas as execuções de agentes da sua equipe, das mais recentes às mais antigas — incluindo as iniciadas no playground ou pela API. Cada entrada inclui o ID da execução, a hora de criação, o status, uma breve indicação do destino e as opções com que ela foi iniciada.

Os resultados são paginados em páginas fixas de 20 execuções. Quando houver mais páginas, a resposta incluirá uma URL `next`; use o timestamp `before` dela para buscar a próxima página. Os métodos do SDK não paginam automaticamente, para que você mantenha o controle de até onde voltar.

<CodeGroup>
  <AgentListPython />

  <AgentListJS />

  <AgentListCURL />
</CodeGroup>

<div id="following-a-run-in-progress">
  ## Acompanhando uma execução em andamento
</div>

O agente não mantém uma conexão de streaming aberta. Não há stream de eventos enviados pelo servidor nem websocket, então acompanhe uma execução consultando seu rastro ou recebendo webhooks.

| Superfície                 | O que você recebe                                                                                                                                                                                                           | Ideal para                                                                    |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| Consulta do rastro         | Detalhes completos: todos os eventos emitidos pela execução até o momento, incluindo chamadas de ferramenta, resumos de raciocínio, fases de progresso e mudanças nos artefatos                                             | Criar sua própria UI de progresso ou depurar o que uma execução realmente fez |
| Webhooks                   | Entrega por push, em nível mais amplo: os cinco eventos do ciclo de vida do agente (`agent.started`, `agent.action`, `agent.completed`, `agent.failed`, `agent.cancelled`). Consulte [eventos de webhook](/pt-BR/webhooks/events) | Reagir ao término de uma execução sem manter um loop de consulta aberto       |
| Visualização em tempo real | Uma visualização do navegador do agente que pode ser acompanhada por humanos. Solicite o rastro com `?liveView=true`, e cada entrada em `activeBrowserSessions` inclui uma `liveViewUrl`                                    | Acompanhar uma execução navegando em tempo real                               |

Ao ordenar eventos de rastro manualmente, primeiro agrupe-os por `agent.id`: `producerSequence` é monotônica para cada agente emissor, portanto uma única ordenação global intercala incorretamente os eventos de um orquestrador com os de seus subagentes. Os eventos também podem chegar por um breve período após o evento terminal `run.finished`; portanto, continue consultando durante uma curta janela adicional antes de renderizar o estado final.

<CodeGroup>
  <AgentTracePollPython />

  <AgentTracePollJS />

  <AgentTracePollCURL />
</CodeGroup>

<div id="execution-traces-and-snapshots">
  ## Rastros de execução e snapshots
</div>

Cada execução registra um rastro de execução canônico — uma sequência ordenada de eventos que abrange chamadas de ferramenta, resumos de raciocínio, atualizações de progresso, sessões de navegador e alterações nos artefatos de resultado. Use-o para depurar uma execução ou criar uma UI de progresso em tempo real:

<CodeGroup>
  <AgentTracePython />

  <AgentTraceJS />

  <AgentTraceCURL />
</CodeGroup>

Os eventos de rastro `artifact.updated` fazem referência ao resultado de trabalho do agente por meio de `snapshotId`. Obtenha o conteúdo completo de um snapshot usando o endpoint de snapshots:

<CodeGroup>
  <AgentSnapshotPython />

  <AgentSnapshotJS />

  <AgentSnapshotCURL />
</CodeGroup>

<Note>Rastros e snapshots são registrados em execuções do Spark 2, ou seja, em todas as novas execuções; jobs iniciados em modelos Spark 1 antes de serem descontinuados não os incluem. Consulte as referências da API de [rastro](/pt-BR/api-reference/endpoint/agent-trace) e [snapshot](/pt-BR/api-reference/endpoint/agent-snapshot) para conferir o esquema completo de eventos e o catálogo de [erros do agente](/pt-BR/api-reference/errors#agent) para as falhas retornadas por esses endpoints.</Note>

<div id="getting-the-agents-source-data">
  ## Obtendo os dados de origem do agente
</div>

Uma execução grava seus resultados parciais em artefatos à medida que avança, e você pode recuperá-los depois de obter o rastro da execução. Cada evento `artifact.updated` descreve uma alteração em um artefato: `artifact.kind` pode ser `json`, `markdown`, `html`, `screenshot` ou `text`; `artifact.path` indica onde a execução o salvou; e `artifact.snapshotId` é o identificador que você usa para obter seu conteúdo em `GET /agent/{jobId}/snapshots/{snapshotId}`. O endpoint de snapshots retorna esse conteúdo em um campo `snapshot` como uma string: para artefatos `json`, essa string é codificada em JSON e precisa ser decodificada, enquanto, para artefatos `markdown`, `html` e `text`, ela é o próprio conteúdo.

Para obter o conteúdo de página produzido por uma execução, busque o rastro, filtre os eventos `artifact.updated` pelo `kind` desejado e, em seguida, busque cada snapshot:

<CodeGroup>
  <AgentArtifactsPython />

  <AgentArtifactsJS />

  <AgentArtifactsCURL />
</CodeGroup>

Duas coisas importantes antes de usar isso como base:

* **Os artefatos são o resultado da execução, não um arquivo de cada página.** O que uma execução grava em um artefato depende de como ela processa seu prompt. Portanto, trate o conjunto de artefatos como o que aquela execução específica produziu, e não como um registro garantido de todas as páginas que ela abriu.
* **Os resultados das ferramentas contêm o restante.** Cada evento `tool_call.finished` inclui um campo `result` com o que a ferramenta retornou. É nele que aparece o conteúdo que nunca se tornou um artefato.

<div id="share-agent-runs">
  ## Compartilhar execuções de agentes
</div>

Você pode compartilhar execuções de agentes diretamente no Agent Playground. Os links compartilhados são públicos — qualquer pessoa com o link pode ver a saída e a atividade da execução — e você pode revogar o acesso a qualquer momento para desativar o link. As páginas compartilhadas não são indexadas por mecanismos de busca.

<div id="model-selection">
  ## Seleção de modelo
</div>

O Firecrawl Agent é executado no **Spark 2** — mais barato e mais rápido que os modelos Spark 1 anteriores, com precisão comparável. Ele é o modelo padrão: todas as execuções usam `spark-2`, independentemente de você definir o parâmetro `model`.

<Note>
  **Os modelos Spark 1 estão descontinuados.** Os nomes dos modelos Spark 1 continuam aceitos por compatibilidade retroativa, mas as solicitações que os utilizam são direcionadas para `spark-2`.
</Note>

<div id="spark-2">
  ### Spark 2
</div>

`spark-2` abrange toda a gama de tarefas que antes exigiam escolher entre Mini e Pro, eliminando a necessidade de abrir mão da precisão para reduzir custos.

**Destaques:**

* Menor custo por execução
* Tempo de execução mais rápido
* Precisão comparável ao antigo carro-chefe Spark 1
* O único modelo com um orçamento de raciocínio: passe `effort` (`low`, `medium` ou `high`) para controlar o quanto ele raciocina

<div id="specifying-a-model">
  ### Especificando um modelo
</div>

O parâmetro `model` é opcional — todas as solicitações usam `spark-2`:

<CodeGroup>
  <AgentWithModelPython />

  <AgentWithModelJS />

  <AgentWithModelCURL />
</CodeGroup>

<div id="parameters">
  ## Parâmetros
</div>

| Parâmetro               | Tipo    | Obrigatório | Descrição                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ----------------------- | ------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `prompt`                | string  | **Sim**     | Descrição em linguagem natural dos dados que você quer extrair (máx. 10.000 caracteres)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `model`                 | string  | Não         | O padrão é `spark-2`, modelo usado em todas as execuções. Os modelos Spark 1 estão descontinuados e são direcionados para `spark-2`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `effort`                | string  | Não         | Orçamento de raciocínio: `low`, `medium` ou `high`. Todas as execuções usam `spark-2`, portanto `effort` pode ser enviado com ou sem `model`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `urls`                  | array   | Não         | Lista opcional de URLs para direcionar a extração                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `schema`                | object  | Não         | schema JSON opcional para resultado estruturado                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `strictConstrainToURLs` | boolean | Não         | Se `true`, o agente visita apenas as URLs fornecidas no array `urls`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `webhook`               | object  | Não         | Webhook para receber eventos do ciclo de vida do agente (`agent.started`, `agent.action`, `agent.completed`, `agent.failed`, `agent.cancelled`). Consulte os [payloads de webhook](/pt-BR/api-reference/endpoint/webhook-agent-started)                                                                                                                                                                                                                                                                                                                                                                                                           |
| `maxCredits`            | number  | Não         | Número máximo de créditos a serem usados nesta tarefa de agente. O padrão é **2.500** se não for definido. O painel suporta valores de até **2.500**; para limites mais altos, defina `maxCredits` via API (valores acima de 2.500 são sempre tratados como requisições pagas). Se o limite for atingido, o job falha e **nenhum dado é retornado**. Execuções com falha não são cobradas: créditos usados para raciocínio de IA nunca são cobrados em caso de falha, quaisquer créditos usados para chamadas de ferramentas durante a execução (scraping, busca, mapeamento etc.) são reembolsados, e a resposta informa `creditsUsed: 0`. |

<div id="agent-vs-extract-whats-improved">
  ## Agent vs Extract: O que melhorou
</div>

| Recurso | Agent (Novo) | Extract |
|---------|-------------|---------|
| URLs obrigatórias | Não | Sim |
| Velocidade | Mais rápida | Padrão |
| Custo | Mais baixo | Padrão |
| Confiabilidade | Maior | Padrão |
| Flexibilidade das consultas | Alta | Moderada |

<div id="example-use-cases">
  ## Exemplos de Casos de Uso
</div>

* **Pesquisa**: &quot;Encontre as 5 principais startups de IA e seus valores de financiamento&quot;
* **Análise de concorrência**: &quot;Compare os planos de preços do Slack e do Microsoft Teams&quot;
* **Coleta de dados**: &quot;Extraia informações de contato de sites de empresas&quot;
* **Resumo de conteúdo**: &quot;Resuma as postagens de blog mais recentes sobre web scraping&quot;

<div id="csv-upload-in-agent-playground">
  ## Upload de CSV no Agent Playground
</div>

O [Agent Playground](https://www.firecrawl.dev/app/agent) oferece suporte a upload de CSV para processamento em lote. Seu CSV pode conter uma ou mais colunas de dados de entrada. Por exemplo, uma única coluna com nomes de empresas, ou múltiplas colunas como nome da empresa, produto e URL do site. Cada linha representa um item para o agente processar.

Envie seu arquivo CSV e, em seguida, adicione colunas de saída usando o botão &quot;+&quot; no cabeçalho da grade. Cada coluna tem seu próprio prompt — clique no cabeçalho de uma coluna para descrever o que o agente deve encontrar para esse campo (por exemplo, &quot;Nome do CEO ou fundador&quot;, &quot;Total captado em investimentos&quot;). Clique em Run, e o agente processa cada linha em paralelo, preenchendo os resultados.

<div id="troubleshooting-with-ask">
  ## Solução de problemas com Ask
</div>

Se os jobs do seu agente falharem ou retornarem resultados inesperados, use a [API Ask](/pt-BR/features/ask) para depuração de agentes. Descreva o problema e obtenha uma resposta verificada com parâmetros de correção que você pode aplicar diretamente:

```bash
curl -X POST https://api.firecrawl.dev/v2/support/ask \
  -H "Authorization: Bearer fc-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "my agent returned incomplete results"
  }'
```

Consulte a [documentação do Ask](/pt-BR/features/ask) para mais detalhes e exemplos de integração.

<div id="api-reference">
  ## Referência da API
</div>

Confira a [referência da Agent API](/pt-BR/api-reference/endpoint/agent) para mais detalhes.

Tem alguma sugestão ou precisa de ajuda? Envie um e-mail para [help@firecrawl.com](mailto:help@firecrawl.com).

<div id="pricing">
  ## Preços
</div>

O Firecrawl Agent usa **cobrança dinâmica**, que acompanha a complexidade da sua solicitação de extração de dados. Você paga com base no trabalho efetivamente realizado pelo Agent, garantindo preços justos tanto ao extrair dados simples quanto informações estruturadas complexas de múltiplas fontes.

<div id="how-agent-pricing-works">
  ### Como funciona o preço do Agent
</div>

Os preços do Agent são **dinâmicos e baseados em créditos** durante o Research Preview:

* **Extrações simples** (como informações de contato de uma única página) normalmente consomem menos créditos e custam menos
* **Tarefas de pesquisa complexas** (como análise de concorrência em vários domínios) consomem mais créditos, mas refletem o esforço total envolvido
* **Uso transparente** mostra exatamente quantos créditos cada requisição consumiu
* **Conversão de créditos** converte automaticamente o uso de créditos do Agent em créditos para facilitar a cobrança

<Info>
  O uso de créditos varia de acordo com a complexidade do seu prompt, a quantidade de dados processados e a estrutura do resultado solicitado. Como orientação geral, a maioria das execuções do Agent consome **algumas centenas de créditos**, embora tarefas simples em uma única página possam usar menos e pesquisas complexas em vários domínios possam usar mais.
</Info>

<div id="parallel-agents-pricing">
  ### Preços para Agentes em Paralelo
</div>

Se você estiver executando vários agentes em paralelo com o Spark-1 Fast, o custo se torna muito mais previsível: 10 créditos por célula.

<div id="getting-started">
  ### Começando
</div>

**Todos os usuários** recebem **5 execuções gratuitas por dia**, que podem ser usadas tanto no playground quanto na API, para explorar os recursos do Agent sem nenhum custo.

O uso adicional é cobrado com base no consumo de créditos e convertido em créditos.

<div id="managing-costs">
  ### Gerenciando custos
</div>

agente pode ser caro, mas há algumas maneiras de reduzir o custo:

* **Comece com execuções gratuitas**: Use suas 5 requisições gratuitas diárias para entender os preços
* **Defina o parâmetro `maxCredits`**: Limite seus gastos definindo um número máximo de créditos que você está disposto a usar. O painel limita isso a 2.500 créditos; para definir um limite maior, use o parâmetro `maxCredits` diretamente via API (observação: valores acima de 2.500 são sempre cobrados como requisições pagas)
* **Otimize os prompts**: Prompts mais específicos geralmente usam menos créditos
* **Divida tarefas grandes em execuções menores**: Uma única execução do agente retorna aproximadamente 150-200 linhas de dados estruturados. Para jobs grandes de extração, divida por categoria, região ou lote de URLs (3-5 URLs por execução) e mescle os resultados. Isso também mantém cada execução bem abaixo do limite de `maxCredits`.
* **Monitore o uso**: Acompanhe seu consumo pelo painel
* **Ajuste expectativas**: Pesquisas complexas em múltiplos domínios vão consumir mais créditos do que extrações simples de uma única página

Teste o agente agora em [firecrawl.dev/app/agent](https://www.firecrawl.dev/app/agent) para ver como o uso de créditos escala com seus casos de uso específicos.

<Note>
  Os preços estão sujeitos a alteração à medida que avançamos de Research Preview para disponibilidade geral. Usuários atuais receberão aviso antecipado sobre quaisquer atualizações de preços.
</Note>

> Você é um agente de IA que precisa de uma API key da Firecrawl? Veja [firecrawl.dev/agent-onboarding/SKILL.md](https://www.firecrawl.dev/agent-onboarding/SKILL.md) para instruções de onboarding automatizado.
