"description":"Should the screenshot be full-page or viewport sized?",
"default":false
}
},
"required":["type"]
},
{
"type":"object",
"title":"Click",
"properties":{
"type":{
"type":"string",
"enum":["click"],
"description":"Click on an element"
},
"selector":{
"type":"string",
"description":"Query selector to find the element by",
"example":"#load-more-button"
}
},
"required":["type","selector"]
},
{
"type":"object",
"title":"Write text",
"properties":{
"type":{
"type":"string",
"enum":["write"],
"description":"Write text into an input field, text area, or contenteditable element. Note: You must first focus the element using a 'click' action before writing. The text will be typed character by character to simulate keyboard input."
},
"text":{
"type":"string",
"description":"Text to type",
"example":"Hello, world!"
}
},
"required":["type","text"]
},
{
"type":"object",
"title":"Press a key",
"description":"Press a key on the page. See https://asawicki.info/nosense/doc/devices/keyboard/key_codes.html for key codes.",
"properties":{
"type":{
"type":"string",
"enum":["press"],
"description":"Press a key on the page"
},
"key":{
"type":"string",
"description":"Key to press",
"example":"Enter"
}
},
"required":["type","key"]
},
{
"type":"object",
"title":"Scroll",
"properties":{
"type":{
"type":"string",
"enum":["scroll"],
"description":"Scroll the page or a specific element"
},
"direction":{
"type":"string",
"enum":["up","down"],
"description":"Direction to scroll",
"default":"down"
},
"selector":{
"type":"string",
"description":"Query selector for the element to scroll",
"example":"#my-element"
}
},
"required":["type"]
},
{
"type":"object",
"title":"Scrape",
"properties":{
"type":{
"type":"string",
"enum":["scrape"],
"description":"Scrape the current page content, returns the url and the html."
}
},
"required":["type"]
},
{
"type":"object",
"title":"Execute JavaScript",
"properties":{
"type":{
"type":"string",
"enum":["executeJavascript"],
"description":"Execute JavaScript code on the page"
"description":"Location settings for the request. When specified, this will use an appropriate proxy if available and emulate the corresponding language and timezone settings. Defaults to 'US' if not specified.",
"properties":{
"country":{
"type":"string",
"description":"ISO 3166-1 alpha-2 country code (e.g., 'US', 'AU', 'DE', 'JP')",
"pattern":"^[A-Z]{2}$",
"default":"US"
},
"languages":{
"type":"array",
"description":"Preferred languages and locales for the request in order of priority. Defaults to the language of the specified location. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language",
"items":{
"type":"string",
"example":"en-US"
}
}
}
},
"removeBase64Images":{
"type":"boolean",
"description":"Removes all base 64 images from the output, which may be overwhelmingly long. The image's alt text remains in the output, but the URL is replaced with a placeholder."
}
},
"required":["url"]
}
}
}
},
"responses":{
"200":{
"description":"Successful response",
"content":{
"application/json":{
"schema":{
"$ref":"#/components/schemas/ScrapeResponse"
}
}
}
},
"402":{
"description":"Payment required",
"content":{
"application/json":{
"schema":{
"type":"object",
"properties":{
"error":{
"type":"string",
"example":"Payment required to access this resource."
}
}
}
}
}
},
"429":{
"description":"Too many requests",
"content":{
"application/json":{
"schema":{
"type":"object",
"properties":{
"error":{
"type":"string",
"example":"Request rate limit exceeded. Please wait and try again later."
}
}
}
}
}
},
"500":{
"description":"Server error",
"content":{
"application/json":{
"schema":{
"type":"object",
"properties":{
"error":{
"type":"string",
"example":"An unexpected error occurred on the server."
}
}
}
}
}
}
}
}
},
"/batch/scrape":{
"post":{
"summary":"Scrape multiple URLs and optionally extract information using an LLM",
"operationId":"scrapeAndExtractFromUrls",
"tags":["Scraping"],
"security":[
{
"bearerAuth":[]
}
],
"requestBody":{
"required":true,
"content":{
"application/json":{
"schema":{
"type":"object",
"properties":{
"urls":{
"type":"array",
"items":{
"type":"string",
"format":"uri",
"description":"The URL to scrape"
}
},
"webhook":{
"oneOf":[
{
"type":"string",
"description":"The URL to send the webhook to. This will trigger for batch scrape started (batch_scrape.started), every page scraped (batch_scrape.page) and when the batch scrape is completed (batch_scrape.completed or batch_scrape.failed). The response will be the same as the `/scrape` endpoint."
"description":"The URL to send the webhook to. This will trigger for batch scrape started (batch_scrape.started), every page scraped (batch_scrape.page) and when the batch scrape is completed (batch_scrape.completed or batch_scrape.failed). The response will be the same as the `/scrape` endpoint."
},
"headers":{
"type":"object",
"description":"Headers to send to the webhook URL.",
"additionalProperties":{
"type":"string"
}
},
"metadata":{
"type":"object",
"description":"Custom metadata that will be included in all webhook payloads for this crawl",
"additionalProperties":true
}
},
"required":["url"]
}
]
},
"formats":{
"type":"array",
"items":{
"type":"string",
"enum":[
"markdown",
"html",
"rawHtml",
"links",
"screenshot",
"extract",
"screenshot@fullPage"
]
},
"description":"Formats to include in the output.",
"default":["markdown"]
},
"onlyMainContent":{
"type":"boolean",
"description":"Only return the main content of the page excluding headers, navs, footers, etc.",
"default":true
},
"includeTags":{
"type":"array",
"items":{
"type":"string"
},
"description":"Tags to include in the output."
},
"excludeTags":{
"type":"array",
"items":{
"type":"string"
},
"description":"Tags to exclude from the output."
},
"headers":{
"type":"object",
"description":"Headers to send with the request. Can be used to send cookies, user-agent, etc."
},
"waitFor":{
"type":"integer",
"description":"Specify a delay in milliseconds before fetching the content, allowing the page sufficient time to load.",
"default":0
},
"mobile":{
"type":"boolean",
"description":"Set to true if you want to emulate scraping from a mobile device. Useful for testing responsive pages and taking mobile screenshots.",
"default":false
},
"skipTlsVerification":{
"type":"boolean",
"description":"Skip TLS certificate verification when making requests",
"default":false
},
"timeout":{
"type":"integer",
"description":"Timeout in milliseconds for the request",
"default":30000
},
"extract":{
"type":"object",
"description":"Extract object",
"properties":{
"schema":{
"type":"object",
"description":"The schema to use for the extraction (Optional)"
},
"systemPrompt":{
"type":"string",
"description":"The system prompt to use for the extraction (Optional)"
},
"prompt":{
"type":"string",
"description":"The prompt to use for the extraction without a schema (Optional)"
}
}
},
"actions":{
"type":"array",
"description":"Actions to perform on the page before grabbing the content",
"items":{
"oneOf":[
{
"type":"object",
"title":"Wait",
"properties":{
"type":{
"type":"string",
"enum":["wait"],
"description":"Wait for a specified amount of milliseconds"
},
"milliseconds":{
"type":"integer",
"minimum":1,
"description":"Number of milliseconds to wait"
},
"selector":{
"type":"string",
"description":"Query selector to find the element by",
"description":"Location settings for the request. When specified, this will use an appropriate proxy if available and emulate the corresponding language and timezone settings. Defaults to 'US' if not specified.",
"properties":{
"country":{
"type":"string",
"description":"ISO 3166-1 alpha-2 country code (e.g., 'US', 'AU', 'DE', 'JP')",
"pattern":"^[A-Z]{2}$",
"default":"US"
},
"languages":{
"type":"array",
"description":"Preferred languages and locales for the request in order of priority. Defaults to the language of the specified location. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language",
"items":{
"type":"string",
"example":"en-US"
}
}
}
},
"removeBase64Images":{
"type":"boolean",
"description":"Removes all base 64 images from the output, which may be overwhelmingly long. The image's alt text remains in the output, but the URL is replaced with a placeholder."
},
"ignoreInvalidURLs":{
"type":"boolean",
"default":false,
"description":"If invalid URLs are specified in the urls array, they will be ignored. Instead of them failing the entire request, a batch scrape using the remaining valid URLs will be created, and the invalid URLs will be returned in the invalidURLs field of the response."
"description":"Specifies URL patterns to exclude from the crawl by comparing website paths against the provided regex patterns. For example, if you set \"excludePaths\": [\"blog/*\"] for the base URL firecrawl.dev, any results matching that pattern will be excluded, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap."
"description":"Specifies URL patterns to include in the crawl by comparing website paths against the provided regex patterns. Only the paths that match the specified patterns will be included in the response. For example, if you set \"includePaths\": [\"blog/*\"] for the base URL firecrawl.dev, only results matching that pattern will be included, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap."
"description":"The URL to send the webhook to. This will trigger for crawl started (crawl.started) ,every page crawled (crawl.page) and when the crawl is completed (crawl.completed or crawl.failed). The response will be the same as the `/scrape` endpoint."
"description":"The URL to send the webhook to. This will trigger for crawl started (crawl.started), every page crawled (crawl.page) and when the crawl is completed (crawl.completed or crawl.failed). The response will be the same as the `/scrape` endpoint."
},
"headers":{
"type":"object",
"description":"Headers to send to the webhook URL.",
"additionalProperties":{
"type":"string"
}
},
"metadata":{
"type":"object",
"description":"Custom metadata that will be included in all webhook payloads for this crawl",
"example":"Payment required to access this resource."
}
}
}
}
}
},
"429":{
"description":"Too many requests",
"content":{
"application/json":{
"schema":{
"type":"object",
"properties":{
"error":{
"type":"string",
"example":"Request rate limit exceeded. Please wait and try again later."
}
}
}
}
}
},
"500":{
"description":"Server error",
"content":{
"application/json":{
"schema":{
"type":"object",
"properties":{
"error":{
"type":"string",
"example":"An unexpected error occurred on the server."
}
}
}
}
}
}
}
}
},
"/map":{
"post":{
"summary":"Map multiple URLs based on options",
"operationId":"mapUrls",
"tags":["Mapping"],
"security":[
{
"bearerAuth":[]
}
],
"requestBody":{
"required":true,
"content":{
"application/json":{
"schema":{
"type":"object",
"properties":{
"url":{
"type":"string",
"format":"uri",
"description":"The base URL to start crawling from"
},
"search":{
"type":"string",
"description":"Search query to use for mapping. During the Alpha phase, the 'smart' part of the search functionality is limited to 1000 search results. However, if map finds more results, there is no limit applied."
},
"ignoreSitemap":{
"type":"boolean",
"description":"Ignore the website sitemap when crawling.",
"default":true
},
"sitemapOnly":{
"type":"boolean",
"description":"Only return links found in the website sitemap",
"default":false
},
"includeSubdomains":{
"type":"boolean",
"description":"Include subdomains of the website",
"default":false
},
"limit":{
"type":"integer",
"description":"Maximum number of links to return",
"description":"If ignoreInvalidURLs is true, this is an array containing the invalid URLs that were specified in the request. If there were no invalid URLs, this will be an empty array. If ignoreInvalidURLs is false, this field will be undefined."