# Fixed reference example. Playground inputs do not update this sample.
curl --request POST \
--url https://api.aisa.one/apis/v1/tavily/crawl \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"url": "docs.tavily.com"
}'curl --request POST \
--url https://api.aisa.one/apis/v1/tavily/crawl \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "docs.tavily.com"
}
'import requests
url = "https://api.aisa.one/apis/v1/tavily/crawl"
payload = { "url": "docs.tavily.com" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: 'docs.tavily.com'})
};
fetch('https://api.aisa.one/apis/v1/tavily/crawl', 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/tavily/crawl",
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([
'url' => 'docs.tavily.com'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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/tavily/crawl"
payload := strings.NewReader("{\n \"url\": \"docs.tavily.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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/tavily/crawl")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"docs.tavily.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/tavily/crawl")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"docs.tavily.com\"\n}"
response = http.request(request)
puts response.read_body{
"base_url": "<string>",
"request_id": "<string>",
"response_time": 123,
"results": [
{
"favicon": "<string>",
"raw_content": "<string>",
"url": "<string>"
}
],
"usage": {
"credits": 123
}
}Start Crawl Process
Walk a site from a root url and return the content of the pages it finds.
# Fixed reference example. Playground inputs do not update this sample.
curl --request POST \
--url https://api.aisa.one/apis/v1/tavily/crawl \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"url": "docs.tavily.com"
}'curl --request POST \
--url https://api.aisa.one/apis/v1/tavily/crawl \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "docs.tavily.com"
}
'import requests
url = "https://api.aisa.one/apis/v1/tavily/crawl"
payload = { "url": "docs.tavily.com" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: 'docs.tavily.com'})
};
fetch('https://api.aisa.one/apis/v1/tavily/crawl', 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/tavily/crawl",
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([
'url' => 'docs.tavily.com'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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/tavily/crawl"
payload := strings.NewReader("{\n \"url\": \"docs.tavily.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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/tavily/crawl")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"docs.tavily.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/tavily/crawl")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"docs.tavily.com\"\n}"
response = http.request(request)
puts response.read_body{
"base_url": "<string>",
"request_id": "<string>",
"response_time": 123,
"results": [
{
"favicon": "<string>",
"raw_content": "<string>",
"url": "<string>"
}
],
"usage": {
"credits": 123
}
}url and return the content of the pages it finds. Steer it with natural-language instructions plus regex path and domain filters, and bound it with max_depth, max_breadth and limit. Returns base_url and results[] with url and raw_content. Measured at about 4.5 seconds for a 3-page limit; cost and time grow with the bounds you set, so set them. Use it for broad coverage of one site — documentation, a catalogue, a competitor’s blog. It answers synchronously, which post_firecrawl_crawl does not: that one runs as a background job and suits crawls too large to wait on. For a handful of known pages post_tavily_extract is far cheaper; to size a site before paying to crawl it, run post_tavily_map first.
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. Your
agent then reaches every endpoint through a few meta tools: search,
list_categories, get_details and batch_quote are free, batch_use is
billed per call. Setup per client is in
Connect via MCP; the live tool list and what each call
costs are on aisa.one/mcp.Request contract
- Method and path: POST /apis/v1/tavily/crawl
- Availability: enabled
- Request URL template: https://api.aisa.one/apis/v1/tavily/crawl
- Runtime facts: ea2301436db90d0b30e55885326cd5057bea93ff7d26d9bced8e1ae7f1911ef4
{
"operationId": "post_tavily_crawl",
"method": "POST",
"path": "/apis/v1/tavily/crawl",
"servers": [
{
"url": "https://api.aisa.one"
}
],
"parameters": [],
"security": [
{
"bearerAuth": []
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"properties": {
"allow_external": {
"default": true,
"description": "Include external domain links in the final results list.",
"type": "boolean"
},
"chunks_per_source": {
"default": 3,
"description": "Maximum number of relevant chunks returned per source.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"exclude_domains": {
"description": "Regex patterns to exclude specific domains or subdomains from crawling.",
"items": {
"type": "string"
},
"type": "array"
},
"exclude_paths": {
"description": "Regex patterns to exclude URLs with specific path patterns.",
"items": {
"type": "string"
},
"type": "array"
},
"extract_depth": {
"default": "basic",
"description": "Depth of the extraction process.",
"enum": [
"basic",
"advanced"
],
"type": "string"
},
"format": {
"default": "markdown",
"description": "Format of the extracted web page content.",
"enum": [
"markdown",
"text"
],
"type": "string"
},
"include_favicon": {
"default": false,
"description": "Include the favicon URL for each result.",
"type": "boolean"
},
"include_images": {
"default": false,
"description": "Include images in the crawl results.",
"type": "boolean"
},
"include_usage": {
"default": false,
"description": "Include credit usage information in the response.",
"type": "boolean"
},
"instructions": {
"description": "Natural language instructions for the crawler.",
"type": "string"
},
"limit": {
"default": 50,
"description": "Total number of links the crawler will process before stopping.",
"minimum": 1,
"type": "integer"
},
"max_breadth": {
"default": 20,
"description": "Max number of links to follow per level of the tree.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"max_depth": {
"default": 1,
"description": "Max depth of the crawl.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"select_domains": {
"description": "Regex patterns to select crawling to specific domains or subdomains.",
"items": {
"type": "string"
},
"type": "array"
},
"select_paths": {
"description": "Regex patterns to select only URLs with specific path patterns.",
"items": {
"type": "string"
},
"type": "array"
},
"timeout": {
"default": 150,
"description": "Maximum time in seconds to wait for the crawl operation.",
"format": "float",
"maximum": 150,
"minimum": 10,
"type": "number"
},
"url": {
"description": "The root URL to begin the crawl.",
"example": "docs.tavily.com",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
}
}
},
"required": true
},
"x-aisa-status": "enabled",
"x-aisa-pricing": {
"cost_contract": "response_units",
"customer_multiplier": 1.0,
"customer_pricing": "provider_cost_multiplier",
"default_request_estimate_usd": 0.024,
"estimate_source": "profile_seed",
"evidence_source": "response_body",
"unit": "tavily_credit",
"unit_rate_usd": 0.008
},
"components": {
"securitySchemes": {
"bearerAuth": {
"scheme": "bearer",
"type": "http"
}
}
}
}
Cost and request rules
Usage-based billing; Default request estimate: $0.024 USD (not a fixed price). Declared unit rate: $0.008 USD per tavily_credit. Account-specific pricing and final settlement may differ. Published reference values are not an account-specific quote or a settled charge. For endpoints supporting X-AISA-Cost-Mode: quote, obtain a free quote for your exact request before execution; reconcile the settled cost with response metadata and Usage Logs. USD amounts use 1,000,000 integer micro-USD per dollar.- Default request reference estimate (USD): 0.024
- Declared unit rate (USD): 0.008
- Billing unit: tavily_credit
- Cost contract: response_units
- Published reference multiplier: 1.0
- Settlement evidence source: response_body
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The root URL to begin the crawl.
"docs.tavily.com"
Include external domain links in the final results list.
Maximum number of relevant chunks returned per source.
1 <= x <= 5Regex patterns to exclude specific domains or subdomains from crawling.
Regex patterns to exclude URLs with specific path patterns.
Depth of the extraction process.
basic, advanced Format of the extracted web page content.
markdown, text Include the favicon URL for each result.
Include images in the crawl results.
Include credit usage information in the response.
Natural language instructions for the crawler.
Total number of links the crawler will process before stopping.
x >= 1Max number of links to follow per level of the tree.
1 <= x <= 500Max depth of the crawl.
1 <= x <= 5Regex patterns to select crawling to specific domains or subdomains.
Regex patterns to select only URLs with specific path patterns.
Maximum time in seconds to wait for the crawl operation.
10 <= x <= 150