{
  "components": {
    "schemas": {
      "BaseScrapeOptions": {
        "properties": {
          "actions": {
            "description": "Ações a serem realizadas na página antes de extrair o conteúdo",
            "items": {
              "oneOf": [
                {
                  "properties": {
                    "milliseconds": {
                      "description": "Número de milissegundos a esperar",
                      "minimum": 1,
                      "type": "integer"
                    },
                    "selector": {
                      "description": "Seletor de consulta (query selector) para localizar o elemento por",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Aguardar por uma quantidade especificada de milissegundos",
                      "enum": [
                        "wait"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Wait",
                  "type": "object"
                },
                {
                  "properties": {
                    "fullPage": {
                      "default": false,
                      "description": "Define se a captura de tela deve ser da página inteira ou apenas da área visível atual (viewport).",
                      "type": "boolean"
                    },
                    "quality": {
                      "description": "A qualidade da captura de tela, de 1 a 100. 100 é a qualidade máxima.",
                      "type": "integer"
                    },
                    "type": {
                      "description": "Tire uma captura de tela. Os links estarão no array `actions.screenshots` da resposta.",
                      "enum": [
                        "screenshot"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Screenshot",
                  "type": "object"
                },
                {
                  "properties": {
                    "all": {
                      "default": false,
                      "description": "Clica em todos os elementos que correspondem ao seletor, não apenas no primeiro. Não gera erro caso nenhum elemento corresponda ao seletor.",
                      "type": "boolean"
                    },
                    "selector": {
                      "description": "Seletor para localizar o elemento por",
                      "example": "#load-more-button",
                      "type": "string"
                    },
                    "type": {
                      "description": "Clique em um elemento",
                      "enum": [
                        "click"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "selector"
                  ],
                  "title": "Click",
                  "type": "object"
                },
                {
                  "properties": {
                    "text": {
                      "description": "Texto para digitar",
                      "example": "Hello, world!",
                      "type": "string"
                    },
                    "type": {
                      "description": "Digite um texto em um campo de entrada, área de texto ou elemento com contenteditable. Observação: primeiro é necessário focar o elemento usando uma ação de “click” antes de escrever. O texto será digitado caractere por caractere para simular a entrada via teclado.",
                      "enum": [
                        "write"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "text"
                  ],
                  "title": "Write text",
                  "type": "object"
                },
                {
                  "description": "Pressione uma tecla na página. Consulte https://asawicki.info/nosense/doc/devices/keyboard/key_codes.html para ver os códigos de teclas.",
                  "properties": {
                    "key": {
                      "description": "Tecla a ser pressionada",
                      "example": "Enter",
                      "type": "string"
                    },
                    "type": {
                      "description": "Pressione uma tecla nesta página",
                      "enum": [
                        "press"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "key"
                  ],
                  "title": "Press a key",
                  "type": "object"
                },
                {
                  "properties": {
                    "direction": {
                      "default": "down",
                      "description": "Direção da rolagem",
                      "enum": [
                        "up",
                        "down"
                      ],
                      "type": "string"
                    },
                    "selector": {
                      "description": "Seletor de consulta para o elemento a ser rolado",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Rolar a página ou um elemento específico",
                      "enum": [
                        "scroll"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Scroll",
                  "type": "object"
                },
                {
                  "properties": {
                    "type": {
                      "description": "Extrai o conteúdo da página atual e retorna a URL e o HTML.",
                      "enum": [
                        "scrape"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Scrape",
                  "type": "object"
                },
                {
                  "properties": {
                    "script": {
                      "description": "Código JavaScript a ser executado",
                      "example": "document.querySelector('.button').click();",
                      "type": "string"
                    },
                    "type": {
                      "description": "Executar código JavaScript na página",
                      "enum": [
                        "executeJavascript"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "script"
                  ],
                  "title": "Execute JavaScript",
                  "type": "object"
                },
                {
                  "properties": {
                    "format": {
                      "default": "Letter",
                      "description": "O tamanho da página do PDF gerado",
                      "enum": [
                        "A0",
                        "A1",
                        "A2",
                        "A3",
                        "A4",
                        "A5",
                        "A6",
                        "Letter",
                        "Legal",
                        "Tabloid",
                        "Ledger"
                      ],
                      "type": "string"
                    },
                    "landscape": {
                      "default": false,
                      "description": "Se o PDF deve ser gerado em orientação horizontal",
                      "type": "boolean"
                    },
                    "scale": {
                      "default": 1,
                      "description": "O fator de escala do PDF resultante",
                      "type": "number"
                    },
                    "type": {
                      "description": "Gere um PDF da página atual. O PDF será retornado no array `actions.pdfs` da resposta.",
                      "enum": [
                        "pdf"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Generate PDF",
                  "type": "object"
                }
              ]
            },
            "type": "array"
          },
          "blockAds": {
            "default": true,
            "description": "Habilita o bloqueio de anúncios e de pop-ups de cookies.",
            "type": "boolean"
          },
          "excludeTags": {
            "description": "Tags a serem excluídas da saída.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "headers": {
            "description": "Cabeçalhos a serem enviados com a requisição. Podem ser usados para enviar cookies, user-agent etc.",
            "type": "object"
          },
          "includeTags": {
            "description": "Tags para incluir na saída.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "jsonOptions": {
            "description": "Objeto JSON de opções",
            "properties": {
              "checkPromptInjection": {
                "default": false,
                "description": "Quando ativado, verifica se há tentativas de injeção de prompt no conteúdo extraído da página antes de executar a extração. Se uma injeção for detectada, a solicitação falhará com o status 403 e o código de erro SCRAPE_PROMPT_INJECTION_DETECTED. Adiciona 4 créditos quando a verificação é executada. O padrão é false.",
                "type": "boolean"
              },
              "prompt": {
                "description": "O prompt a ser usado para extração sem esquema (opcional)",
                "type": "string"
              },
              "schema": {
                "description": "O schema a ser usado para extração (opcional). Deve estar em conformidade com o [JSON Schema](https://json-schema.org/).",
                "type": "object"
              },
              "systemPrompt": {
                "description": "O prompt do sistema a ser usado na extração (opcional)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "location": {
            "description": "Configurações de localização para a requisição. Quando especificadas, será usado um proxy apropriado, se disponível, e serão emuladas as configurações correspondentes de idioma e fuso horário. O padrão é \"US\" se não for especificado.",
            "properties": {
              "country": {
                "default": "US",
                "description": "Código de país ISO 3166-1 alfa-2 (por exemplo, “US”, “AU”, “DE”, “JP”)",
                "pattern": "^[A-Z]{2}$",
                "type": "string"
              },
              "languages": {
                "description": "Idiomas e localidades preferenciais para a requisição, em ordem de prioridade. Por padrão, usa o idioma do local especificado. Consulte 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": "Retorna uma versão em cache da página se ela tiver menos que essa idade, em milissegundos. Se a versão em cache da página for mais antiga que esse valor, a página será raspada novamente. Se você não precisar de dados extremamente atualizados, ativar essa opção pode acelerar suas raspagens em até 500%. O padrão é 0, o que desativa o cache.",
            "type": "integer"
          },
          "mobile": {
            "default": false,
            "description": "Defina como true para emular a raspagem de dados a partir de um dispositivo móvel. Útil para testar páginas responsivas e gerar capturas de tela da versão mobile.",
            "type": "boolean"
          },
          "onlyMainContent": {
            "default": true,
            "description": "Retorne apenas o conteúdo principal da página, excluindo cabeçalhos, áreas de navegação, rodapés etc.",
            "type": "boolean"
          },
          "parsePDF": {
            "default": true,
            "description": "Controla como os arquivos PDF são processados durante o scraping. Quando definido como true, o conteúdo do PDF é extraído e convertido para o formato Markdown, com cobrança baseada no número de páginas (1 crédito por página). Quando definido como false, o arquivo PDF é retornado codificado em base64, com uma tarifa fixa de 1 crédito no total.",
            "type": "boolean"
          },
          "proxy": {
            "description": "Especifica o tipo de proxy a ser usado.\n\n - **basic**: Proxies para scraping de sites sem ou com soluções anti-bot básicas. Rápido e geralmente funciona.\n - **enhanced**: Proxies avançados para scraping de sites com soluções anti-bot mais sofisticadas. Mais lento, mas mais confiável em certos sites. Cobrado pelo mesmo custo em créditos que basic.\n - **auto**: O Firecrawl tentará automaticamente fazer o scraping novamente com proxies enhanced se o proxy basic falhar. Proxies enhanced não têm custo adicional em créditos, portanto, de qualquer forma, apenas o custo normal será cobrado.\n\nSe você não especificar um proxy, o Firecrawl usará basic por padrão.",
            "enum": [
              "basic",
              "enhanced",
              "auto"
            ],
            "type": "string"
          },
          "removeBase64Images": {
            "default": true,
            "description": "Remove todas as imagens em base64 da saída, que podem ser excessivamente longas. O texto alternativo (alt) da imagem permanece na saída, mas a URL é substituída por um espaço reservado.",
            "type": "boolean"
          },
          "skipTlsVerification": {
            "default": false,
            "description": "Ignorar a verificação do certificado TLS ao fazer requisições",
            "type": "boolean"
          },
          "storeInCache": {
            "default": true,
            "description": "Se definido como true, a página será armazenada no índice e no cache do Firecrawl. Definir isso como false é útil se sua atividade de scraping puder levantar preocupações relacionadas à proteção de dados. O uso de alguns parâmetros associados a scraping sensível (ações, headers) fará com que esse parâmetro seja definido como false.",
            "type": "boolean"
          },
          "threatProtection": {
            "$ref": "#/components/schemas/ThreatProtectionOverride"
          },
          "timeout": {
            "default": 30000,
            "description": "Tempo limite da requisição em milissegundos",
            "type": "integer"
          },
          "waitFor": {
            "default": 0,
            "description": "Defina um atraso, em milissegundos, antes de buscar o conteúdo, permitindo que a página tenha tempo suficiente para carregar.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "BatchScrapeResponseObj": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Se ignoreInvalidURLs for true, este será um array contendo as URLs inválidas especificadas na requisição. Se não houver URLs inválidas, será um array vazio. Se ignoreInvalidURLs for false, este campo ficará como undefined.",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "success": {
            "type": "boolean"
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "BatchScrapeStatusResponseObj": {
        "properties": {
          "completed": {
            "description": "O número de páginas extraídas com sucesso.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "Quantidade de créditos utilizados na raspagem em lote.",
            "type": "integer"
          },
          "data": {
            "description": "Dados da raspagem em lote.",
            "items": {
              "properties": {
                "html": {
                  "description": "Versão em HTML do conteúdo da página quando `includeHtml` for true",
                  "nullable": true,
                  "type": "string"
                },
                "links": {
                  "description": "Lista de links na página quando `includeLinks` for true",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "markdown": {
                  "type": "string"
                },
                "metadata": {
                  "properties": {
                    "<any other metadata> ": {
                      "description": "Outros metadados extraídos do HTML; podem ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "description": {
                      "description": "Descrição extraída da página, que pode ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "error": {
                      "description": "Mensagem de erro da página",
                      "nullable": true,
                      "type": "string"
                    },
                    "keywords": {
                      "description": "Palavras-chave extraídas da página, podendo ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "language": {
                      "description": "Idioma extraído da página; pode ser uma string ou um array de strings",
                      "nullable": true,
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "numPages": {
                      "description": "Para entradas em PDF, o número de páginas analisadas (limitado pela opção maxPages do parser).",
                      "type": "integer"
                    },
                    "ogLocaleAlternate": {
                      "description": "Idiomas alternativos da página",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "sourceURL": {
                      "format": "uri",
                      "type": "string"
                    },
                    "statusCode": {
                      "description": "Código de status da página",
                      "type": "integer"
                    },
                    "title": {
                      "description": "Título extraído da página; pode ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "totalPages": {
                      "description": "Para entradas em PDF, a contagem real de páginas do documento antes de qualquer limite imposto por maxPages. Omitido quando não for possível determiná-la; um totalPages maior que numPages indica que o resultado foi truncado.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                },
                "rawHtml": {
                  "description": "Conteúdo HTML bruto da página, se `includeRawHtml` for true",
                  "nullable": true,
                  "type": "string"
                },
                "screenshot": {
                  "description": "Captura de tela da página se `includeScreenshot` estiver definido como true",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "Data e hora em que o scraping em lote irá expirar.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "A URL para recuperar os próximos 10 MB de dados. É retornada se a raspagem em lote não estiver concluída ou se a resposta for maior que 10 MB.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "O status atual da raspagem em lote. Pode ser `scraping`, `completed` ou `failed`.",
            "type": "string"
          },
          "total": {
            "description": "O número total de páginas em que se tentou fazer scraping.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "CrawlErrorsResponseObj": {
        "properties": {
          "errors": {
            "description": "Jobs de scraping com falha e detalhes do erro",
            "items": {
              "properties": {
                "error": {
                  "description": "Mensagem de erro",
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "timestamp": {
                  "description": "Carimbo de data/hora ISO da falha",
                  "nullable": true,
                  "type": "string"
                },
                "url": {
                  "description": "URL rastreada",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "robotsBlocked": {
            "description": "Lista de URLs em que a raspagem foi tentada, mas que foram bloqueadas pelo 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": "Número de páginas rastreadas com sucesso.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "Número de créditos utilizados no rastreamento.",
            "type": "integer"
          },
          "data": {
            "description": "Dados do rastreamento.",
            "items": {
              "properties": {
                "html": {
                  "description": "Versão em HTML do conteúdo da página, quando `includeHtml` for true",
                  "nullable": true,
                  "type": "string"
                },
                "links": {
                  "description": "Lista de links na página se `includeLinks` for verdadeiro",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "markdown": {
                  "type": "string"
                },
                "metadata": {
                  "properties": {
                    "<any other metadata> ": {
                      "description": "Outros metadados extraídos do HTML podem ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "description": {
                      "description": "Descrição extraída da página, pode ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "error": {
                      "description": "A mensagem de erro da página",
                      "nullable": true,
                      "type": "string"
                    },
                    "keywords": {
                      "description": "Palavras-chave extraídas da página; pode ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "language": {
                      "description": "Idioma extraído da página; pode ser uma string ou um array de strings",
                      "nullable": true,
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "numPages": {
                      "description": "Para entradas em PDF, o número de páginas analisadas (limitado pela opção maxPages do parser).",
                      "type": "integer"
                    },
                    "ogLocaleAlternate": {
                      "description": "Configurações de localidade alternativas para a página",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "sourceURL": {
                      "format": "uri",
                      "type": "string"
                    },
                    "statusCode": {
                      "description": "O código de status da página",
                      "type": "integer"
                    },
                    "title": {
                      "description": "Título extraído da página, que pode ser uma string ou um array de strings",
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      ]
                    },
                    "totalPages": {
                      "description": "Para entradas em PDF, a contagem real de páginas do documento antes de qualquer limite imposto por maxPages. Omitido quando não for possível determiná-la; um totalPages maior que numPages indica que o resultado foi truncado.",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                },
                "rawHtml": {
                  "description": "Conteúdo HTML bruto da página, caso `includeRawHtml` seja true",
                  "nullable": true,
                  "type": "string"
                },
                "screenshot": {
                  "description": "Captura de tela da página se `includeScreenshot` for verdadeiro",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "Data e hora em que o rastreamento expira.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "A URL para recuperar os próximos 10 MB de dados. Retornada se o crawl não tiver sido concluído ou se a resposta for maior que 10 MB.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "O status atual do rastreamento. Pode ser `scraping`, `completed` ou `failed`.",
            "type": "string"
          },
          "total": {
            "description": "O número total de páginas em que o rastreamento foi tentado.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ExtractResponse": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Se ignoreInvalidURLs for true, este será um array contendo as URLs inválidas especificadas na requisição. Se não houver URLs inválidas, será um array vazio. Se ignoreInvalidURLs for false, este campo ficará 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": "Status atual do processo de extração",
            "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": "Opções de rastreamento de alterações (Beta). Aplicável somente quando 'changeTracking' estiver incluído em formats. O formato 'markdown' também deve ser especificado ao usar o rastreamento de alterações.",
                "properties": {
                  "modes": {
                    "description": "O modo a ser usado para rastreamento de alterações. 'git-diff' fornece um diff detalhado e 'json' compara os dados JSON extraídos.",
                    "items": {
                      "enum": [
                        "git-diff",
                        "json"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "prompt": {
                    "description": "Prompt a ser usado para rastrear alterações ao usar o modo \"json\". Se não for especificado, será usado o prompt padrão.",
                    "type": "string"
                  },
                  "schema": {
                    "description": "Esquema JSON para extração ao usar o modo `json`. Define a estrutura dos dados que serão extraídos e comparados. Deve estar em conformidade com o [JSON Schema](https://json-schema.org/).",
                    "type": "object"
                  },
                  "tag": {
                    "default": null,
                    "description": "Tag a ser usada no rastreamento de alterações. As tags podem separar o histórico de rastreamento em “ramificações” distintas, em que o rastreamento com uma tag específica só será comparado a scrapes feitos com a mesma tag. Se não for fornecida, a tag padrão (null) será usada.",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "formats": {
                "default": [
                  "markdown"
                ],
                "description": "Formatos a serem incluídos no resultado.",
                "items": {
                  "enum": [
                    "markdown",
                    "html",
                    "rawHtml",
                    "links",
                    "screenshot",
                    "screenshot@fullPage",
                    "json",
                    "changeTracking"
                  ],
                  "type": "string"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ]
      },
      "ScrapeResponse": {
        "properties": {
          "data": {
            "properties": {
              "actions": {
                "description": "Resultados das ações especificadas no parâmetro `actions`. Somente presente se o parâmetro `actions` tiver sido fornecido na requisição",
                "nullable": true,
                "properties": {
                  "javascriptReturns": {
                    "description": "Valores retornados em JavaScript, na mesma ordem das ações executeJavascript fornecidas.",
                    "items": {
                      "properties": {
                        "type": {
                          "type": "string"
                        },
                        "value": {}
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "pdfs": {
                    "description": "PDFs gerados, na mesma ordem das ações de PDF especificadas.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "scrapes": {
                    "description": "Raspe o conteúdo na mesma ordem das ações de raspagem fornecidas.",
                    "items": {
                      "properties": {
                        "html": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "screenshots": {
                    "description": "URLs das capturas de tela, na mesma ordem das ações de captura de tela fornecidas. As capturas de tela expiram após 24 horas e não poderão mais ser baixadas.",
                    "items": {
                      "format": "url",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "changeTracking": {
                "description": "Informações de rastreamento de alterações se `changeTracking` estiver em `formats`. Só estará presente quando o formato `changeTracking` for solicitado.",
                "nullable": true,
                "properties": {
                  "changeStatus": {
                    "description": "O resultado da comparação entre as duas versões da página. 'new' significa que esta página não existia antes, 'same' significa que o conteúdo não mudou, 'changed' significa que o conteúdo foi alterado e 'removed' significa que a página foi removida.",
                    "enum": [
                      "new",
                      "same",
                      "changed",
                      "removed"
                    ],
                    "type": "string"
                  },
                  "diff": {
                    "description": "Diff no estilo Git das alterações ao usar o modo 'git-diff'. Só é exibido quando o modo está definido como 'git-diff'.",
                    "nullable": true,
                    "type": "string"
                  },
                  "json": {
                    "description": "Resultados da comparação em JSON ao usar o modo `json`. Somente estará presente quando o modo estiver definido como `json`. Irá gerar uma lista de todas as chaves e seus valores das raspagens `previous` e `current`, com base no tipo definido no `schema`. Exemplo [aqui](/features/change-tracking)",
                    "nullable": true,
                    "type": "object"
                  },
                  "previousScrapeAt": {
                    "description": "O carimbo de data e hora da raspagem anterior com a qual a página atual está sendo comparada. Nulo se não existir raspagem anterior.",
                    "format": "date-time",
                    "nullable": true,
                    "type": "string"
                  },
                  "visibility": {
                    "description": "A visibilidade da página/URL atual. “visible” significa que a URL foi descoberta por meio de uma rota orgânica (links ou sitemap); “hidden” significa que a URL foi descoberta a partir da memória de rastreios anteriores.",
                    "enum": [
                      "visible",
                      "hidden"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "html": {
                "description": "HTML limpo da página se `html` estiver incluído em `formats`. Remove as tags `<script>`, `<style>`, `<noscript>`, `<meta>` e `<head>`; converte URLs relativas em absolutas; resolve o `srcset` de imagens responsivas para a sua maior versão. Respeita os filtros `onlyMainContent`, `includeTags` e `excludeTags`.",
                "nullable": true,
                "type": "string"
              },
              "links": {
                "description": "Lista de links da página se `links` estiver incluído em `formats`",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "llm_extraction": {
                "description": "Exibido ao usar extração com LLM. Dados extraídos da página de acordo com o esquema definido.",
                "nullable": true,
                "type": "object"
              },
              "markdown": {
                "type": "string"
              },
              "metadata": {
                "properties": {
                  "<any other metadata> ": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "error": {
                    "description": "Mensagem de erro da página",
                    "nullable": true,
                    "type": "string"
                  },
                  "keywords": {
                    "description": "Palavras-chave extraídas da página; podem ser uma string única ou um array de strings",
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      }
                    ]
                  },
                  "language": {
                    "nullable": true,
                    "type": "string"
                  },
                  "numPages": {
                    "description": "Para entradas em PDF, o número de páginas analisadas (limitado pela opção maxPages do parser).",
                    "type": "integer"
                  },
                  "ogLocaleAlternate": {
                    "description": "Idiomas alternativos da página",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "sourceURL": {
                    "format": "uri",
                    "type": "string"
                  },
                  "statusCode": {
                    "description": "O código de status da página",
                    "type": "integer"
                  },
                  "title": {
                    "type": "string"
                  },
                  "totalPages": {
                    "description": "Para entradas em PDF, a contagem real de páginas do documento antes de qualquer limite imposto por maxPages. Omitido quando não for possível determiná-la; um totalPages maior que numPages indica que o resultado foi truncado.",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "rawHtml": {
                "description": "O HTML exato, inalterado, recebido da página quando `rawHtml` está em `formats`. Nenhuma limpeza ou filtragem é aplicada.",
                "nullable": true,
                "type": "string"
              },
              "screenshot": {
                "description": "Captura de tela da página se `screenshot` estiver incluído em `formats`. As capturas de tela expiram após 24 horas e depois disso não podem mais ser baixadas.",
                "nullable": true,
                "type": "string"
              },
              "warning": {
                "description": "Pode ser exibido ao usar a Extração com LLM. A mensagem de aviso informará sobre quaisquer problemas com a extração.",
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ThreatProtectionOverride": {
        "description": "Substituição por solicitação da [Proteção contra ameaças](https://docs.firecrawl.dev/features/threat-protection). Os campos fornecidos substituem os campos correspondentes da política da sua organização somente para esta solicitação; os campos omitidos mantêm os valores definidos no nível da organização. Exige que a Proteção contra ameaças esteja ativada para sua equipe (recurso enterprise) — caso contrário, a solicitação será rejeitada com 403. Se sua organização tiver desativado as substituições por solicitação, qualquer solicitação que inclua este objeto será rejeitada com 403. Se a Proteção contra ameaças for obrigatória para sua equipe, `mode` não poderá ser definido como `off`.",
        "properties": {
          "blacklist": {
            "description": "Domínios a serem sempre bloqueados, como domínios simples (`example.com`) ou padrões curinga (`*.example.com`). Sem protocolo, caminho ou porta.",
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "type": "array"
          },
          "blockedTlds": {
            "description": "Domínios de nível superior a serem bloqueados diretamente, em minúsculas e sem o ponto inicial (ex.: `zip`).",
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "type": "array"
          },
          "failurePolicy": {
            "description": "O que fazer quando o classificador não puder ser acessado: `closed` bloqueia a solicitação, `open` a permite.",
            "enum": [
              "open",
              "closed"
            ],
            "type": "string"
          },
          "mode": {
            "description": "Modo de varredura de URL para esta solicitação. `normal` verifica as URLs no Google Web Risk (+2 créditos por URL verificada).",
            "enum": [
              "off",
              "normal"
            ],
            "type": "string"
          },
          "riskScoreThreshold": {
            "description": "Pontuação de risco normalizada (0–100) a partir da qual um veredito do classificador bloqueia a URL. Quanto menor, mais rigoroso.",
            "example": 75,
            "maximum": 100,
            "minimum": 0,
            "type": "integer"
          },
          "whitelist": {
            "description": "Domínios a serem sempre permitidos, como domínios simples ou padrões curinga. Tem precedência sobre todas as outras regras.",
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "type": "array"
          }
        },
        "title": "Threat Protection Override",
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "contact": {
      "email": "support@firecrawl.dev",
      "name": "Firecrawl Support",
      "url": "https://firecrawl.dev/support"
    },
    "description": "API para interagir com os serviços da Firecrawl e realizar tarefas de web scraping e crawling.",
    "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": "Se URLs inválidas forem especificadas no array urls, elas serão ignoradas. Em vez de fazer com que toda a requisição falhe, será criada uma raspagem em lote usando apenas as URLs válidas restantes, e as URLs inválidas serão retornadas no campo invalidURLs da resposta.",
                        "type": "boolean"
                      },
                      "maxConcurrency": {
                        "description": "Número máximo de raspagens concorrentes. Este parâmetro permite definir um limite de concorrência para esta raspagem em lote. Se não for especificado, a raspagem em lote seguirá o limite de concorrência da sua equipe.",
                        "type": "integer"
                      },
                      "urls": {
                        "items": {
                          "description": "A URL a ser coletada",
                          "format": "uri",
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "webhook": {
                        "description": "Um objeto de especificação de webhook.",
                        "properties": {
                          "events": {
                            "description": "Tipo de eventos a serem enviados para a URL do webhook. (padrão: todos)",
                            "items": {
                              "enum": [
                                "completed",
                                "page",
                                "failed",
                                "started"
                              ],
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "headers": {
                            "additionalProperties": {
                              "type": "string"
                            },
                            "description": "Cabeçalhos que serão enviados para a URL do webhook.",
                            "type": "object"
                          },
                          "metadata": {
                            "additionalProperties": true,
                            "description": "Metadados personalizados que serão incluídos em todos os payloads de webhook deste rastreamento",
                            "type": "object"
                          },
                          "url": {
                            "description": "A URL para onde o webhook será enviado. Ele será acionado quando a raspagem em lote for iniciada (batch_scrape.started), para cada página raspada (batch_scrape.page) e quando a raspagem em lote for concluída (batch_scrape.completed ou batch_scrape.failed). A resposta será a mesma do endpoint `/scrape`.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "urls"
                    ],
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  {
                    "properties": {
                      "zeroDataRetention": {
                        "default": false,
                        "description": "Se definido como true, isso ativará a não retenção de dados para esta raspagem em lote. Para ativar esse recurso, entre em contato com help@firecrawl.dev",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchScrapeResponseObj"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento obrigatório"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas requisições"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Raspe várias URLs e, opcionalmente, extraia informações usando um LLM",
        "tags": [
          "Scraping"
        ]
      }
    },
    "/batch/scrape/{id}": {
      "delete": {
        "operationId": "cancelBatchScrape",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "enum": [
                        "cancelled"
                      ],
                      "example": "cancelled",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Cancelamento concluído com sucesso"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Batch scrape job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Job de raspagem em lote não encontrado"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro no servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Cancelar uma tarefa de raspagem em lote",
        "tags": [
          "Scraping"
        ]
      },
      "get": {
        "operationId": "getBatchScrapeStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchScrapeStatusResponseObj"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento necessário"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas solicitações"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenha o status de uma tarefa de raspagem em lote",
        "tags": [
          "Scraping"
        ]
      },
      "parameters": [
        {
          "description": "O ID da tarefa de raspagem em lote",
          "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": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento necessário"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas solicitações"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro no servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obter erros de um job de raspagem em lote",
        "tags": [
          "Scraping"
        ]
      },
      "parameters": [
        {
          "description": "O ID da tarefa de raspagem em lote",
          "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": "⚠️ DESCONTINUADO: Use \"crawlEntireDomain\" em vez disso. Permite que o crawler siga links internos para URLs irmãs ou URL de nível superior, não apenas caminhos filhos.",
                    "type": "boolean"
                  },
                  "allowExternalLinks": {
                    "default": false,
                    "description": "Permite que o rastreador siga links para sites externos.",
                    "type": "boolean"
                  },
                  "allowSubdomains": {
                    "default": false,
                    "description": "Permite que o crawler rastreie links que apontam para subdomínios do domínio principal.",
                    "type": "boolean"
                  },
                  "crawlEntireDomain": {
                    "default": false,
                    "description": "Permite que o rastreador siga links internos para URLs no mesmo nível (irmãs) ou URLs pai, não apenas caminhos filhos.\n\nfalse: Somente rastreia URLs mais profundas (filhas).\n→ ex.: /features/feature-1 → /features/feature-1/tips ✅\n→ Não seguirá /pricing ou / ❌\n\ntrue: Rastreia qualquer link interno, incluindo URLs no mesmo nível e URLs pai.\n→ ex.: /features/feature-1 → /pricing, /, etc. ✅\n\nUse true para obter uma cobertura interna mais ampla, além de caminhos aninhados.",
                    "type": "boolean"
                  },
                  "delay": {
                    "description": "Intervalo, em segundos, entre as coletas. Isso ajuda a respeitar os limites de requisições dos sites.",
                    "type": "number"
                  },
                  "excludePaths": {
                    "description": "Padrões de regex para o caminho da URL que excluem URLs correspondentes do rastreamento. Por exemplo, se você definir \"excludePaths\": [\"blog/.*\"] para a URL base firecrawl.dev, quaisquer resultados que corresponderem a esse padrão serão excluídos, como https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap. Os padrões usam a sintaxe de regex do Rust (estilo RE2): look-around e retroreferências não são compatíveis, e um padrão que não compila é rejeitado com um erro 400. Cada campo aceita no máximo 1000 padrões de até 2000 caracteres cada, e includePaths e excludePaths juntos podem conter no máximo 1000 padrões e 100.000 caracteres no total. Para filtragem por palavras-chave, envie um padrão curto por termo em vez de combinar termos em uma única alternância longa.",
                    "items": {
                      "maxLength": 2000,
                      "type": "string"
                    },
                    "maxItems": 1000,
                    "type": "array"
                  },
                  "ignoreQueryParameters": {
                    "default": false,
                    "description": "Não reextraia o mesmo path com parâmetros de consulta diferentes (ou sem nenhum)",
                    "type": "boolean"
                  },
                  "ignoreSitemap": {
                    "default": false,
                    "description": "Ignorar o sitemap do site durante o rastreamento",
                    "type": "boolean"
                  },
                  "includePaths": {
                    "description": "Padrões de regex para o caminho da URL que incluem URLs correspondentes no rastreamento. Somente os caminhos que corresponderem aos padrões especificados serão incluídos na resposta. Por exemplo, se você definir \"includePaths\": [\"blog/.*\"] para a URL base firecrawl.dev, apenas resultados que corresponderem a esse padrão serão incluídos, como https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap. Os padrões usam a sintaxe de regex do Rust (estilo RE2): look-around e retroreferências não são compatíveis, e um padrão que não compila é rejeitado com um erro 400. Cada campo aceita no máximo 1000 padrões de até 2000 caracteres cada, e includePaths e excludePaths juntos podem conter no máximo 1000 padrões e 100.000 caracteres no total. Para filtragem por palavras-chave, envie um padrão curto por termo em vez de combinar termos em uma única alternância longa.",
                    "items": {
                      "maxLength": 2000,
                      "type": "string"
                    },
                    "maxItems": 1000,
                    "type": "array"
                  },
                  "limit": {
                    "default": 10000,
                    "description": "Número máximo de páginas a serem rastreadas. O limite padrão é 10.000.",
                    "type": "integer"
                  },
                  "maxConcurrency": {
                    "description": "Número máximo de raspagens simultâneas. Esse parâmetro permite definir um limite de concorrência para este rastreamento. Se não for especificado, o rastreamento usará o limite de concorrência da sua equipe.",
                    "type": "integer"
                  },
                  "maxDepth": {
                    "default": 10,
                    "description": "Profundidade absoluta máxima de rastreamento a partir da base da URL informada. Basicamente, é o número máximo de barras (/) que o pathname de uma URL coletada pode conter.",
                    "type": "integer"
                  },
                  "maxDiscoveryDepth": {
                    "description": "Profundidade máxima de rastreamento com base na ordem de descoberta. O site raiz e as páginas do sitemap têm profundidade de descoberta igual a 0. Por exemplo, se você definir como 1 e ativar ignoreSitemap, você só irá rastrear a URL informada e todas as URLs que estiverem linkadas nessa página.",
                    "type": "integer"
                  },
                  "regexOnFullURL": {
                    "default": false,
                    "description": "Quando configurado como true, os padrões de regex em includePaths e excludePaths são comparados com a URL completa (incluindo parâmetros de query), em vez de apenas com o caminho (pathname) da URL. Útil quando você precisa filtrar URLs com base em query strings.",
                    "type": "boolean"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "url": {
                    "description": "A URL base de onde o rastreamento será iniciado",
                    "format": "uri",
                    "type": "string"
                  },
                  "webhook": {
                    "description": "Objeto de especificação de webhook.",
                    "properties": {
                      "events": {
                        "description": "Tipo de eventos que devem ser enviados para a URL do webhook. (padrão: todos)",
                        "items": {
                          "enum": [
                            "completed",
                            "page",
                            "failed",
                            "started"
                          ],
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "headers": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "Cabeçalhos que serão enviados para a URL do webhook.",
                        "type": "object"
                      },
                      "metadata": {
                        "additionalProperties": true,
                        "description": "Metadados personalizados que serão incluídos em todos os payloads de webhook deste rastreamento",
                        "type": "object"
                      },
                      "url": {
                        "description": "A URL para a qual o webhook será enviado. O webhook será acionado quando o crawl for iniciado (crawl.started), a cada página rastreada (crawl.page) e quando o crawl for concluído (crawl.completed ou crawl.failed). A resposta será a mesma do endpoint `/scrape`.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "type": "object"
                  },
                  "zeroDataRetention": {
                    "default": false,
                    "description": "Se definido como true, não haverá retenção de dados para este crawl. Para habilitar esse recurso, entre em contato pelo e-mail help@firecrawl.dev",
                    "type": "boolean"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlResponse"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento necessário"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas solicitações"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro no servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Rastrear várias URLs de acordo com opções",
        "tags": [
          "Crawling"
        ]
      }
    },
    "/crawl/active": {
      "get": {
        "operationId": "getActiveCrawls",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "crawls": {
                      "items": {
                        "properties": {
                          "id": {
                            "description": "O identificador único do rastreamento",
                            "format": "uuid",
                            "type": "string"
                          },
                          "options": {
                            "description": "Opções do crawler utilizadas neste rastreamento",
                            "properties": {
                              "scrapeOptions": {
                                "$ref": "#/components/schemas/ScrapeOptions"
                              }
                            },
                            "type": "object"
                          },
                          "teamId": {
                            "description": "O ID da equipe proprietária do crawl",
                            "type": "string"
                          },
                          "url": {
                            "description": "URL de origem do rastreamento",
                            "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": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento necessário"
          },
          "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": "Muitas requisições"
          },
          "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": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Retorna todos os rastreamentos ativos da equipe autenticada",
        "tags": [
          "Crawling"
        ]
      }
    },
    "/crawl/{id}": {
      "delete": {
        "operationId": "cancelCrawl",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "enum": [
                        "cancelled"
                      ],
                      "example": "cancelled",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Cancelamento concluído com sucesso"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Crawl job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tarefa de rastreamento não encontrada"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Cancelar uma tarefa de rastreamento",
        "tags": [
          "Crawling"
        ]
      },
      "get": {
        "operationId": "getCrawlStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlStatusResponseObj"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento obrigatório"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas solicitações"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obter o status de um rastreamento",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "O ID da tarefa de rastreamento",
          "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": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento obrigatório"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas solicitações"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obter os erros de uma tarefa de rastreamento",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "ID da tarefa de rastreamento",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/deep-research": {
      "post": {
        "operationId": "startDeepResearch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "analysisPrompt": {
                    "description": "O prompt a ser usado na análise final. Útil para definir o formato do markdown da análise final de uma maneira específica.",
                    "type": "string"
                  },
                  "formats": {
                    "default": [
                      "markdown"
                    ],
                    "items": {
                      "enum": [
                        "markdown",
                        "json"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "jsonOptions": {
                    "description": "Opções de saída em JSON",
                    "properties": {
                      "prompt": {
                        "description": "O prompt a ser usado para saída em JSON",
                        "type": "string"
                      },
                      "schema": {
                        "description": "O esquema a ser usado para a saída JSON. Deve estar em conformidade com o padrão [JSON Schema](https://json-schema.org/).",
                        "type": "object"
                      },
                      "systemPrompt": {
                        "description": "Prompt de sistema a ser usado para a saída JSON",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "maxDepth": {
                    "default": 7,
                    "description": "Profundidade máxima de iterações de pesquisa",
                    "maximum": 12,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "maxUrls": {
                    "default": 20,
                    "description": "Número máximo de URLs para analisar",
                    "maximum": 1000,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "description": "Consulta de pesquisa",
                    "type": "string"
                  },
                  "systemPrompt": {
                    "description": "O prompt de sistema a ser usado pelo agente de pesquisa. Útil para orientar o agente de pesquisa em uma direção específica.",
                    "type": "string"
                  },
                  "timeLimit": {
                    "default": 300,
                    "description": "Limite de tempo em segundos",
                    "maximum": 600,
                    "minimum": 30,
                    "type": "integer"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "id": {
                      "description": "ID da tarefa de pesquisa",
                      "format": "uuid",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Processo de pesquisa iniciado com sucesso"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid parameters provided",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Parâmetros da requisição inválidos"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Iniciar uma operação de pesquisa aprofundada com base em uma consulta",
        "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": "Exibido ao utilizar o formato JSON",
                          "nullable": true,
                          "type": "object"
                        },
                        "maxDepth": {
                          "type": "integer"
                        },
                        "sources": {
                          "items": {
                            "properties": {
                              "description": {
                                "description": "Descrição extraída da página; pode ser uma string ou um array de strings",
                                "oneOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                ]
                              },
                              "favicon": {
                                "type": "string"
                              },
                              "title": {
                                "description": "Título extraído da página; pode ser uma string ou um array de strings",
                                "oneOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                ]
                              },
                              "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": "Resposta bem-sucedida"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Research job not found",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Job de pesquisa não encontrado"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenha o status e os resultados de uma operação de pesquisa aprofundada",
        "tags": [
          "Research"
        ]
      },
      "parameters": [
        {
          "description": "O ID do job de pesquisa",
          "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": "Quando definido como true, a extração utilizará pesquisa na web para encontrar dados adicionais",
                    "type": "boolean"
                  },
                  "ignoreInvalidURLs": {
                    "default": false,
                    "description": "Se URLs inválidas forem especificadas no array urls, elas serão ignoradas. Em vez de fazer com que a requisição inteira falhe, será realizada uma extração usando apenas as URLs válidas restantes, e as URLs inválidas serão retornadas no campo invalidURLs da resposta.",
                    "type": "boolean"
                  },
                  "ignoreSitemap": {
                    "default": false,
                    "description": "Quando definido como `true`, os arquivos sitemap.xml serão ignorados durante a varredura do site",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Quando definido como verdadeiro, os subdomínios das URLs fornecidas também serão rastreados",
                    "type": "boolean"
                  },
                  "prompt": {
                    "description": "Prompt para guiar o processo de extração",
                    "type": "string"
                  },
                  "schema": {
                    "description": "Esquema que define a estrutura dos dados extraídos. Deve estar em conformidade com o [JSON Schema](https://json-schema.org/).",
                    "type": "object"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "showSources": {
                    "default": false,
                    "description": "Quando definido como `true`, as fontes usadas para extrair os dados serão incluídas na resposta como a chave `sources`",
                    "type": "boolean"
                  },
                  "threatProtection": {
                    "$ref": "#/components/schemas/ThreatProtectionOverride"
                  },
                  "urls": {
                    "items": {
                      "description": "As URLs das quais os dados serão extraídos. As URLs devem estar no formato glob.",
                      "format": "uri",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "urls"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractResponse"
                }
              }
            },
            "description": "Extração concluída com sucesso"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid input data.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Solicitação inválida"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro no servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Extraia dados estruturados de páginas com LLMs",
        "tags": [
          "Extraction"
        ]
      }
    },
    "/extract/{id}": {
      "get": {
        "operationId": "getExtractStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractStatusResponse"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obter o status de uma tarefa de extração",
        "tags": [
          "Extraction"
        ]
      },
      "parameters": [
        {
          "description": "O ID da tarefa de extração",
          "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": "Número máximo de URLs para análise",
                    "type": "integer"
                  },
                  "showFullText": {
                    "default": false,
                    "description": "Inclua todo o conteúdo de texto na resposta",
                    "type": "boolean"
                  },
                  "url": {
                    "description": "A URL usada para gerar o LLMs.txt",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "id": {
                      "description": "ID da tarefa de geração do arquivo LLMs.txt",
                      "format": "uuid",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tarefa de geração de LLMs.txt iniciada com sucesso"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid parameters provided",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Parâmetros de requisição inválidos"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Gerar o arquivo LLMs.txt para um site",
        "tags": [
          "LLMs.txt"
        ]
      }
    },
    "/llmstxt/{id}": {
      "get": {
        "operationId": "getLLMsTxtStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "llmsfulltxt": {
                          "description": "O conteúdo de texto completo quando showFullText é true",
                          "type": "string"
                        },
                        "llmstxt": {
                          "description": "O conteúdo gerado do arquivo LLMs.txt",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "expiresAt": {
                      "description": "Quando o conteúdo gerado vai expirar",
                      "format": "date-time",
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "processing",
                        "completed",
                        "failed"
                      ],
                      "type": "string"
                    },
                    "success": {
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "LLMs.txt generation job not found",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Job de geração de LLMs.txt não encontrado"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obter o status e os resultados de um job de geração do arquivo LLMs.txt",
        "tags": [
          "LLMs.txt"
        ]
      },
      "parameters": [
        {
          "description": "O ID da tarefa de geração do arquivo 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": "Ignorar o sitemap do site durante o rastreamento.",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Incluir subdomínios do site",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5000,
                    "description": "Número máximo de links a retornar",
                    "maximum": 30000,
                    "type": "integer"
                  },
                  "location": {
                    "description": "Configurações de localização da requisição. Quando definidas, será usado um proxy apropriado, se disponível, e serão emuladas as configurações correspondentes de idioma e fuso horário. O padrão é \"US\" se não for especificado.",
                    "properties": {
                      "country": {
                        "default": "US",
                        "description": "Código de país ISO 3166-1 alfa-2 (por exemplo, \"US\", \"AU\", \"DE\", \"JP\")",
                        "pattern": "^[A-Z]{2}$",
                        "type": "string"
                      },
                      "languages": {
                        "description": "Idiomas e localidades preferidos para a requisição, em ordem de prioridade. Por padrão, usa o idioma da localidade especificada. Consulte https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language",
                        "items": {
                          "example": "en-US",
                          "type": "string"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "search": {
                    "description": "Consulta de pesquisa usada para mapeamento. Durante a fase Alpha, o componente \"inteligente\" da funcionalidade de pesquisa é limitado a 500 resultados. Porém, se o mapeamento encontrar mais resultados, nenhum limite será aplicado.",
                    "type": "string"
                  },
                  "sitemapOnly": {
                    "default": false,
                    "description": "Retorne apenas os links encontrados no sitemap do site",
                    "type": "boolean"
                  },
                  "threatProtection": {
                    "$ref": "#/components/schemas/ThreatProtectionOverride"
                  },
                  "timeout": {
                    "description": "Tempo limite em milissegundos. Não há tempo limite definido por padrão.",
                    "type": "integer"
                  },
                  "url": {
                    "description": "A URL base de onde iniciar o rastreamento",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MapResponse"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento obrigatório"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas solicitações"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro de servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Mapear várias URLs de acordo com as opções",
        "tags": [
          "Mapping"
        ]
      }
    },
    "/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrl",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "url": {
                        "description": "URL a ser raspada",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  {
                    "properties": {
                      "zeroDataRetention": {
                        "default": false,
                        "description": "Se definido como true, isso ativará retenção zero de dados para este scrape. Para ativar esse recurso, entre em contato com help@firecrawl.dev",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScrapeResponse"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pagamento obrigatório"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Muitas solicitações"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Raspar uma única URL e, opcionalmente, extrair informações usando um LLM",
        "tags": [
          "Scraping"
        ]
      }
    },
    "/search": {
      "post": {
        "operationId": "searchAndScrape",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "ignoreInvalidURLs": {
                    "default": false,
                    "description": "Exclui dos resultados de pesquisa as URLs que são inválidas para outros endpoints do Firecrawl. Isso ajuda a reduzir erros se você estiver encaminhando dados da pesquisa para outros endpoints da API do Firecrawl.",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5,
                    "description": "Número máximo de resultados a retornar",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "location": {
                    "description": "Parâmetro de localização para resultados de pesquisa",
                    "type": "string"
                  },
                  "query": {
                    "description": "A consulta de pesquisa",
                    "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": "Opções para extrair resultados de busca"
                  },
                  "tbs": {
                    "description": "Parâmetro de pesquisa baseado em tempo. Suporta períodos de tempo predefinidos (`qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`) e intervalos de datas personalizados (`cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY`)",
                    "type": "string"
                  },
                  "threatProtection": {
                    "$ref": "#/components/schemas/ThreatProtectionOverride"
                  },
                  "timeout": {
                    "default": 60000,
                    "description": "Tempo limite em milissegundos",
                    "type": "integer"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "properties": {
                          "description": {
                            "description": "Descrição do resultado da pesquisa",
                            "type": "string"
                          },
                          "html": {
                            "description": "Conteúdo HTML, quando solicitado em formats",
                            "nullable": true,
                            "type": "string"
                          },
                          "links": {
                            "description": "Links encontrados, se solicitado em formats",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "markdown": {
                            "description": "Conteúdo em Markdown, se a raspagem tiver sido solicitada",
                            "nullable": true,
                            "type": "string"
                          },
                          "metadata": {
                            "properties": {
                              "description": {
                                "description": "Descrição extraída da página; pode ser uma string ou um array de strings",
                                "oneOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                ]
                              },
                              "error": {
                                "nullable": true,
                                "type": "string"
                              },
                              "numPages": {
                                "description": "Para entradas em PDF, o número de páginas analisadas (limitado pela opção maxPages do parser).",
                                "type": "integer"
                              },
                              "sourceURL": {
                                "type": "string"
                              },
                              "statusCode": {
                                "type": "integer"
                              },
                              "title": {
                                "description": "Título extraído da página, pode ser uma string ou um array de strings",
                                "oneOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  }
                                ]
                              },
                              "totalPages": {
                                "description": "Para entradas em PDF, a contagem real de páginas do documento antes de qualquer limite imposto por maxPages. Omitido quando não for possível determiná-la; um totalPages maior que numPages indica que o resultado foi truncado.",
                                "type": "integer"
                              }
                            },
                            "type": "object"
                          },
                          "rawHtml": {
                            "description": "Conteúdo HTML bruto, se solicitado em formats",
                            "nullable": true,
                            "type": "string"
                          },
                          "screenshot": {
                            "description": "URL da captura de tela, caso tenha sido solicitada em formats. As capturas de tela expiram após 24 horas e deixam de estar disponíveis para download.",
                            "nullable": true,
                            "type": "string"
                          },
                          "title": {
                            "description": "Título do resultado da pesquisa",
                            "type": "string"
                          },
                          "url": {
                            "description": "URL do resultado da pesquisa",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "id": {
                      "description": "O ID da tarefa de busca",
                      "type": "string"
                    },
                    "success": {
                      "type": "boolean"
                    },
                    "warning": {
                      "description": "Mensagem de aviso caso ocorra algum problema",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "408": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request timed out",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tempo limite da requisição excedido"
          },
          "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": "Erro de servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Pesquisar e, opcionalmente, raspar os resultados da busca",
        "tags": [
          "Search"
        ]
      }
    },
    "/team/credit-usage": {
      "get": {
        "operationId": "getCreditUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billing_period_end": {
                          "description": "Data de término do período de cobrança atual.",
                          "example": "2025-01-31T23:59:59Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "billing_period_start": {
                          "description": "Data de início do período de cobrança atual.",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "plan_credits": {
                          "description": "Número de créditos do plano. Isso não inclui créditos de cupons ou créditos adicionados por pagamento conforme o uso.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remaining_credits": {
                          "description": "Número de créditos restantes da equipe",
                          "example": 1000,
                          "type": "number"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Could not find credit usage information",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Informação sobre uso de créditos não encontrada"
          },
          "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": "Erro no servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obter os créditos restantes da equipe autenticada",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/credit-usage/historical": {
      "get": {
        "operationId": "getHistoricalCreditUsage",
        "parameters": [
          {
            "description": "Obtenha o histórico de uso de créditos por chave de API",
            "in": "query",
            "name": "byApiKey",
            "required": false,
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "periods": {
                      "items": {
                        "properties": {
                          "apiKey": {
                            "description": "Nome da chave de API usada no período de cobrança. null se byApiKey for false (padrão)",
                            "nullable": true,
                            "type": "string"
                          },
                          "endDate": {
                            "description": "Data de término do período de faturamento",
                            "example": "2025-01-31T23:59:59Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "startDate": {
                            "description": "Data de início do período de faturamento",
                            "example": "2025-01-01T00:00:00Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "totalCredits": {
                            "description": "Número total de créditos utilizados no período de faturamento",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "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": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenha o histórico de uso de créditos da equipe autenticada",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/queue-status": {
      "get": {
        "operationId": "getQueueStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "activeJobsInQueue": {
                      "description": "Número de jobs ativos atualmente",
                      "type": "number"
                    },
                    "jobsInQueue": {
                      "description": "Número de jobs atualmente na sua fila",
                      "type": "number"
                    },
                    "maxConcurrency": {
                      "description": "Número máximo de jobs ativos em execução simultânea, de acordo com o seu plano",
                      "type": "number"
                    },
                    "mostRecentSuccess": {
                      "description": "Timestamp do job mais recente bem-sucedido",
                      "format": "date-time",
                      "nullable": true,
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    },
                    "waitingJobsInQueue": {
                      "description": "Número de jobs aguardando no momento",
                      "type": "number"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Métricas da fila de scraping da sua equipe",
        "tags": [
          "Miscellaneous"
        ]
      }
    },
    "/team/token-usage": {
      "get": {
        "operationId": "getTokenUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billing_period_end": {
                          "description": "Data de término do período de cobrança atual.",
                          "example": "2025-01-31T23:59:59Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "billing_period_start": {
                          "description": "Data de início do período de cobrança atual.",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "plan_tokens": {
                          "description": "Número de tokens incluídos no plano. Não inclui tokens de cupom.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remaining_tokens": {
                          "description": "Quantidade de tokens restantes para a equipe",
                          "example": 1000,
                          "type": "number"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Could not find token usage information",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Informações sobre o uso de tokens não encontradas"
          },
          "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": "Erro do servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obter os tokens restantes para a equipe autenticada (apenas Extract)",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage/historical": {
      "get": {
        "operationId": "getHistoricalTokenUsage",
        "parameters": [
          {
            "description": "Obter uso histórico de tokens por chave de API",
            "in": "query",
            "name": "byApiKey",
            "required": false,
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "periods": {
                      "items": {
                        "properties": {
                          "apiKey": {
                            "description": "Nome da chave de API utilizada durante o período de cobrança. null se byApiKey for false (padrão)",
                            "nullable": true,
                            "type": "string"
                          },
                          "endDate": {
                            "description": "Data de encerramento do período de faturamento",
                            "example": "2025-01-31T23:59:59Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "startDate": {
                            "description": "Data de início do período de faturamento",
                            "example": "2025-01-01T00:00:00Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "totalTokens": {
                            "description": "Número total de tokens utilizados no período de faturamento",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Resposta bem-sucedida"
          },
          "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": "Erro no servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtenha o histórico de uso de tokens da equipe autenticada (somente Extract)",
        "tags": [
          "Billing"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://api.firecrawl.dev/v1"
    }
  ]
}