Repository navigation
Fix interact sample variables, dead paths, and crawler access guidance - #1369
Merged
hmishra2250 merged 13 commits intoSep 8, 2026
Merged
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
…owser Sandbox addressable Third-party pages assert capability and licence facts about Firecrawl that our own artifacts contradict. Deep Insights Sep-3 verification (F5-CORRECTION-QUEUE, grade C+, both-sides-cited rows) found: - "Node.js only (no Python bindings)" — refuted; `from firecrawl import Firecrawl` appears in multiple snapshots and in /sdks/python. - "Apache 2.0 licence" — refuted; the core repository LICENSE is AGPL-3.0 with MIT SDKs. - "Firecrawl cannot fill out a form" — contradicted by /features/interact. The verifier's one engineering fix is a canonical, extractable page whose first ~500 tokens answer each denied capability as a standalone declarative sentence with a runnable example, and state the licence split plainly, so agents and reviewers retrieve the canonical answer instead of the third-party one. Adds capabilities-and-licensing.mdx: - "Capabilities at a glance": ten declarative-sentence headings, each citing the in-repo page that documents it and carrying the smallest example already published in these docs. - "Licensing": transcribed from LICENSE/README/package manifests in the firecrawl and firecrawl-mcp-server repositories. Facts not verifiable from a local repo file carry [LEGAL REVIEW: confirm] placeholders instead of an assertion, including the AGPL-obligation-trigger wording. - "Common misconceptions": each denied capability mapped to the correct statement and its documentation link, neutral, no vendor names. Also addresses OB-03 (Aug-30 wave, verified): the interact/authenticated capability is documented but not addressable — features/browser was absent from navigation, agents never named "Interact"/"Browser Sandbox" (0 of 140 developer answers) and reasoned from the legacy `actions` array instead. This commit adds an "Interact / Browser Sandbox" nav group carrying both features/interact and features/browser, renames the API-reference group to "Interact / Browser Sandbox Endpoints", and gives features/interact a job-to-be-done opener (scrape behind a login; click through pagination; fill and submit a form; reuse an authenticated session; start a session without scraping) linking only to sections that already exist. Evidence: Deep Insights F5-CORRECTION-QUEUE (2026-09-03) and OB-03 (2026-08-30). No localized files or navigation blocks were modified. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review outcome on docs/capabilities-and-licensing: the capability/ addressability half ships, the licensing half is blocked on Legal and must not ship as canonical. - Rename capabilities-and-licensing.mdx -> capabilities.mdx and update the Get Started nav entry. - Remove the Licensing section, the AGPL obligations note, the licence-dependent misconception row, and every [LEGAL REVIEW: confirm] placeholder from the published page. Nothing in the shipped page now depends on an unresolved licence fact. - Preserve the removed draft verbatim at drafts/licensing-DRAFT.md — a plain .md file in a non-navigated directory, so Mintlify does not build it as a page (same pattern as reconciliation/INITIAL_DRIFT_REPORT.md). It carries the blockers and the proposed Core PR for Legal to pick up. - Opening paragraph no longer claims all SDKs are MIT. That claim is contradicted by apps/python-sdk/setup.py:67 (GPLv3) and by five SDKs that ship no LICENSE file at all. - Add an Availability column (Cloud / self-hosted) to a new capabilities-at-a-glance table, plus an inline availability line on each capability section. Agent, Browser and Interact are Cloud-delivered per contributing/open-source-or-cloud.mdx:30 and contributing/self-host.mdx:180; screenshots and page actions likewise; structured JSON extraction needs an OpenAI-compatible provider or Ollama when self-hosted. - Search: the first-screen sentence and the section heading now state the real contract — titles, descriptions and URLs by default, full page content when scrapeOptions is supplied (features/search.mdx:32). - Self-host snippet is runnable: adds `cd firecrawl` and the pinned `git checkout v2.11.162`, and points at the required .env step rather than implying `docker compose up` is the next command (contributing/self-host.mdx:66-89). - Fix the anchor introduced with the OB-03 opener: the live slug is #persistent-profiles-with-scrape-+-interact, not the double-dash form. The OB-03 fix is kept intact: features/browser is addressable in nav, the API-reference group is renamed to Interact / Browser Sandbox Endpoints, and features/interact.mdx opens with jobs-to-be-done. Deep Insights: F5 (capability claims not addressable from a canonical page), OB-03 (Browser Sandbox unreachable from navigation).
Review found the D2 blocker: Mintlify routes unnavigated .md files as live public pages (docs.firecrawl.dev/reconciliation/INITIAL_DRIFT_REPORT -> 200), so drafts/licensing-DRAFT.md, absent only from docs.json nav, would have deployed at /drafts/licensing-DRAFT with its own first line reading "DO NOT PUBLISH". - git rm drafts/licensing-DRAFT.md. Checked for a genuinely non-deployed location: docs.json has no ignore/exclude key of any kind, and the root README.md's 404 is Mintlify special-casing that literal filename, not a property of being unnavigated -- there is no second README.md in the tree to confirm it generalizes to a subdirectory. No provably unrouted location exists in this repo, so the draft is kept out entirely rather than relocated in-repo. - Preserved the draft's full content (licence table, AGPL note, removed misconception row, "what must not be said" list, proposed Core PR) in the review report at scratchpad/product-prs/D2-capabilities-licensing-v2.md under "Licensing draft (for Legal; not in repo)". - Grepped the branch diff (git diff --name-status origin/main...HEAD): the only other added file is capabilities.mdx, which is navigated in docs.json. No other unnavigated content added. - docs.json parses; mint broken-links (Node 22.23.2): 208/95 files, byte-identical to origin/main baseline, neither touched file appears; mint validate: same pre-existing 17 warnings, none on touched files.
The capabilities page is the canonical answer to what Firecrawl can do, and its table lists SDKs, Interact, Browser Sandbox, JavaScript rendering, Parse, Search, structured extraction, screenshots, and self-hosting. It omits Monitor, which ships eight public v2 routes, eight MCP tools, a CLI verb, and four docs pages in five languages. Deep Insights DI-2026-09-04-WEEKLY, finding OB-04-MONITORING-CATEGORY-FILING: 27 of 28 monitoring answers name a competitor and never mention Firecrawl. The report's stated cause is wrong, since the category pages exist, but a scope-statement surface that leaves Monitor out is a real instance of the same shape. `posts/firecrawl-101.mdx` in firecrawl-web has the matching omission; that one is a positioning call and stays out of this change. One row, in the table's existing format, pointing at [Monitoring](/features/monitoring). The row states Cloud and self-hosted because Monitor registers on the core v2 routes with no deployment gate, and it names the LLM-provider requirement for meaningful-change judging the way the structured-extraction row does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
hmishra2250
force-pushed
the
docs/fix-samples-dead-paths-and-crawler-guidance
branch
from
September 6, 2026 23:30
57296ec to
32f8ac9
Compare
hmishra2250
changed the base branch from
main
to
docs/capabilities-and-licensing
September 6, 2026 23:30
This was referenced Sep 6, 2026
The table had one Availability column, so a reader could not tell whether a capability has an MCP tool, how long its session lasts, whether the endpoint takes a keyless request, or whether they need credentials for the site they are reading. Those answers do not track deployment. Replaces Availability with Deployment, MCP tool, Session lifetime, API auth and Target credentials, and adds a short list above the table saying what each column means. Every cell is read off origin/main. MCP tool names come from firecrawl-mcp-server src/index.ts and src/monitor.ts. Session bounds come from apps/api/src/controllers/v2/browser.ts:44-45 and scrape-browser.ts:74-75 for sessions and types.ts:797,871-897 for the scrape timeout. Keyless versus key-required comes from the allowKeyless option on each route in apps/api/src/routes/v2.ts, with the middleware default at routes/shared.ts:245-253. Target credentials come from the profile field in browser.ts:50-54 and scrape-browser.ts:79-82. Two cells say the capability has no MCP tool rather than guessing: the standalone Browser Sandbox, because the MCP interact tools act on a scrape and no browser tool is registered, and self-hosting, which is a deployment rather than an endpoint. Finding: DI-2026-09-05-WEEKLY Astra OB-04, reconciled plan item 9. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The interact page ships curl samples that use $SCRAPE_ID in the request path but never set it. Copied on their own they send a literal "$SCRAPE_ID" to the API, which answers "Cannot GET /v2/scrape/$SCRAPE_ID/interact" with no error code and no docs link. Deep Insights report DI-2026-09-05-WEEKLY records that exact string as a retrieved page body, so agents are dereferencing the placeholder. Each standalone curl sample now scrapes first and reads data.metadata.scrapeId into SCRAPE_ID, matching the pattern the quickstart and profile samples on the same page already use. The stop sample keeps a single DELETE call and states in a comment where SCRAPE_ID comes from. Localized copies under snippets/es, fr, ja, pt-BR and zh are generated by gtx-cli and are not edited here. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The developer-guides/common-sites tree (amazon, etsy, github, wikipedia) was removed on purpose in 2ed95d9 "rm-common-sites" and nothing was left behind, so those URLs still return 404. Checked on 2026-09-06: docs.firecrawl.dev/developer-guides/common-sites/amazon, /developer-guides/common-sites/linkedin and the bare /developer-guides/common-sites all return 404. Deep Insights report DI-2026-09-05-WEEKLY reports the Amazon guide as a 404 an agent hit. All four pages taught the same thing applied to one site: scrape with JSON mode, search, scrape, map, crawl, batch scrape. The closest current page is /features/scrape, so all five sources point there. gt-lock.json still carries five translation records per removed page. That file is generated by gtx-cli from gt.config.json, so it is not hand-edited here and will settle on the next translation run. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
Deep Insights report DI-2026-09-04-WEEKLY, finding OB-04, notes that a reader arriving on the monitoring pages cannot reach the two facts they need next. features/monitoring.mdx answered six of seven questions a monitoring reader asks but not webhook retry, which lives in webhooks/overview.mdx lines 50 to 62, and the monitoring page had no link to it. The notifications section now states the 10 second timeout and the three retries at 1, 5, and 15 minutes, and links to /webhooks/overview#timeouts--retries. features/change-tracking.mdx had zero links to /features/monitoring even though monitoring is the scheduled product built on it. It now says so in the lead-in and again in the scheduling section, where the page otherwise sends readers straight to cron. features/monitoring.mdx links back from its own change tracking section. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The advanced scraping guide told site operators to allow FirecrawlAgent in their firewall or security rules. Firecrawl does not send that token in the User-Agent header of its page requests, so a firewall or WAF rule matching it never matches Firecrawl traffic. FirecrawlAgent is the token Firecrawl matches robots.txt rules against when it crawls a site, which is what the section now says. Verified on firecrawl origin/main: apps/api/src/lib/robots-txt.ts:140 passes ["FireCrawlAgent", "FirecrawlAgent"] to the robots parser, and no core fetch path sets a default User-Agent. Verified live on 2026-09-06: a scrape of https://httpbin.org/headers through api.firecrawl.dev returned User-Agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36" and no Signature headers. Finding OB-06 in report DI-2026-09-05-WEEKLY (Astra edition, run 34015460876). Only the English source file changes here; the localized copies are generated separately. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The Monitor page listed six check statuses and said nothing about what happens when a check cannot run, whether there is a failure count to read, or when Firecrawl stops a schedule on its own. Readers had to guess all three. Three corrections, all read off firecrawl origin/main. `skipped_no_credits` is a real seventh status. It is written at apps/api/src/services/monitoring/runner.ts:1033 and typed at services/monitoring/types.ts:277-288 and :342-349, and both SDKs declare it (apps/js-sdk/firecrawl/src/v2/types.ts:1185-1195, apps/python-sdk/firecrawl/v2/types.py:1356). The docs status list and the two status enums in api-reference/v2-openapi.json omitted it, so the page and the API reference both under-reported the set. Adds it to all three and says the set is complete. There is no aggregate failure counter, and now the page says so. store.ts:849-853 derives the credit-skip streak by query and gives the reason: "Derived rather than counted: a stored counter would be a second source of truth to keep correct across retries." No failure count, error rate or consecutive-skip field appears on the Monitor or MonitorCheck schema in api-reference/v2-openapi.json. The page now names the fields that are returned and shows how to derive a streak from the checks list, which is ordered newest first. Auto-pause exists, so the page describes it rather than denying it. runner.ts:1047-1058 calls pauseMonitor (store.ts:883-901) when the credit lock is denied with reason job_revoked and the leading run of credit-skipped checks has reached three. The reason comes from the partner gate, not from the team's own balance (services/autumn/types.ts:59-67), so an ordinary team out of credits is never paused. The page states the partner-revocation rule, states that running out of credits does not pause a schedule, and says the pause is a status change with no webhook or email behind it. Setting status back to active is already in the MonitorUpdateRequest enum. Finding: DI-2026-09-05-WEEKLY IP-D5, reconciled plan item 11. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
hmishra2250
force-pushed
the
docs/fix-samples-dead-paths-and-crawler-guidance
branch
from
September 7, 2026 08:38
32f8ac9 to
9d0b60e
Compare
The user-agent bullet asserted that Firecrawl never sends FirecrawlAgent in the User-Agent header of its page requests. The code evidence we have does not support a universal absence claim. It shows only that the token is used for robots.txt rule matching, in apps/api/src/lib/robots-txt.ts:143 on firecrawl origin/main: userAgents: string[] = ["FireCrawlAgent", "FirecrawlAgent"], That default is passed to isUrlAllowedByRobots and reaches the robots parser. It does not establish the outbound identity of every managed request, so the bullet now states the actionable distinction instead: FirecrawlAgent is the token Firecrawl matches against in robots.txt, it should not be assumed to be the User-Agent header on the fetch, and site operators should allow-list by robots directive rather than by User-Agent string. The corrected robots.txt bullet above it is unchanged. Narrowing recommended by external review of PR #1369 and accepted by the orchestrator on 2026-09-07. Only the English source file changes here. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
hmishra2250
changed the base branch from
docs/capabilities-and-licensing
to
main
September 8, 2026 06:34
…-paths-and-crawler-guidance # Conflicts: # capabilities.mdx
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stack
These three PRs all edit the same navigation lines in
docs.json, so they are stacked in this order:main. Addsfeatures/browserto the Features nav.docs/add-browser-to-navigation. Depends on docs: add Browser Sandbox page to navigation #1286. Groupsfeatures/browserwithfeatures/interactso the page appears exactly once.docs/capabilities-and-licensing. Depends on Scope the capabilities page and add Cloud availability per row #1364.This PR's own
docs.jsonchange is the five common-sites redirects, which sit in a different block from the nav edits above and merge cleanly on top of them.Review and merge bottom up. Retarget to
mainafter the parent merges; the diff then shrinks to this PR's own changes.Summary
Four small docs defects that agents and site operators hit on the live site. A copyable interact sample sends an undefined shell variable to the API, the retired common-sites guides still 404, the monitoring pages do not link the two facts a monitoring reader needs next, and the advanced scraping guide tells operators to allowlist a user agent Firecrawl does not send.
Why
Interact samples. Deep Insights report DI-2026-09-05-WEEKLY records the retrieved body
Cannot GET /v2/scrape/$SCRAPE_ID/interact(sourcepage:ee2fc1b4..., SHA-256d9144198...), and names it "a path shaped exactly like an unresolved '$SCRAPE_ID' placeholder from the interact docs". On main, six of the eight curl samples onfeatures/interact.mdxuse$SCRAPE_IDin the request path and never set it, while the quickstart and profile samples on the same page do set it. Each sample has its own copy button, so the six ship a variable that expands to nothing.Common sites. The same report notes the Amazon common-sites guide 404s. That tree was deleted on purpose in
2ed95d92"rm-common-sites" on 2026-08-04 and nothing was left behind. The commit removed four pages: amazon, etsy, github and wikipedia. Checked live on 2026-09-06: all four paths under/developer-guides/common-sites/and the bare/developer-guides/common-sitesreturn 404.Monitoring cross-links. Report DI-2026-09-04-WEEKLY, finding OB-04, found that
features/monitoring.mdxanswers six of the seven questions a monitoring reader asks. The seventh, webhook retry, lives inwebhooks/overview.mdxlines 50 to 62, and the monitoring page had no link to it. Separately,features/change-tracking.mdxhad zero links to/features/monitoring, so the page an agent actually retrieves dead-ends with respect to the scheduled product built on it.Crawler access guidance. Finding OB-06 in report DI-2026-09-05-WEEKLY, Astra edition, run 34015460876, flagged
advanced-scraping-guide.mdx:667:Product truth on
firecrawlmain:apps/api/src/lib/robots-txt.ts:140passes["FireCrawlAgent", "FirecrawlAgent"]to the robots parser, so the token decides which robots.txt block applies and is never written into an outgoing header.apps/api/src/scraper/scrapeURL/engines/fetch/index.ts:170forwardsmeta.options.headersonly, and no core fetch path sets a defaultUser-Agent.apps/api/src/scraper/WebScraper/crawler.ts:523runs the robots check on crawl. Live on 2026-09-06, a scrape ofhttps://httpbin.org/headersthroughapi.firecrawl.devon default settings returned:Repeating with
proxy: basicand no cache gave the same result. An operator who follows the current instruction gets a rule that never fires. The same behavior is reported from outside in firecrawl/firecrawl#1169.Changes
snippets/v2/interact/{prompt,execute-python,execute-node,execute-bash}/*curl*.mdx: each standalone curl sample now scrapes first and readsdata.metadata.scrapeIdintoSCRAPE_ID, matching the quickstart and profile samples.snippets/v2/interact/stop/curl.mdxkeeps its single DELETE call and states in a comment whereSCRAPE_IDcomes from.docs.json: five redirects sending/developer-guides/common-sitesand its four removed pages to/features/scrape, the closest current page. All four taught the same thing applied to one site: scrape with JSON mode, search, scrape, map, crawl, batch scrape.features/monitoring.mdx: the notifications section states the 10 second timeout and the three retries at 1, 5, and 15 minutes and links/webhooks/overview#timeouts--retries. Its change tracking section links/features/change-tracking.features/change-tracking.mdx: links/features/monitoringin the lead-in and again in the scheduling section.advanced-scraping-guide.mdx, one section, three bullets: a newrobots.txtbullet stating that Firecrawl reads robots.txt before crawling and applies rules written forFirecrawlAgentand for*; theUser Agentbullet now says Firecrawl does not sendFirecrawlAgentin theUser-Agentheader of its page requests, so firewall and WAF rules matching that token will not match Firecrawl traffic; the IP addresses bullet is unchanged.gt-lock.jsonstill carries five stale translation records for each removed common-sites page. That file is generated by gtx-cli fromgt.config.json, so it is not hand-edited here and will settle on the next translation run. Localized copies of the interact snippets and of the crawler-access section are generated the same way and are also left alone, perCLAUDE.md.Verification
mintlify broken-links(Mintlify CLI 4.2.773, Node 22.23.2): 208 broken links, byte-identical to the same run on a cleanorigin/mainworktree. None in the changed files.mintlify validate: 17 warnings, all missing snippet imports, byte-identical to the same run onorigin/main.Signature-Agent,Signature-Input,web-bot-auth,RFC 9421,ed25519andhttp-message-signaturesacross firecrawl, firecrawl-docs, firecrawl-web and firecrawl-mcp-server onmain: no matches. Nothing in the change assumes request signing that does not exist.git diff --name-only origin/main...HEADlists 11 files, all docs content.Not in this PR
Shipping an identifiable user agent, publishing an outbound IP list, and applying for Cloudflare bot verification are product decisions, not docs edits. PR firecrawl/firecrawl#2766 attempted the first and was closed unmerged on 2026-03-04.
Added 2026-09-07
The Monitor operating contract is now on the page.
features/monitoring.mdxlisted six check statuses and answered none of the three questions an operator asks next: what happens when a check cannot run, whether there is a failure count to read, and whether Firecrawl ever stops a schedule by itself. A new "Skipped checks and paused monitors" section answers all three, and one existing line is corrected. Reference: Deep Insights DI-2026-09-05-WEEKLY, path IP-D5.skipped_no_creditswas missing from the status set. The page said checks can be filtered byqueued,running,completed,failed,partial, orskipped_overlap. The status exists and is written atapps/api/src/services/monitoring/runner.ts:1033, typed atapps/api/src/services/monitoring/types.ts:277-288and:342-349, and declared in both SDKs atapps/js-sdk/firecrawl/src/v2/types.ts:1185-1195andapps/python-sdk/firecrawl/v2/types.py:1356. The twostatusenums inapi-reference/v2-openapi.jsonomitted it too, at the checks-list query parameter and on theMonitorCheckschema, so the API reference under-reported the set as well. Both enums and the prose line now carry it, and the prose says the set of seven is complete.There is no aggregate failure counter, and stating that is safe.
apps/api/src/services/monitoring/store.ts:849-853derives the credit-skip streak by query and says why: "Derived rather than counted: a stored counter would be a second source of truth to keep correct across retries." No failure count, error rate or consecutive-skip field appears on either theMonitoror theMonitorCheckschema inapi-reference/v2-openapi.json. The page now names what a monitor does return,status,nextRunAt,lastRunAt,currentCheckIdandlastCheckSummary, and shows how to derive a streak from the checks list, which is returned newest first.Auto-pause exists, so the page describes it instead of denying its absence.
apps/api/src/services/monitoring/runner.ts:1047-1058callspauseMonitor(store.ts:883-901) when the credit lock is denied with reasonjob_revokedand the leading run of credit-skipped checks has reached three. That reason comes from the partner gate rather than from the team's own balance, per the comment atapps/api/src/services/autumn/types.ts:59-67: "job_revoked is the only one that never resolves on its own, and so the only one a caller may answer by stopping a schedule." So the page states the partner-revocation rule, states explicitly that an ordinary team running out of credits is not paused and keeps recording skipped checks, and notes that the pause is astatuschange with no webhook event and no email behind it. Returning the monitor toactiveis already in theMonitorUpdateRequeststatusenum.Verification on this branch, Node 22.23.2:
mintlify broken-links: 208 broken-link entries across 95 files, identical to the same run on a detached worktree at this branch's previous head32f8ac97. None infeatures/monitoring.mdx.mintlify validate: 17 warnings, the same count as the detached baseline.api-reference/v2-openapi.jsonparses after the edit.Rebase note
This branch was rebased onto the new head of its base branch
docs/capabilities-and-licensing(93dc8d5e), which gained one commit on #1364 the same day. The rebase was clean and no earlier commit changed.Added 2026-09-07
Narrowed the user-agent bullet in
advanced-scraping-guide.mdxafter external review. The bullet previously said Firecrawl does not sendFirecrawlAgentin theUser-Agentheader of its page requests. The code evidence supports only that the token is used for robots.txt rule matching, atapps/api/src/lib/robots-txt.ts:143on firecrawl origin/main:userAgents: string[] = ["FireCrawlAgent", "FirecrawlAgent"],. That default does not establish the outbound identity of every managed request, so a universal absence claim is wider than the evidence. The bullet now gives the actionable distinction instead:FirecrawlAgentis the token Firecrawl matches against in robots.txt, do not assume it is theUser-Agentheader on the fetch, and allow-list by robots directive rather than by User-Agent string. The corrected robots.txt bullet is unchanged.mintlify broken-linkson Node 22.23.2 is identical to a detached worktree at the previous head9d0b60e2.🤖 Generated with Claude Code
https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS