Skip to main content
POST
Submit an asynchronous crawl job.
Crawl a whole site rooted at url and return the content of every page it keeps. url, limit and an Idempotency-Key are required; steer it with includePaths, excludePaths, maxDiscoveryDepth, crawlEntireDomain, allowSubdomains, delay and maxConcurrency. Asynchronous. Submitting returns HTTP 202 and a job envelope — id, object, endpoint, status, createdAt, completedAt, pricing, output, error — with output still null. Poll get_firecrawl_crawl_job until status is completed, failed or cancelled; output is then an array of pages, each with markdown and metadata. A 3-page crawl measured 43 KB and finished in under a minute, and pricing.billingMode is metered_result, so cost scales with what it finds — set limit. Send a fresh Idempotency-Key per distinct crawl; reusing one returns the earlier job instead of starting a new one. For a handful of known URLs post_firecrawl_batch_scrape is cheaper, and for structure alone post_firecrawl_map costs far less.
First time? Point any MCP client at https://mcp.aisa.one/mcp — Claude Code, Codex, Cursor, VS Code and the rest. Authorization is OAuth: the client opens a browser, you click Allow once, and there is no key to paste. The commands per client, and what each call costs, are on aisa.one/mcp.
Set this endpoint up in your agent →

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

Idempotency-Key
string
required

Unique key (1 to 191 characters) that makes the submit idempotent. Re-submitting with the same key returns the original job.

Maximum string length: 191

Body

application/json
url
string<uri>
required

The HTTPS root URL to crawl. PDF URLs are not supported.

Example:

"https://docs.firecrawl.dev"

limit
integer
required

Maximum number of pages to crawl.

Required range: 1 <= x <= 1000
Example:

50

includePaths
string[]

Only crawl URLs whose path matches one of these patterns.

Maximum array length: 20
Maximum string length: 256
excludePaths
string[]

Skip URLs whose path matches one of these patterns.

Maximum array length: 20
Maximum string length: 256
maxDiscoveryDepth
integer

Maximum link-discovery depth from the root URL.

Required range: 0 <= x <= 10
sitemap
enum<string>

How the site's sitemap is used during discovery.

Available options:
skip,
include,
only
ignoreQueryParameters
boolean

Treat URLs that differ only by query string as the same page.

crawlEntireDomain
boolean

Crawl the whole domain rather than only the subtree under the root URL.

Follow links to external domains.

allowSubdomains
boolean

Follow links into subdomains of the root domain.

delay
number

Delay in seconds between requests (0 to 30).

Required range: 0 <= x <= 30
maxConcurrency
integer

Maximum number of concurrent page fetches (1 to 20).

Required range: 1 <= x <= 20
scrapeOptions
object

Per-page scrape options applied while crawling. On the metered profile output is always markdown.

Response

202 - application/json

Crawl job accepted. The Location header points at the job resource; poll it until terminal.

An asynchronous integration job. Returned by the submit call (HTTP 202) and by the poll/detail call. Poll the job by its id until status is a terminal value (completed, failed, or cancelled).

id
string

Unique AIsa job identifier. Use it to poll, list, or cancel the job.

Example:

"iaj_01HZY8Q2M4K7N9V3T6W1X0B2C3"

object
string

Always "integration_async_job".

Example:

"integration_async_job"

endpoint
string

The submit endpoint this job belongs to.

Example:

"/apis/v1/firecrawl/crawl"

status
enum<string>

Customer-facing lifecycle status. queued and running are non-terminal; completed, failed, and cancelled are terminal.

Available options:
queued,
running,
completed,
failed,
cancelled
createdAt
string<date-time>

When the job was accepted.

completedAt
string<date-time> | null

When the job reached a terminal status. Null while the job is still queued or running.

pricing
object
output
any | null

Job result payload. Present only once status is completed. For crawl this is the array of scraped pages; for batch scrape it is the array of scraped documents.

outputExpired
boolean

True when the result has been retained past its retention window and is no longer retrievable.

error
object | null

Present when status is failed. Null otherwise.