Gotchas
The formats field lives under scrapeOptions.formats, not at the top level, and defaults to ["markdown"] when scrapeOptions is omitted. Set scrapeOptions.formats explicitly (e.g. ["markdown","html"]) to get HTML in results.
POST /crawl is asynchronous and returns a job id immediately. Poll [GET /crawl/{id}](/firecrawl/get-crawl-status) until status is completed (or failed); data holds the pages scraped so far and next links to the next page of results while the crawl keeps running.