diff --git a/agent-source-of-truth/curl.mdx b/agent-source-of-truth/curl.mdx index 6fded6451..0f6b2b1a6 100644 --- a/agent-source-of-truth/curl.mdx +++ b/agent-source-of-truth/curl.mdx @@ -75,7 +75,7 @@ curl -X POST "https://api.firecrawl.dev/v2/search" \ Successful responses include `success`, `data`, optional `warning`, `id`, and `creditsUsed`. -- `data.web`, `data.images`, `data.news`: result arrays; which keys appear depends on `sources` (by default only `data.web` is populated). +- `data.web`, `data.images`, `data.news`, `data.developer`: result arrays; which keys appear depends on `sources` and `categories` (by default only `data.web` is populated). - Web and news items include fields such as `title`, `url`, and (when `scrapeOptions` / formats request it) `markdown`, `html`, `rawHtml`, `links`, `screenshot`, `audio`, `video`, and `metadata`. - Image items include fields such as `imageUrl`, `url`, and dimensions when available. - `warning`: optional human-readable notice. @@ -104,6 +104,7 @@ Successful responses include `success`, `data`, optional `warning`, `id`, and `c - `{ "type": "github" }` - `{ "type": "research" }` - `{ "type": "pdf" }` + - `{ "type": "developer" }` - `limit` - Type: integer (minimum 1, maximum 100, default 5) @@ -136,6 +137,18 @@ Successful responses include `success`, `data`, optional `warning`, `id`, and `c - `"zdr"`: end-to-end zero data retention - `"anon"`: anonymized zero data retention +- `includeDomains` + - Type: array of strings + - Use when: you want to restrict results to specific domains. Mutually exclusive with `excludeDomains`. + +- `excludeDomains` + - Type: array of strings + - Use when: you want to exclude specific domains. Mutually exclusive with `includeDomains`. + +- `highlights` + - Type: boolean (default true) + - Use when: you want query-relevant highlights in results. + - `scrapeOptions` - Type: object - Use when: you want to scrape each search result (see Scrape parameters for fields). @@ -230,11 +243,15 @@ Successful responses include `success` and `data`. Common `data` fields (dependi - `"branding"`: branding profile output - `"audio"`: audio extraction - `"video"`: video extraction + - `"product"`: product profile output + - `"menu"`: menu profile output - Format object fields: - `type`: one of the format strings above - `prompt`, `schema`: JSON extraction options for `type: "json"` - `modes`, `schema`, `prompt`, `tag`: change tracking options for `type: "changeTracking"` - `fullPage`, `quality`, `viewport`: screenshot options for `type: "screenshot"` + - `{ "type": "question", "question": "..." }`: question-answer style extraction + - `{ "type": "highlights", "query": "..." }`: relevant source-text extraction - `headers` - Type: object @@ -324,6 +341,22 @@ Successful responses include `success` and `data`. Common `data` fields (dependi - Type: boolean - Use when: you want zero data retention for this scrape. +- `lockdown` + - Type: boolean + - Use when: you want to serve only previously cached results (no outbound request). + +- `redactPII` + - Type: boolean or object + - Use when: you want PII redaction. + +- `auditMetadata` + - Type: object with `username` string + - Use when: you need SIEM logging attribution. + +- `fastMode` + - Type: boolean + - Use when: you want faster scrapes with reduced fidelity. + ## Interact ### Why use it @@ -367,6 +400,7 @@ curl -X POST "https://api.firecrawl.dev/v2/scrape//interact" \ - `code` (JSON body) - Type: string (required in OpenAPI; min length 1, max length 100000) - Use when: you want to run code in the scrape-bound browser sandbox. + - Notes: while OpenAPI marks `code` as required, the server also accepts `prompt` for natural-language instructions. At least one of `code` or `prompt` must be provided. - `language` (JSON body) - Type: string diff --git a/agent-source-of-truth/elixir.mdx b/agent-source-of-truth/elixir.mdx index 703f6d6b2..1b9ef33c7 100644 --- a/agent-source-of-truth/elixir.mdx +++ b/agent-source-of-truth/elixir.mdx @@ -10,7 +10,7 @@ Canonical Firecrawl Elixir source of truth for agents. Generated from SDK source Add to `mix.exs`: ```elixir -{:firecrawl, "~> 1.0.0"} +{:firecrawl, "~> 1.9"} ``` ## Authenticate @@ -23,6 +23,8 @@ config :firecrawl, api_key: System.get_env("FIRECRAWL_API_KEY") {:ok, res} = Firecrawl.search_and_scrape([query: "site:docs.firecrawl.dev webhook retries"], api_key: "fc-your-api-key") ``` +A nil or empty API key is permitted: `scrape`, `search`, and `interact` fall back to a keyless free tier (rate-limited per IP). Per-request options also support `:base_url` for self-hosted instances. The SDK appends an `origin` field for telemetry. + ## When To Use What - `search`: use when you start with a query and need discovery. @@ -121,6 +123,18 @@ Use search to discover relevant pages from a query, then pick URLs to scrape or - Type: integer - Use when: you need a request timeout in milliseconds. +- `include_domains` + - Type: list of strings + - Use when: you want to restrict results to specific domains. Mutually exclusive with `exclude_domains`. + +- `exclude_domains` + - Type: list of strings + - Use when: you want to exclude specific domains. Mutually exclusive with `include_domains`. + +- `highlights` + - Type: boolean + - Use when: you want query-relevant highlights. Defaults to true. + - `enterprise` - Type: list of strings - Use when: you need enterprise search controls. @@ -302,6 +316,18 @@ Use scrape when you already have a URL and want structured content in one or mor - Type: boolean - Use when: you want zero data retention for this scrape. +- `lockdown` + - Type: boolean + - Use when: you want to serve only previously cached results (no outbound request). + +- `redact_pii` + - Type: boolean + - Use when: you want PII redaction. + +- `audit_metadata` + - Type: keyword list (keys: `username: :string`) + - Use when: you need SIEM logging attribution. + ## Interact ### Why use it @@ -370,6 +396,9 @@ Use interact when a page requires browser actions or code execution after a scra - The Elixir client is OpenAPI-shaped; function names and parameter keys are generated from the spec. - Each public function has a bang (`!`) variant that raises on error instead of returning `{:error, _}`. - This SDK exposes code-based interactions only (no `prompt` parameter on `interact_with_scrape_browser_session`). +- Keyless free tier: `scrape`, `search`, and `interact` work without an API key (rate-limited per IP). +- NimbleOptions validates all parameters at call time. +- Runtime dependency: `req ~> 0.5`, `nimble_options ~> 1.1`. ## Source Of Truth diff --git a/agent-source-of-truth/java.mdx b/agent-source-of-truth/java.mdx index 93da68332..ed2e5d103 100644 --- a/agent-source-of-truth/java.mdx +++ b/agent-source-of-truth/java.mdx @@ -13,14 +13,14 @@ Maven: com.firecrawl firecrawl-java - 1.2.0 + 1.12.1 ``` Gradle: ```gradle -implementation("com.firecrawl:firecrawl-java:1.2.0") +implementation("com.firecrawl:firecrawl-java:1.12.1") ``` ## Authenticate @@ -33,6 +33,18 @@ FirecrawlClient client = FirecrawlClient.builder() .build(); ``` +Additional builder methods: + +- `timeoutMs(long)` — HTTP request timeout in milliseconds (default 300000) +- `maxRetries(int)` — maximum retry attempts (default 3) +- `backoffFactor(double)` — exponential backoff multiplier (default 0.5) +- `asyncExecutor(Executor)` — custom executor for async methods +- `httpClient(OkHttpClient)` — custom OkHttpClient instance + +Static factory: `FirecrawlClient.fromEnv()` creates a client using environment variables. + +The API key can be null or blank for keyless free tier usage (rate-limited per IP). + ## When To Use What - `search`: use when you start with a query and need discovery. @@ -148,6 +160,18 @@ SearchData results = client.search("site:docs.firecrawl.dev crawl webhooks", opt - Type: `ScrapeOptions` - Use when: you want to scrape each search result (see Scrape parameters for fields). +- `options.includeDomains` + - Type: `List` + - Use when: you want to restrict results to specific domains. + +- `options.excludeDomains` + - Type: `List` + - Use when: you want to exclude specific domains. + +- `options.highlights` + - Type: Boolean + - Use when: you want query-relevant highlights. Defaults to true. + - `options.integration` - Type: String - Use when: the API expects an integration identifier on the request. @@ -165,7 +189,7 @@ Use scrape when you already have a URL and want structured content in one or mor ### Return value -`scrape` returns `Document`. Typical getters include `getMarkdown()`, `getHtml()`, `getRawHtml()`, `getJson()`, `getMetadata()`, `getLinks()`, `getAudio()`, `getVideo()`, and additional fields when the corresponding formats are requested. +`scrape` returns `Document`. Typical getters include `getMarkdown()`, `getHtml()`, `getRawHtml()`, `getJson()`, `getMetadata()`, `getLinks()`, `getAudio()`, `getVideo()`, `getProduct()`, `getMenu()`, `getBranding()`, `getAnswer()`, `getHighlights()`, `getWarning()`, `getChangeTracking()`, and additional fields when the corresponding formats are requested. ### Simple Example @@ -244,6 +268,9 @@ Document doc = client.scrape("https://example.com/pricing", options); - `modes`, `schema`, `prompt`, `tag`: change tracking options for `type: "changeTracking"` - `fullPage`, `quality`, `viewport`: screenshot options for `type: "screenshot"` - `selectors`: array of `{selector, attribute}` for `type: "attributes"` + - Additional format objects: + - `QuestionFormat.builder().question("...").build()`: question-answer extraction + - `HighlightsFormat.builder().query("...").build()`: relevant source-text extraction - `options.headers` - Type: `Map` @@ -327,6 +354,18 @@ Document doc = client.scrape("https://example.com/pricing", options); - Type: String - Use when: the API expects an integration identifier on the request. +- `options.lockdown` + - Type: Boolean + - Use when: you want to serve only previously cached results. + +- `options.redactPII` + - Type: Boolean + - Use when: you want PII redaction. + +- `options.auditMetadata` + - Type: `AuditMetadata` (has `username: String`) + - Use when: you need SIEM logging attribution. + ## Interact ### Why use it @@ -417,6 +456,9 @@ BrowserDeleteResponse stopped = client.stopInteractiveBrowser(""); - Deprecated aliases: `scrapeExecute` → `interact`, `deleteScrapeBrowser` → `stopInteractiveBrowser` (and the corresponding `*Async` helpers). - The Java SDK exposes code-based interactions only: there is no `prompt` parameter on `interact` (unlike some other language SDKs). +- Keyless free tier: `scrape`, `search`, and `interact` work without an API key (rate-limited per IP). +- Every sync method has an async counterpart returning `CompletableFuture` (e.g., `scrapeAsync`, `searchAsync`, `interactAsync`, `stopInteractiveBrowserAsync`). +- `FirecrawlClient.fromEnv()` creates a client using environment variables. ## Source Of Truth diff --git a/agent-source-of-truth/node.mdx b/agent-source-of-truth/node.mdx index 3d261eb0b..0d73037d6 100644 --- a/agent-source-of-truth/node.mdx +++ b/agent-source-of-truth/node.mdx @@ -3,7 +3,7 @@ title: "Node.js Source of Truth" description: "Canonical Firecrawl Node.js source of truth for agents using key endpoints like search, scrape, and interact." --- -Canonical Firecrawl Node.js source of truth for agents. Aligned with `firecrawl` **v4.18.2** (`firecrawl/apps/js-sdk/firecrawl`) and the v2 OpenAPI spec. Method names, parameters, and types match the SDK public API. +Canonical Firecrawl Node.js source of truth for agents. Aligned with `firecrawl` **v4.32.1** (`firecrawl/apps/js-sdk/firecrawl`) and the v2 OpenAPI spec. Method names, parameters, and types match the SDK public API. ## Install @@ -19,7 +19,12 @@ import { Firecrawl } from "firecrawl"; const client = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY, // apiUrl: "https://api.firecrawl.dev" // optional; falls back to FIRECRAWL_API_URL or cloud default + // maxRetries: 3, // optional; retry count for transient failures + // backoffFactor: 2 // optional; exponential backoff multiplier }); +// Or pass a plain string as the API key: +// const client = new Firecrawl("fc-key"); +// API key can be omitted entirely for keyless free tier (rate-limited per IP). ``` ## When To Use What @@ -78,6 +83,7 @@ const results = await client.search("site:docs.firecrawl.dev crawl webhooks", { - `web`: web index hits - `news`: news hits - `images`: image hits +- `developer`: developer-specific results (e.g., GitHub code search) **Wrong turn to avoid:** `search()` does not return `{ data: [...] }`. Do not access `result.data`. Web results are in `result.web`, news in `result.news`, images in `result.images`. @@ -107,7 +113,8 @@ const results = await client.search("site:docs.firecrawl.dev crawl webhooks", { - `"github"`: GitHub-focused results - `"research"`: research and academic results - `"pdf"`: PDF-focused results - - `{ type: "github" | "research" | "pdf" }`: typed category object form + - `"developer"`: developer-specific results (e.g., GitHub code search) + - `{ type: "github" | "research" | "pdf" | "developer" }`: typed category object form - `options.limit` - Type: number @@ -133,6 +140,26 @@ const results = await client.search("site:docs.firecrawl.dev crawl webhooks", { - Type: `ScrapeOptions` - Use when: you want to scrape each search result (see Scrape parameters for fields). The SDK runs the same validation as for `scrape` (for example plain string `"json"` in `formats` is rejected). +- `options.includeDomains` + - Type: array of strings + - Use when: you want to restrict results to specific domains. Mutually exclusive with `excludeDomains`. + +- `options.excludeDomains` + - Type: array of strings + - Use when: you want to exclude specific domains from results. Mutually exclusive with `includeDomains`. + +- `options.highlights` + - Type: boolean + - Use when: you want query-relevant highlights in results. Defaults to true. + +- `options.enterprise` + - Type: array of strings + - Use when: you need enterprise search controls. + - Confirmed values: + - `"default"` + - `"anon"`: anonymized ZDR + - `"zdr"`: end-to-end zero data retention + ## Scrape ### Why use it @@ -208,6 +235,8 @@ const doc = await client.scrape("https://example.com/pricing", { - `"branding"`: branding profile output - `"audio"`: audio extraction - `"video"`: video extraction + - `"product"`: product profile output + - `"menu"`: menu profile output - Object-only format types (at minimum `type` as shown): - `{ type: "json", prompt?: string, schema?: JSON schema or Zod schema }`: at least one of `prompt` or `schema` is required (SDK validation). - `{ type: "question", question: string }`: question-answer style extraction. @@ -316,6 +345,26 @@ const doc = await client.scrape("https://example.com/pricing", { - Type: object with `name` and optional `saveChanges` - Use when: you want a persistent browser profile shared across scrapes and interactions. +- `options.lockdown` + - Type: boolean + - Use when: you want to serve only previously cached results (no outbound request). + +- `options.redactPII` + - Type: boolean or RedactPIIOptions + - Use when: you want PII redaction. RedactPIIOptions has `mode`, `entities`, `replaceStyle`. + +- `options.auditMetadata` + - Type: object with `username` string + - Use when: you need SIEM logging attribution. + +- `options.integration` + - Type: string + - Use when: you need an integration identifier for server-side tracking. Omit in agent-oriented examples unless your product intentionally sets it. + +- `options.useMock` + - Type: string + - Use when: you want to use mock mode. + ## Interact ### Why use it @@ -530,6 +579,8 @@ console.log(result.answer); - The default `Firecrawl` export is the v2 client; v1 remains under `client.v1`. - Zod schemas passed to `formats` (for `json` or `changeTracking`) are converted to JSON Schema by the SDK. - The package declares **Node.js >= 22** in `engines`. +- The constructor accepts a plain string as the API key: `new Firecrawl("fc-key")`. +- Keyless free tier: scrape, search, and interact work without an API key (rate-limited per IP). ## Source Of Truth diff --git a/agent-source-of-truth/python.mdx b/agent-source-of-truth/python.mdx index 41e594452..8a5bca5be 100644 --- a/agent-source-of-truth/python.mdx +++ b/agent-source-of-truth/python.mdx @@ -3,7 +3,7 @@ title: "Python Source of Truth" description: "Canonical Firecrawl Python source of truth for agents using key endpoints like search, scrape, and interact." --- -Canonical Firecrawl Python source of truth for agents. Generated from SDK source (`firecrawl-py` / `firecrawl` **4.22.1**) and the v2 OpenAPI spec. Method names, parameters, and return types match the v2 client in `firecrawl/v2/client.py` unless noted. +Canonical Firecrawl Python source of truth for agents. Generated from SDK source (`firecrawl-py` / `firecrawl` **4.35.0**) and the v2 OpenAPI spec. Method names, parameters, and return types match the v2 client in `firecrawl/v2/client.py` unless noted. ## Install @@ -21,6 +21,8 @@ client = Firecrawl(api_key=os.environ.get("FIRECRAWL_API_KEY")) # client = Firecrawl(api_key="fc-...", api_url="https://api.firecrawl.dev") ``` +The constructor also accepts `timeout` (float, default request timeout in seconds), `max_retries` (int, default 3), and `backoff_factor` (float, default 0.5). The API key can be omitted for the keyless free tier (rate-limited per IP). `FirecrawlApp` is a deprecated alias for `Firecrawl`. For async usage, use `AsyncFirecrawl` (aliased as `AsyncFirecrawlApp`). + ## When To Use What - `search`: use when you start with a query and need discovery. @@ -46,6 +48,7 @@ Returns a `SearchData` model with optional lists: - `web` — web hits (`SearchResultWeb` or full `Document` when `scrape_options` hydrates content) - `news` — news hits (`SearchResultNews` or `Document`) - `images` — image hits (`SearchResultImages` or `Document`) +- `developer` — developer results (e.g., GitHub code search) Omitted buckets are `None` when the API did not return that key. @@ -115,7 +118,8 @@ results = client.search( - `"github"`: GitHub-focused results - `"research"`: research and academic results - `"pdf"`: PDF-focused results - - `Category(type="github" | "research" | "pdf")`: typed category object form + - `"developer"`: developer results (e.g., GitHub code search) + - `Category(type="github" | "research" | "pdf" | "developer")`: typed category object form - `limit` - Type: int @@ -143,6 +147,26 @@ results = client.search( - Type: `ScrapeOptions` - Use when: you want to scrape each search result (see Scrape parameters for fields). +- `include_domains` + - Type: list of str + - Use when: you want to restrict results to specific domains. Mutually exclusive with `exclude_domains`. + +- `exclude_domains` + - Type: list of str + - Use when: you want to exclude specific domains from results. Mutually exclusive with `include_domains`. + +- `highlights` + - Type: bool + - Use when: you want query-relevant highlights in results. Defaults to true. + +- `enterprise` + - Type: list of str + - Use when: you need enterprise search controls. Values: `"zdr"` (zero data retention), `"anon"` (anonymized ZDR). + +- `threat_protection` + - Type: ThreatProtectionOptions + - Use when: you need enterprise threat protection override. + ## Scrape ### Why use it @@ -214,10 +238,13 @@ doc = client.scrape( - `"branding"`: branding profile output - `"audio"`: audio extraction - `"video"`: video extraction + - `"product"`: product data extraction + - `"menu"`: menu data extraction - Object-only format types: - `{"type": "json", ...}`: JSON extraction. Use an object, not the plain string `"json"`. + - `{"type": "query", ...}`: query output (object-only). - `{"type": "question", "question": "..."}`: question-answer output. - - `{"type": "highlights", "query": "..."}`: relevant source-text output. + - `{"type": "highlights", "query": "..."}`: relevant source-text extraction. - Format object fields: - `type`: one of the format strings above, or `"json"`, `"question"`, or `"highlights"` for object-only formats - `question`: for `type: "question"` @@ -320,6 +347,26 @@ doc = client.scrape( - Type: dict with `name` and optional `save_changes` or `saveChanges` - Use when: you want a persistent browser profile shared across scrapes and interactions. +- `lockdown` + - Type: bool + - Use when: you want to serve only previously cached results (no outbound request). + +- `threat_protection` + - Type: ThreatProtectionOptions + - Use when: you need enterprise threat protection override. + +- `audit_metadata` + - Type: AuditMetadata + - Use when: you need SIEM logging attribution (has `username` field). + +- `integration` + - Type: str + - Use when: you need an integration identifier for server-side tracking. Omit in agent-oriented examples unless your product intentionally sets it. + +- `use_mock` + - Type: str + - Use when: you want to use mock mode. + ## Interact ### Why use it @@ -382,6 +429,10 @@ result = client.interact( - Type: int - Use when: you need an execution timeout in seconds. +- `origin` + - Type: str + - Use when: you need an optional origin label for execution telemetry. Prefer omitting unless your integration requires it. + ### Return value Returns `BrowserExecuteResponse`: `success`, optional `live_view_url`, `interactive_live_view_url`, `output`, `stdout`, `result`, `stderr`, `exit_code`, `killed`, `error` (API camelCase is normalized to snake_case on the model). @@ -510,6 +561,8 @@ print(response.json()["answer"]) - Deprecated aliases: `scrape_execute` → `interact`; `stop_interactive_browser` and `delete_scrape_browser` → `stop_interaction`. - The top-level `Firecrawl` client exposes v2 methods directly; v1 remains under `client.v1`. - The bundled v2 OpenAPI snippet for `POST /v2/scrape/{jobId}/interact` may only document `code`; the Python SDK and server accept either `code` or `prompt` for this endpoint. +- Keyless free tier: scrape, search, and interact work without an API key (rate-limited per IP). +- `AsyncFirecrawl` (aliased as `AsyncFirecrawlApp`) is available for async usage. ## Source Of Truth diff --git a/agent-source-of-truth/rust.mdx b/agent-source-of-truth/rust.mdx index a64c654ab..e1bf2a2b0 100644 --- a/agent-source-of-truth/rust.mdx +++ b/agent-source-of-truth/rust.mdx @@ -11,7 +11,7 @@ Canonical Firecrawl Rust source of truth for agents. Generated from SDK source a cargo add firecrawl ``` -Crate: **`firecrawl`** on crates.io. The current SDK version is **2.0.0** (verify the latest release on crates.io before pinning). +Crate: **`firecrawl`** on crates.io. The current SDK version is **2.12.1** (verify the latest release on crates.io before pinning). ## Authenticate @@ -21,8 +21,12 @@ use firecrawl::Client; let client = Client::new("fc-your-api-key")?; // Self-hosted example: // let client = Client::new_selfhosted("http://localhost:3002", Some("fc-your-api-key"))?; +// Keyless free tier (rate-limited per IP): +// let client = Client::new_selfhosted("http://localhost:3002", None)?; ``` +Keyless free tier: empty or whitespace API keys are accepted. The `new_selfhosted` constructor takes `api_key: Option` — passing `None` is permitted and enables the free tier (rate-limited per IP). + ## When To Use What - `search`: use when you start with a query and need discovery. @@ -142,6 +146,25 @@ let results = client - Use when: you need an integration identifier for server-side tracking. - Notes: omit in agent-oriented examples unless your product intentionally sets it. +- `options.include_domains` + - Type: `Vec` + - Use when: you want to restrict results to specific domains. + - Notes: mutually exclusive with `exclude_domains`. + +- `options.exclude_domains` + - Type: `Vec` + - Use when: you want to exclude specific domains from results. + - Notes: mutually exclusive with `include_domains`. + +- `options.highlights` + - Type: bool + - Use when: you want query-relevant highlights in results. + - Notes: defaults to true. + +- `options.origin` + - Type: `Option` + - Use when: you want an origin label for request attribution. + ## Scrape ### Why use it @@ -152,6 +175,9 @@ Use scrape when you already have a URL and want structured content in one or mor `client.scrape(url, options)` → `Result` (the HTTP response `data` field is unwrapped in the SDK). +`client.scrape_with_schema(url, schema, prompt)` → `Result` +Convenience wrapper that sets `formats: [Json]` and populates `json_options`. Returns the extracted JSON `Value` (or `Value::Null` if missing). + ### Simple Example ```rust @@ -225,7 +251,12 @@ let doc = client - `options.formats` - Type: `Vec` - Use when: you want multiple output formats. - - Confirmed values: `Markdown`, `Html`, `RawHtml`, `Links`, `Images`, `Screenshot`, `Summary`, `ChangeTracking`, `Json`, `Attributes`, `Branding`, `Audio`, `Video` + - Confirmed values: `Markdown`, `Html`, `RawHtml`, `Links`, `Images`, `Screenshot`, `Summary`, `ChangeTracking`, `Json`, `Attributes`, `Branding`, `Audio`, `Video`, `Product`, `Menu`, `Question(QuestionFormat)`, `Highlights(HighlightsFormat)`, `Query(QueryFormat)` + - `Product`: product profile output. + - `Menu`: menu profile output. + - `Question(QuestionFormat)`: question-answer extraction; `QuestionFormat` has `question: String`. + - `Highlights(HighlightsFormat)`: relevant source-text extraction; `HighlightsFormat` has `query: String`. + - `Query(QueryFormat)`: deprecated query format. - `options.headers` - Type: `HashMap` @@ -324,6 +355,25 @@ let doc = client - Use when: you need an integration identifier for server-side tracking. - Notes: omit in agent-oriented examples unless your product intentionally sets it. +- `options.lockdown` + - Type: bool + - Use when: you want to serve only previously cached results (no outbound request). + +- `options.redact_pii` + - Type: bool + - Use when: you want PII redaction. + - Notes: serialized as `redactPII` (all caps). + +- `options.audit_metadata` + - Type: `AuditMetadata` + - Use when: you need SIEM logging attribution. + - Confirmed fields: `username: String` + +- `options.origin` + - Type: `Option` + - Use when: you want an origin label. + - Notes: auto-set to `"rust-sdk@{version}"` if not provided. + - `options.json_options` - Type: `JsonOptions` - Use when: you want to configure JSON extraction. @@ -444,6 +494,8 @@ The v2 OpenAPI spec currently models the interact request body with `code` as re - `search_and_scrape(query, limit)` is a convenience helper: it calls `search` with default `ScrapeOptions` and returns `Vec` built from `SearchResultOrDocument::Document` entries in `data.web` (see `search.rs`). - v2 SDK exports all types at the crate root: `use firecrawl::Client` (not `use firecrawl::v2::Client`). - Error types simplified in v2: `CrawlJobFailed(String, CrawlStatus)` → `JobFailed(String)`, `Missuse` → `Misuse`. +- Keyless free tier: scrape, search, and interact work without an API key (rate-limited per IP). +- `scrape_with_schema(url, schema, prompt)` is a convenience wrapper for JSON extraction. ## Source Of Truth @@ -452,9 +504,4 @@ The v2 OpenAPI spec currently models the interact request body with `code` as re - `firecrawl/apps/rust-sdk/src/client.rs` - `firecrawl/apps/rust-sdk/src/scrape.rs` - `firecrawl/apps/rust-sdk/src/search.rs` -- `firecrawl/apps/rust-sdk/src/crawl.rs` -- `firecrawl/apps/rust-sdk/src/map.rs` -- `firecrawl/apps/rust-sdk/src/batch_scrape.rs` -- `firecrawl/apps/rust-sdk/src/agent.rs` - `firecrawl/apps/rust-sdk/src/types.rs` -- `firecrawl-docs/api-reference/v2-openapi.json`