curl --request POST \
--url https://api.aisa.one/apis/v1/firecrawl/batch-scrape \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"urls": [
"https://docs.firecrawl.dev",
"https://docs.firecrawl.dev/introduction"
],
"maxConcurrency": 10,
"onlyMainContent": true,
"includeTags": [
"<string>"
],
"excludeTags": [
"<string>"
],
"maxAge": 15768000000,
"minAge": 15768000000,
"timeout": 150500
}
'import requests
url = "https://api.aisa.one/apis/v1/firecrawl/batch-scrape"
payload = {
"urls": ["https://docs.firecrawl.dev", "https://docs.firecrawl.dev/introduction"],
"maxConcurrency": 10,
"onlyMainContent": True,
"includeTags": ["<string>"],
"excludeTags": ["<string>"],
"maxAge": 15768000000,
"minAge": 15768000000,
"timeout": 150500
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
urls: ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/introduction'],
maxConcurrency: 10,
onlyMainContent: true,
includeTags: ['<string>'],
excludeTags: ['<string>'],
maxAge: 15768000000,
minAge: 15768000000,
timeout: 150500
})
};
fetch('https://api.aisa.one/apis/v1/firecrawl/batch-scrape', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/firecrawl/batch-scrape",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'urls' => [
'https://docs.firecrawl.dev',
'https://docs.firecrawl.dev/introduction'
],
'maxConcurrency' => 10,
'onlyMainContent' => true,
'includeTags' => [
'<string>'
],
'excludeTags' => [
'<string>'
],
'maxAge' => 15768000000,
'minAge' => 15768000000,
'timeout' => 150500
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/firecrawl/batch-scrape"
payload := strings.NewReader("{\n \"urls\": [\n \"https://docs.firecrawl.dev\",\n \"https://docs.firecrawl.dev/introduction\"\n ],\n \"maxConcurrency\": 10,\n \"onlyMainContent\": true,\n \"includeTags\": [\n \"<string>\"\n ],\n \"excludeTags\": [\n \"<string>\"\n ],\n \"maxAge\": 15768000000,\n \"minAge\": 15768000000,\n \"timeout\": 150500\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/firecrawl/batch-scrape")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"urls\": [\n \"https://docs.firecrawl.dev\",\n \"https://docs.firecrawl.dev/introduction\"\n ],\n \"maxConcurrency\": 10,\n \"onlyMainContent\": true,\n \"includeTags\": [\n \"<string>\"\n ],\n \"excludeTags\": [\n \"<string>\"\n ],\n \"maxAge\": 15768000000,\n \"minAge\": 15768000000,\n \"timeout\": 150500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/firecrawl/batch-scrape")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"urls\": [\n \"https://docs.firecrawl.dev\",\n \"https://docs.firecrawl.dev/introduction\"\n ],\n \"maxConcurrency\": 10,\n \"onlyMainContent\": true,\n \"includeTags\": [\n \"<string>\"\n ],\n \"excludeTags\": [\n \"<string>\"\n ],\n \"maxAge\": 15768000000,\n \"minAge\": 15768000000,\n \"timeout\": 150500\n}"
response = http.request(request)
puts response.read_body{
"id": "iaj_01HZY8Q2M4K7N9V3T6W1X0B2C3",
"object": "integration_async_job",
"endpoint": "/apis/v1/firecrawl/crawl",
"status": "queued",
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"pricing": {
"currency": "USD",
"authorizedMicrosUSD": 123,
"finalMicrosUSD": 123,
"billingMode": "metered_result"
},
"output": "<unknown>",
"outputExpired": true,
"error": {
"code": "<string>",
"message": "<string>"
}
}Firecrawl Batch Scrape
Scrape many URLs as one background job.
curl --request POST \
--url https://api.aisa.one/apis/v1/firecrawl/batch-scrape \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"urls": [
"https://docs.firecrawl.dev",
"https://docs.firecrawl.dev/introduction"
],
"maxConcurrency": 10,
"onlyMainContent": true,
"includeTags": [
"<string>"
],
"excludeTags": [
"<string>"
],
"maxAge": 15768000000,
"minAge": 15768000000,
"timeout": 150500
}
'import requests
url = "https://api.aisa.one/apis/v1/firecrawl/batch-scrape"
payload = {
"urls": ["https://docs.firecrawl.dev", "https://docs.firecrawl.dev/introduction"],
"maxConcurrency": 10,
"onlyMainContent": True,
"includeTags": ["<string>"],
"excludeTags": ["<string>"],
"maxAge": 15768000000,
"minAge": 15768000000,
"timeout": 150500
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
urls: ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/introduction'],
maxConcurrency: 10,
onlyMainContent: true,
includeTags: ['<string>'],
excludeTags: ['<string>'],
maxAge: 15768000000,
minAge: 15768000000,
timeout: 150500
})
};
fetch('https://api.aisa.one/apis/v1/firecrawl/batch-scrape', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/firecrawl/batch-scrape",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'urls' => [
'https://docs.firecrawl.dev',
'https://docs.firecrawl.dev/introduction'
],
'maxConcurrency' => 10,
'onlyMainContent' => true,
'includeTags' => [
'<string>'
],
'excludeTags' => [
'<string>'
],
'maxAge' => 15768000000,
'minAge' => 15768000000,
'timeout' => 150500
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/firecrawl/batch-scrape"
payload := strings.NewReader("{\n \"urls\": [\n \"https://docs.firecrawl.dev\",\n \"https://docs.firecrawl.dev/introduction\"\n ],\n \"maxConcurrency\": 10,\n \"onlyMainContent\": true,\n \"includeTags\": [\n \"<string>\"\n ],\n \"excludeTags\": [\n \"<string>\"\n ],\n \"maxAge\": 15768000000,\n \"minAge\": 15768000000,\n \"timeout\": 150500\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aisa.one/apis/v1/firecrawl/batch-scrape")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"urls\": [\n \"https://docs.firecrawl.dev\",\n \"https://docs.firecrawl.dev/introduction\"\n ],\n \"maxConcurrency\": 10,\n \"onlyMainContent\": true,\n \"includeTags\": [\n \"<string>\"\n ],\n \"excludeTags\": [\n \"<string>\"\n ],\n \"maxAge\": 15768000000,\n \"minAge\": 15768000000,\n \"timeout\": 150500\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/firecrawl/batch-scrape")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"urls\": [\n \"https://docs.firecrawl.dev\",\n \"https://docs.firecrawl.dev/introduction\"\n ],\n \"maxConcurrency\": 10,\n \"onlyMainContent\": true,\n \"includeTags\": [\n \"<string>\"\n ],\n \"excludeTags\": [\n \"<string>\"\n ],\n \"maxAge\": 15768000000,\n \"minAge\": 15768000000,\n \"timeout\": 150500\n}"
response = http.request(request)
puts response.read_body{
"id": "iaj_01HZY8Q2M4K7N9V3T6W1X0B2C3",
"object": "integration_async_job",
"endpoint": "/apis/v1/firecrawl/crawl",
"status": "queued",
"createdAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"pricing": {
"currency": "USD",
"authorizedMicrosUSD": 123,
"finalMicrosUSD": 123,
"billingMode": "metered_result"
},
"output": "<unknown>",
"outputExpired": true,
"error": {
"code": "<string>",
"message": "<string>"
}
}urls and an Idempotency-Key are required; maxConcurrency, onlyMainContent, includeTags, excludeTags, maxAge, minAge and timeout tune it. 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_batch_scrape_job until terminal; output is then an array of documents with markdown and metadata. Use it when you have a list of URLs and do not need them immediately. When you do need them immediately, post_tavily_extract returns a small batch synchronously in about a second; for a single page post_firecrawl_scrape. Send a fresh Idempotency-Key per distinct batch.
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.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Unique key (1 to 191 characters) that makes the submit idempotent. Re-submitting with the same key returns the original job.
191Body
1 to 1000 unique HTTPS URLs to scrape. PDF URLs are not supported.
1 - 1000 elements[
"https://docs.firecrawl.dev",
"https://docs.firecrawl.dev/introduction"
]
Maximum number of concurrent scrapes (1 to 20).
1 <= x <= 20Return only the main content of each page.
HTML tags/selectors to keep.
50128HTML tags/selectors to drop.
50128Maximum acceptable cache age in milliseconds.
0 <= x <= 31536000000Minimum cache age in milliseconds before a page is refetched.
0 <= x <= 31536000000Per-page timeout in milliseconds.
1000 <= x <= 300000Response
Batch scrape 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).
Unique AIsa job identifier. Use it to poll, list, or cancel the job.
"iaj_01HZY8Q2M4K7N9V3T6W1X0B2C3"
Always "integration_async_job".
"integration_async_job"
The submit endpoint this job belongs to.
"/apis/v1/firecrawl/crawl"
Customer-facing lifecycle status. queued and running are non-terminal; completed, failed, and cancelled are terminal.
queued, running, completed, failed, cancelled When the job was accepted.
When the job reached a terminal status. Null while the job is still queued or running.
Show child attributes
Show child attributes
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.
True when the result has been retained past its retention window and is no longer retrievable.
Present when status is failed. Null otherwise.
Show child attributes
Show child attributes