# Tavily API — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orth.sh/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

Real-time search, extraction, and web crawling through a single, secure API.

**Verified:** yes

## Access

**Run API:** `POST https://api.orth.sh/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Tavily Crawl

Tavily Crawl is a graph-based website traversal tool that can explore hundreds of paths in parallel with built-in extraction and intelligent discovery.

`POST /crawl`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

**Docs:** https://docs.tavily.com/documentation/api-reference/endpoint/crawl

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | The root URL to begin the crawl. |
| `instructions` | string | No | Natural language instructions for the crawler. When specified, the mapping cost increases to 2 API credits per 10 successful pages instead of 1 API credit per 10 pages. |
| `chunks_per_source` | integer | No | Chunks are short content snippets (maximum 500 characters each) pulled directly from the source. Use chunks_per_source to define the maximum number of relevant chunks returned per source and to control the raw_content length. Chunks will appear in the raw_content field as: <chunk 1> [...] <chunk 2> [...] <chunk 3>. Available only when instructions are provided. Must be between 1 and 5. |
| `max_depth` | integer | No | Max depth of the crawl. Defines how far from the base URL the crawler can explore. |
| `max_breadth` | integer | No | Max number of links to follow per level of the tree (i.e., per page). |
| `limit` | integer | No | Total number of links the crawler will process before stopping. |
| `select_paths` | string[] | No | Regex patterns to select only URLs with specific path patterns (e.g., /docs/.*, /api/v1.*). |
| `select_domains` | string[] | No | Regex patterns to select crawling to specific domains or subdomains (e.g., ^docs\.example\.com$). |
| `exclude_paths` | string[] | No | Regex patterns to exclude URLs with specific path patterns (e.g., /private/.*, /admin/.*). |
| `exclude_domains` | string[] | No | Regex patterns to exclude specific domains or subdomains from crawling (e.g., ^private\.example\.com$). |
| `allow_external` | boolean | No | Whether to include external domain links in the final results list. |
| `include_images` | boolean | No | Whether to include images in the crawl results. |
| `extract_depth` | enum<string> | No | Advanced extraction retrieves more data, including tables and embedded content, with higher success but may increase latency. basic extraction costs 1 credit per 5 successful extractions, while advanced extraction costs 2 credits per 5 successful extractions. |
| `format` | enum<string> | No | The format of the extracted web page content. markdown returns content in markdown format. text returns plain text and may increase latency. |
| `include_favicon` | boolean | No | Whether to include the favicon URL for each result. |
| `timeout` | number<float> | No | Maximum time in seconds to wait for the crawl operation before timing out. Must be between 10 and 150 seconds. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"tavily","path":"/crawl","body":{"url":"<string>","instructions":"<string>","chunks_per_source":"<integer>","max_depth":"<integer>","max_breadth":"<integer>","limit":"<integer>","select_paths":"<string>","select_domains":"<string>","exclude_paths":"<string>","exclude_domains":"<string>","allow_external":"<boolean>","include_images":"<boolean>","extract_depth":"<string>","format":"<string>","include_favicon":"<boolean>","timeout":"<number>"}}'
```

### Get Research Task Status

Retrieve the status and results of a research task using its request ID.

`GET /research/{request_id}`

**Cost:** Free

**Docs:** https://docs.tavily.com/documentation/api-reference/endpoint/research-get

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `request_id` | string | Yes | Path parameter — substitute directly into the endpoint `path`. |

```bash
# Replace {request_id} in "path" with real values before sending
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"tavily","path":"/research/{request_id}","method":"GET"}'
```

### Tavily Search

Execute a search query using Tavily Search.

`POST /search`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

**Docs:** https://docs.tavily.com/documentation/api-reference/endpoint/search

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | The search query to execute with Tavily. |
| `search_depth` | enum<string> | No | Controls the latency vs. relevance tradeoff and how results[].content is generated: advanced: Highest relevance with increased latency. Best for detailed, high-precision queries. Returns multiple semantically relevant snippets per URL (configurable via chunks_per_source). basic: A balanced option for relevance and latency. Ideal for general-purpose searches. Returns one NLP summary per URL. fast: Prioritizes lower latency while maintaining good relevance. Returns multiple semantically relevant snippets per URL (configurable via chunks_per_source). ultra-fast: Minimizes latency above all else. Best for time-critical use cases. Returns one NLP summary per URL. Cost: basic, fast, ultra-fast: 1 API Credit advanced: 2 API Credits See Search Best Practices for guidance on choosing the right search depth. |
| `chunks_per_source` | integer | No | Chunks are short content snippets (maximum 500 characters each) pulled directly from the source. Use chunks_per_source to define the maximum number of relevant chunks returned per source and to control the content length. Chunks will appear in the content field as: <chunk 1> [...] <chunk 2> [...] <chunk 3>. Available only when search_depth is advanced. |
| `max_results` | integer | No | The maximum number of search results to return. |
| `topic` | enum<string> | No | The category of the search.news is useful for retrieving real-time updates, particularly about politics, sports, and major current events covered by mainstream media sources. general is for broader, more general-purpose searches that may include a wide range of sources. |
| `time_range` | enum<string> | No | The time range back from the current date to filter results based on publish date or last updated date. Useful when looking for sources that have published or updated data. |
| `start_date` | string | No | Will return all results after the specified start date based on publish date or last updated date. Required to be written in the format YYYY-MM-DD |
| `end_date` | string | No | Will return all results before the specified end date based on publish date or last updated date. Required to be written in the format YYYY-MM-DD |
| `include_answer` | boolean | No | Include an LLM-generated answer to the provided query. basic or true returns a quick answer. advanced returns a more detailed answer. |
| `include_raw_content` | boolean | No | Include the cleaned and parsed HTML content of each search result. markdown or true returns search result content in markdown format. text returns the plain text from the results and may increase latency. |
| `include_images` | boolean | No | Also perform an image search and include the results in the response. |
| `include_image_descriptions` | boolean | No | When include_images is true, also add a descriptive text for each image. |
| `include_favicon` | boolean | No | Whether to include the favicon URL for each result. |
| `include_domains` | string[] | No | A list of domains to specifically include in the search results. Maximum 300 domains. |
| `exclude_domains` | string[] | No | A list of domains to specifically exclude from the search results. Maximum 150 domains. |
| `country` | enum<string> | No | Boost search results from a specific country. This will prioritize content from the selected country in the search results. Available only if topic is general. |
| `auto_parameters` | boolean | No | When auto_parameters is enabled, Tavily automatically configures search parameters based on your query's content and intent. You can still set other parameters manually, and your explicit values will override the automatic ones. The parameters include_answer, include_raw_content, and max_results must always be set manually, as they directly affect response size. Note: search_depth may be automatically set to advanced when it's likely to improve results. This uses 2 API credits per request. To avoid the extra cost, you can explicitly set search_depth to basic. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"tavily","path":"/search","body":{"query":"<string>","search_depth":"<string>","chunks_per_source":"<integer>","max_results":"<integer>","topic":"<string>","time_range":"<string>","start_date":"<string>","end_date":"<string>","include_answer":"<boolean>","include_raw_content":"<boolean>","include_images":"<boolean>","include_image_descriptions":"<boolean>","include_favicon":"<boolean>","include_domains":"<string>","exclude_domains":"<string>","country":"<string>","auto_parameters":"<boolean>"}}'
```

### Tavily Map

Tavily Map traverses websites like a graph and can explore hundreds of paths in parallel with intelligent discovery to generate comprehensive site maps.

`POST /map`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

**Docs:** https://docs.tavily.com/documentation/api-reference/endpoint/map

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | The root URL to begin the mapping. |
| `instructions` | string | No | Natural language instructions for the crawler. When specified, the cost increases to 2 API credits per 10 successful pages instead of 1 API credit per 10 pages. |
| `max_depth` | integer | No | Max depth of the mapping. Defines how far from the base URL the crawler can explore. |
| `max_breadth` | integer | No | Max number of links to follow per level of the tree (i.e., per page). |
| `limit` | integer | No | Total number of links the crawler will process before stopping. |
| `select_paths` | string[] | No | Regex patterns to select only URLs with specific path patterns (e.g., /docs/.*, /api/v1.*). |
| `select_domains` | string[] | No | Regex patterns to select crawling to specific domains or subdomains (e.g., ^docs\.example\.com$). |
| `exclude_paths` | string[] | No | Regex patterns to exclude URLs with specific path patterns (e.g., /private/.*, /admin/.*). |
| `exclude_domains` | string[] | No | Regex patterns to exclude specific domains or subdomains from crawling (e.g., ^private\.example\.com$). |
| `allow_external` | boolean | No | Whether to include external domain links in the final results list. |
| `timeout` | number<float> | No | Maximum time in seconds to wait for the map operation before timing out. Must be between 10 and 150 seconds. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"tavily","path":"/map","body":{"url":"<string>","instructions":"<string>","max_depth":"<integer>","max_breadth":"<integer>","limit":"<integer>","select_paths":"<string>","select_domains":"<string>","exclude_paths":"<string>","exclude_domains":"<string>","allow_external":"<boolean>","timeout":"<number>"}}'
```

### Create Research Task

Tavily Research performs comprehensive research on a given topic by conducting multiple searches, analyzing sources, and generating a detailed research report.

`POST /research`

**Estimated cost:** $0.5

**Docs:** https://docs.tavily.com/documentation/api-reference/endpoint/research

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `input` | string | Yes | The research task or question to investigate. |
| `model` | enum<string> | No | The model used by the research agent. "mini" is optimized for targeted, efficient research and works best for narrow or well-scoped questions. "pro" provides comprehensive, multi-angle research and is suited for complex topics that span multiple subtopics or domains |
| `stream` | boolean | No | Whether to stream the research results as they are generated. When 'true', returns a Server-Sent Events (SSE) stream. See Streaming documentation for details. |
| `output_schema` | object | No | A JSON Schema object that defines the structure of the research output. When provided, the research response will be structured to match this schema, ensuring a predictable and validated output shape. Must include a 'properties' field, and may optionally include 'required' field. |
| `citation_format` | enum<string> | No | The format for citations in the research report. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"tavily","path":"/research","body":{"input":"<string>","model":"<string>","stream":"<boolean>","output_schema":"<object>","citation_format":"<string>"}}'
```

### Tavily Extract

Extract web page content from one or more specified URLs using Tavily Extract.

`POST /extract`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

**Docs:** https://docs.tavily.com/documentation/api-reference/endpoint/extract

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `urls` | string[] | Yes | The URL to extract content from. |
| `query` | string | No | User intent for reranking extracted content chunks. When provided, chunks are reranked based on relevance to this query. |
| `chunks_per_source` | integer | No | Chunks are short content snippets (maximum 500 characters each) pulled directly from the source. Use chunks_per_source to define the maximum number of relevant chunks returned per source and to control the raw_content length. Chunks will appear in the raw_content field as: <chunk 1> [...] <chunk 2> [...] <chunk 3>. Available only when query is provided. Must be between 1 and 5. |
| `extract_depth` | enum<string> | No | The depth of the extraction process. advanced extraction retrieves more data, including tables and embedded content, with higher success but may increase latency.basic extraction costs 1 credit per 5 successful URL extractions, while advanced extraction costs 2 credits per 5 successful URL extractions. |
| `include_images` | boolean | No | Include a list of images extracted from the URLs in the response. Default is false. |
| `include_favicon` | boolean | No | Whether to include the favicon URL for each result. |
| `format` | enum<string> | No | The format of the extracted web page content. markdown returns content in markdown format. text returns plain text and may increase latency. |
| `timeout` | number | No | Maximum time in seconds to wait for the URL extraction before timing out. Must be between 1.0 and 60.0 seconds. If not specified, default timeouts are applied based on extract_depth: 10 seconds for basic extraction and 30 seconds for advanced extraction. |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"tavily","path":"/extract","body":{"urls":"<string>","query":"<string>","chunks_per_source":"<integer>","extract_depth":"<string>","include_images":"<boolean>","include_favicon":"<boolean>","format":"<string>","timeout":"<number>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/tavily
