diff --git a/agent-source-of-truth/elixir.mdx b/agent-source-of-truth/elixir.mdx
index 703f6d6b2..e3dc123b6 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,14 @@ 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")
```
+All functions accept an optional trailing keyword list (`opts`) that supports:
+
+- `:api_key` — override the API key for this call.
+- `:base_url` — override the default base URL (`https://api.firecrawl.dev/v2`), useful for self-hosted instances.
+- Any other keys are passed through to the underlying Req HTTP client (for example, `:receive_timeout`, `:retry`).
+
+A nil or empty API key is allowed: `scrape`, `search`, and `interact` fall back to a keyless free tier that is rate-limited per IP.
+
## When To Use What
- `search`: use when you start with a query and need discovery.
@@ -58,6 +66,9 @@ Use search to discover relevant pages from a query, then pick URLs to scrape or
country: "US",
ignore_invalid_urls: true,
timeout: 60000,
+ include_domains: ["docs.firecrawl.dev", "firecrawl.dev"],
+ exclude_domains: ["example.com"],
+ highlights: true,
scrape_options: [
formats: [
"markdown",
@@ -121,6 +132,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.
+- `exclude_domains`
+ - Type: list of strings
+ - Use when: you want to exclude specific domains from search results.
+
+- `include_domains`
+ - Type: list of strings
+ - Use when: you want to restrict search results to specific domains.
+
+- `highlights`
+ - Type: boolean
+ - Use when: you want query-relevant highlights returned with each result.
+
- `enterprise`
- Type: list of strings
- Use when: you need enterprise search controls.
@@ -180,7 +203,10 @@ Use scrape when you already have a URL and want structured content in one or mor
min_age: 1,
store_in_cache: true,
profile: [name: "docs-session", save_changes: true],
- zero_data_retention: false
+ zero_data_retention: false,
+ lockdown: false,
+ redact_pii: true,
+ audit_metadata: [username: "admin@example.com"]
)
```
@@ -302,6 +328,19 @@ 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.
+- `audit_metadata`
+ - Type: keyword list (keys: `username: :string`, required)
+ - Use when: you need SIEM logging attribution.
+
+- `lockdown`
+ - Type: boolean
+ - Use when: you want to serve only cached results (no live fetch).
+
+- `redact_pii`
+ - Type: boolean
+ - Use when: you want PII redaction applied to the scraped content.
+ - JSON key: `redactPII`
+
## Interact
### Why use it
@@ -367,8 +406,11 @@ Use interact when a page requires browser actions or code execution after a scra
## Notes
-- The Elixir client is OpenAPI-shaped; function names and parameter keys are generated from the spec.
+- The Elixir client is auto-generated from the OpenAPI spec (the line 1 comment in the source confirms this).
- Each public function has a bang (`!`) variant that raises on error instead of returning `{:error, _}`.
+- Parameters are validated at call time using NimbleOptions.
+- Snake_case Elixir keys are automatically converted to camelCase JSON keys.
+- The SDK auto-injects `"origin": "elixir-sdk@1.9.1"` in every request body.
- This SDK exposes code-based interactions only (no `prompt` parameter on `interact_with_scrape_browser_session`).
## Source Of Truth
diff --git a/agent-source-of-truth/java.mdx b/agent-source-of-truth/java.mdx
index 93da68332..d8ad3c97e 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,24 @@ FirecrawlClient client = FirecrawlClient.builder()
.build();
```
+### Builder options
+
+- `apiKey(String)` — API key for authentication. Falls back to `FIRECRAWL_API_KEY` env var, then `firecrawl.apiKey` system property. Null is allowed (keyless free tier).
+- `apiUrl(String)` — Base URL for the Firecrawl API. Default `"https://api.firecrawl.dev"`, falls back to `FIRECRAWL_API_URL` env var.
+- `timeoutMs(long)` — HTTP request timeout in milliseconds (default 300000 / 5 min).
+- `maxRetries(int)` — Auto-retry count for transient failures (default 3).
+- `backoffFactor(double)` — Exponential backoff factor in seconds (default 0.5).
+- `asyncExecutor(Executor)` — Executor for async methods (default `ForkJoinPool.commonPool()`).
+- `httpClient(OkHttpClient)` — Pre-configured OkHttp client (ignores `timeoutMs` when provided).
+
+### Factory method
+
+`FirecrawlClient.fromEnv()` — Creates a client using environment-based configuration (`FIRECRAWL_API_KEY`, `FIRECRAWL_API_URL`). Equivalent to `FirecrawlClient.builder().build()` with no explicit arguments.
+
+```java
+FirecrawlClient client = FirecrawlClient.fromEnv();
+```
+
## When To Use What
- `search`: use when you start with a query and need discovery.
@@ -83,6 +101,9 @@ SearchOptions options = SearchOptions.builder()
.location("San Francisco,California,United States")
.ignoreInvalidURLs(true)
.timeout(60000)
+ .includeDomains(List.of("docs.firecrawl.dev", "firecrawl.dev"))
+ .excludeDomains(List.of("example.com"))
+ .highlights(true)
.scrapeOptions(
ScrapeOptions.builder()
.formats(List.of(
@@ -144,6 +165,18 @@ SearchData results = client.search("site:docs.firecrawl.dev crawl webhooks", opt
- Type: Integer
- Use when: you need a request timeout in milliseconds.
+- `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 in the results (defaults to true).
+
- `options.scrapeOptions`
- Type: `ScrapeOptions`
- Use when: you want to scrape each search result (see Scrape parameters for fields).
@@ -181,6 +214,9 @@ Document doc = client.scrape(
```java
import com.firecrawl.models.ScrapeOptions;
import com.firecrawl.models.JsonFormat;
+import com.firecrawl.models.HighlightsFormat;
+import com.firecrawl.models.QuestionFormat;
+import com.firecrawl.models.AuditMetadata;
List