SDK Reference
Integrate Tavily’s powerful APIs natively in your JavaScript/TypeScript projects.
Instantiating a client
To interact with Tavily in JavaScript, you must instatiate a client with your API key. Our client is asynchronous by default.
Once you have instantiated a client, call one of our supported methods (detailed below) to access the API.
const { tavily } = require("@tavily/core");
client = tavily({ apiKey: "tvly-YOUR_API_KEY" });
Proxies
If you would like to specify a proxy to be used when making requests, you can do so by passing in a proxy parameter on client instantiation.
Proxy configuration is available in both the synchronous and asynchronous clients.
const { tavily } = require("@tavily/core");
const proxies = {
http: "<your HTTP proxy>",
https: "<your HTTPS proxy>",
};
client = tavily({ apiKey: "tvly-YOUR_API_KEY", proxies });
Alternatively, you can specify which proxies to use by setting the TAVILY_HTTP_PROXY
and TAVILY_HTTPS_PROXY
variables in your environment file.
Tavily Search
NEW! Try our interactive API Playground to see each parameter in action, and generate ready-to-use JavaScript snippets.
You can access Tavily Search in JavaScript through the client’s search
function.
Parameters
Parameter | Type | Description | Default |
---|---|---|---|
query (required) | string | The query to run a search on. | — |
searchDepth | string | The depth of the search. It can be "basic" or "advanced" . "advanced" search is tailored to retrieve the most relevant sources and content snippets for your query, while "basic" search provides generic content snippets from each source. | "basic" |
topic | string | The category of the search. Determines which agent will be used. Supported values are "general" and "news" . | "general" |
days | number | The number of days back from the current date to include in the results. Available only when using the "news" topic. | 7 |
timeRange | string | The time range back from the current date. Accepted values include "day" , "week" , "month" , "year" or shorthand values "d" , "w" , "m" , "y" . | — |
maxResults | number | The maximum number of search results to return. It must be between 0 and 20 . | 5 |
chunksPerSource | number | The number of content chunks to retrieve from each source. Each chunk’s length is maximum 500 characters. It must be between 1 and 3 . Available only when searchDepth is "advanced" . | — |
includeImages | boolean | Include a list of query-related images in the response. | false |
includeImageDescriptions | boolean | Include a list of query-related images and their descriptions in the response. | false |
includeAnswer | boolean or string | Include an answer to the query generated by an LLM based on search results. A "basic" (or true ) answer is quick but less detailed; an "advanced" answer is more detailed. | false |
includeRawContent | boolean | Include the cleaned and parsed HTML content of each search result. | false |
includeDomains | string[] | A list of domains to specifically include in the search results. | [] |
excludeDomains | string[] | A list of domains to specifically exclude from the search results. | [] |
timeout | number | A timeout to be used in requests to the Tavily API. | 60 |
Response format
The response object you receive will be in the following format:
Key | Type | Description |
---|---|---|
results | Result[] | A list of sorted search results ranked by relevancy. |
query | string | Your search query. |
responseTime | number | Your search result response time. |
answer (optional) | string | The answer to your search query, generated by an LLM based on Tavily’s search results. This is only available if includeAnswer is set to true . |
images (optional) | string[] or ImageResult[] | This is only available if includeImages is set to true . A list of query-related image URLs. If includeImageDescriptions is set to true , each entry will be an ImageResult . |
Results
Each result in the results
list will be in the following Result
format:
Key | Type | Description |
---|---|---|
title | string | The title of the search result. |
url | string | The URL of the search result. |
content | string | The most query-related content from the scraped URL. Tavily uses proprietary AI to extract the most relevant content based on context quality and size. |
score | float | The relevance score of the search result. |
rawContent (optional) | string | The parsed and cleaned HTML content of the site. This is only available if includeRawContent is set to true . |
publishedDate (optional) | string | The publication date of the source. This is only available if the search topic is set to news . |
Image Results
Each image in the images
list will be in the following ImageResult
format:
Key | Type | Description |
---|---|---|
url | string | The URL of the image. |
description (optional) | string | This is only available if includeImageDescriptions is set to true . An LLM-generated description of the image. |
Example
const { tavily } = require("@tavily/core");
// Step 1. Instantiating your Tavily client
const tvly = tavily({ apiKey: "tvly-YOUR_API_KEY" });
// Step 2. Executing a simple search query
const response = await tvly.search("Who is Leo Messi?");
// Step 3. That's it! You've done a Tavily Search!
console.log(response);
{
"query": "Who is Leo Messi?",
"images": [
{
"url": "Image 1 URL",
"description": "Image 1 Description"
},
{
"url": "Image 2 URL",
"description": "Image 2 Description"
},
{
"url": "Image 3 URL",
"description": "Image 3 Description"
},
{
"url": "Image 4 URL",
"description": "Image 4 Description"
},
{
"url": "Image 5 URL",
"description": "Image 5 Description"
}
],
"results": [
{
"title": "Source 1 Title",
"url": "Source 1 URL",
"content": "Source 1 Content",
"score": 0.99
},
{
"title": "Source 2 Title",
"url": "Source 2 URL",
"content": "Source 2 Content",
"score": 0.97
}
],
"responseTime": 1.09
}
Tavily Extract
You can access Tavily Extract in JavaScript through the client’s extract
function.
Parameters
Parameter | Type | Description | Default |
---|---|---|---|
urls (required) | string[] | The URLs you want to extract. The list must not contain more than 20 URLs. | — |
includeImages | boolean | Include a list of images extracted from the URLs in the response. | false |
extractDepth | string | The depth of the extraction process. You may experience higher latency with "advanced" extraction, but it offers a higher success rate and retrieves more data from the URL (e.g., tables, embedded content). "basic" extraction costs 1 API Credit per 5 successful URL extractions, while "advanced" extraction costs 2 API Credits per 5 successful URL extractions. | "basic" |
timeout | number | A timeout to be used in requests to the Tavily API. | 60 |
Response format
The response object you receive will be in the following format:
Key | Type | Description |
---|---|---|
results | SuccessfulResult[] | A list of extracted content. |
failed_results | FailedResult[] | A list of URLs that could not be processed. |
response_time | number | The search result response time. |
Successful Results
Each successful result in the results
list will be in the following SuccessfulResult
format:
Key | Type | Description |
---|---|---|
url | string | The URL of the webpage. |
raw_content | string | The raw content extracted. |
images (optional) | string[] | This is only available if includeImages is set to true . A list of extracted image URLs. |
Failed Results
Each failed result in the results
list will be in the following FailedResult
format:
Key | Type | Description |
---|---|---|
url | string | The URL that failed. |
error | string | An error message describing why it could not be processed. |
Example
from tavily import TavilyClient
# Step 1. Instantiating your TavilyClient
tavily_client = TavilyClient(api_key="tvly-YOUR_API_KEY")
# Step 2. Defining the list of URLs to extract content from
urls = [
"https://en.wikipedia.org/wiki/Artificial_intelligence",
"https://en.wikipedia.org/wiki/Machine_learning",
"https://en.wikipedia.org/wiki/Data_science",
]
# Step 3. Executing the extract request
response = tavily_client.extract(urls=urls, include_images=True)
# Step 4. Printing the extracted raw content
print(response)
{
"results": [
{
"url": "https://en.wikipedia.org/wiki/Artificial_intelligence",
"rawContent": "URL 1 raw content",
"images": [
"Image 1 URL",
"Image 2 URL"
]
},
{
"url": "https://en.wikipedia.org/wiki/Machine_learning",
"rawContent": "URL 2 raw content",
"images": [
"Image 3 URL",
"Image 4 URL"
]
},
{
"url": "https://en.wikipedia.org/wiki/Data_science",
"rawContent": "URL 3 raw content",
"images": [
"Image 5 URL",
"Image 6 URL"
]
}
],
"failedResults": [],
"responseTime": 1.23
}
Tavily Crawl
Our agent-first crawl endpoint, Tavily Crawl is currently in invite-only beta. If you are interested in joining the beta, please email support@tavily.com.
You can access Tavily Crawl in JavaScript through the client’s crawl
function.
Parameters
Parameter | Type | Description | Default |
---|---|---|---|
url (required) | string | The root URL to begin the crawl. | — |
maxDepth | number | Max depth of the crawl. Defines how far from the base URL the crawler can explore. | 1 |
maxBreadth | number | Max number of links to follow per level of the tree (i.e., per page). | 20 |
limit | number | Total number of links the crawler will process before stopping. | 50 |
instructions | string | Natural language instructions for the crawler. | — |
selectPaths | string[] | Regex patterns to select only URLs with specific path patterns (e.g., "/docs/.*" , "/api/v1.*" ). | [] |
selectDomains | string[] | Regex patterns to select crawling to specific domains or subdomains (e.g., "^docs\.example\.com$" ). | [] |
excludePaths | string[] | Regex patterns to exclude URLs with specific path patterns (e.g., "/admin/.*" , "/private/.*" ). | [] |
excludeDomains | string[] | Regex patterns to exclude specific domains or subdomains from crawling (e.g., "^admin\.example\.com$" ). | [] |
allowExternal | boolean | Whether to return links from external domains in crawl output. | false |
includeImages | boolean | Whether to extract image URLs from the crawled pages. | false |
categories | string[] | Filter URLs using predefined categories. Options: "Careers" , "Blog" , "Documentation" , "About" , "Pricing" , "Community" , "Developers" , "Contact" , "Media" | [] |
extractDepth | string | Advanced extraction retrieves more data, including tables and embedded content, with higher success but may increase latency. Options: "basic" or "advanced" . | "basic" |
timeout | number | A timeout to be used in requests to the Tavily API. | 60 |
Response format
The response object you receive will be in the following format:
Key | Type | Description |
---|---|---|
baseUrl | string | The URL you started the crawl from. |
results | Result[] | A list of crawled pages. |
responseTime | number | The crawl response time. |
Results
Each successful result in the results
list will be in the following Result
format:
Key | Type | Description |
---|---|---|
url | string | The URL of the webpage. |
rawContent | string | The raw content extracted. |
images | string[] | Image URLs extracted from the page. |
Example
const { tavily } = require("@tavily/core");
// Step 1. Instantiating your Tavily client
const tvly = tavily({ apiKey: "tvly-YOUR_API_KEY" });
// Step 2. Defining the starting URL of the crawl
const url = "https://docs.tavily.com";
// Step 3. Executing the crawl with some guidance parameters
const response = await client.crawl(url, { instructions: "Find all info on the Python SDK" });
// Step 4. Printing the crawled results
console.log(response);
{
responseTime: 9.09,
baseUrl: "https://docs.tavily.com",
results: [
{
"url": "https://docs.tavily.com/sdk/python/reference",
"raw_content": "SDK Reference - Tavily Docs\n\n[Tavily Docs home page](https://tavily.com/)\n\nSearch or ask...\n\nCtrl K\n\n- [Support](mailto:support@tavily.com)\n- [Get an API key](https://app.tavily.com)\n- [Get an API key](https://app.tavily.com)\n\nSearch...\n\nNavigation\n\nPython\n\nSDK Reference\n\n[Home](/welcome)[Documentation](/documentation/about)[SDKs](/sdk/python/quick-start)[Examples](/examples/use-cases/data-enrichment)[FAQ](/faq/faq)\n\n- [API Playground](https://app.tavily.com/playground)\n- [Community](https://community.tavily.com)\n- [Blog](https://blog.tavily.com)\n\n##### Python\n\n- [Quickstart](/sdk/python/quick-start)\n- [SDK Reference](/sdk/python/reference)\n\n##### JavaScript\n\n- [Quickstart](/sdk/javascript/quick-start)\n- [SDK Reference](/sdk/javascript/reference)\n\nPython\n\n# SDK Reference\n\nIntegrate Tavily’s powerful APIs natively in your Python apps.\n\n## [](#instantiating-a-client) Instantiating a client\n\nTo interact with Tavily in Python, you must instatiate a client with your API key. For greater flexibility, we provide both a synchronous and an asynchronous client class.\n\nOnce you have instantiated a client, call one of our supported methods (detailed below) to access the API.\n\n### [](#synchronous-client) Synchronous Client\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\nclient = TavilyClient(\"tvly-YOUR_API_KEY\")\n\n```\n\n### [](#asynchronous-client) Asynchronous Client\n\nCopy\n\n```\nfrom tavily import AsyncTavilyClient\n\nclient = AsyncTavilyClient(\"tvly-YOUR_API_KEY\")\n\n```\n\n### [](#proxies) Proxies\n\nIf you would like to specify a proxy to be used when making requests, you can do so by passing in a proxy parameter on client instantiation.\n\nProxy configuration is available in both the synchronous and asynchronous clients.\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\nproxies = {\n \"http\": \"<your HTTP proxy>\",\n \"https\": \"<your HTTPS proxy>\",\n}\n\nclient = TavilyClient(\"tvly-YOUR_API_KEY\", proxies=proxies)\n\n```\n\nAlternatively, you can specify which proxies to use by setting the `TAVILY_HTTP_PROXY` and `TAVILY_HTTPS_PROXY` variables in your environment file.\n\n## [](#tavily-search) Tavily Search\n\n**NEW!** Try our interactive [API\nPlayground](https://app.tavily.com/playground) to see each parameter in\naction, and generate ready-to-use Python snippets.\n\nYou can access Tavily Search in Python through the client’s `search` function.\n\n### [](#parameters) Parameters\n\n| Parameter | Type | Description | Default | |\n| --- | --- | --- | --- | --- |\n| `query` **(required)** | `str` | The query to run a search on. | — | |\n| `search_depth` | `str` | The depth of the search. It can be `\"basic\"` or `\"advanced\"`. `\"advanced\"` search is tailored to retrieve the most relevant sources and `content` snippets for your query, while `\"basic\"` search provides generic content snippets from each source. | `\"basic\"` | |\n| `topic` | `str` | The category of the search. Determines which agent will be used. Supported values are `\"general\"` and `\"news\"`. | `\"general\"` | |\n| `days` | `int` | The number of days back from the current date to include in the results. Available only when using the `\"news\"` topic. | `7` | |\n| `time_range` | `str` | The time range back from the current date. Accepted values include `\"day\"`, `\"week\"`, `\"month\"`, `\"year\"` or shorthand values `\"d\"`, `\"w\"`, `\"m\"`, `\"y\"`. | — | |\n| `max_results` | `int` | The maximum number of search results to return. It must be between `0` and `20`. | `5` | |\n| `chunks_per_source` | `int` | The number of `content` chunks to retrieve from each source. Each chunk’s length is maximum 500 characters. It must be between `1` and `3`. Available only when `search_depth` is `advanced`. | `3` | |\n| `include_images` | `bool` | Include a list of query-related images in the response. | `False` | |\n| `include_image_descriptions` | `bool` | Include a list of query-related images and their descriptions in the response. | `False` | |\n| `include_answer` | `bool` or `str` | Include an answer to the query generated by an LLM based on search results. A `\"basic\"` (or `True`) answer is quick but less detailed; an `\"advanced\"` answer is more detailed. | `False` | |\n| `include_raw_content` | `bool` | Include the cleaned and parsed HTML content of each search result. | `False` | |\n| `include_domains` | `list[str]` | A list of domains to specifically include in the search results. | `[]` | |\n| `exclude_domains` | `list[str]` | A list of domains to specifically exclude from the search results. | `[]` | |\n| `timeout` | `int` | A timeout to be used in requests to the Tavily API. | `60` | |\n\n### [](#response-format) Response format\n\nThe response object you receive will be in the following format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `results` | `list[Result]` | A list of sorted search results ranked by relevancy. |\n| `query` | `str` | Your search query. |\n| `response_time` | `float` | Your search result response time. |\n| `answer` (optional) | `str` | The answer to your search query, generated by an LLM based on Tavily’s search results. This is only available if `include_answer` is set to `True`. |\n| `images` (optional) | `list[str]` or `list[ImageResult]` | This is only available if `include_images` is set to `True`. A list of query-related image URLs. If `include_image_descriptions` is set to `True`, each entry will be an `ImageResult`. |\n\n### [](#results) Results\n\n| `Key` | `Type` | Description |\n| --- | --- | --- |\n| `title` | `str` | The title of the search result. |\n| `url` | `str` | The URL of the search result. |\n| `content` | `str` | The most query-related content from the scraped URL. Tavily uses proprietary AI to extract the most relevant content based on context quality and size. |\n| `score` | `float` | The relevance score of the search result. |\n| `raw_content` (optional) | `str` | The parsed and cleaned HTML content of the site. This is only available if `include_raw_content` is set to `True`. |\n| `published_date` (optional) | `str` | The publication date of the source. This is only available if the search `topic` is set to `\"news\"`. |\n\n#### [](#image-results) Image Results\n\nIf `includeImageDescriptions` is set to `true`, each image in the `images` list will be in the following `ImageResult` format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `url` | `string` | The URL of the image. |\n| `description` | `string` | An LLM-generated description of the image. |\n\n### [](#example) Example\n\nRequest\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\n# Step 1. Instantiating your TavilyClient\ntavily_client = TavilyClient(api_key=\"tvly-YOUR_API_KEY\")\n\n# Step 2. Executing the search request\nresponse = tavily_client.search(\"Who is Leo Messi?\", include_images=True, include_image_descriptions=True)\n\n# Step 3. Printing the search results\nprint(response)\n\n```\n\nResponse\n\nCopy\n\n```\n{\n \"query\": \"Who is Leo Messi?\",\n \"images\": [\n {\n \"url\": \"Image 1 URL\",\n \"description\": \"Image 1 Description\",\n },\n {\n \"url\": \"Image 2 URL\",\n \"description\": \"Image 2 Description\",\n },\n {\n \"url\": \"Image 3 URL\",\n \"description\": \"Image 3 Description\",\n },\n {\n \"url\": \"Image 4 URL\",\n \"description\": \"Image 4 Description\",\n },\n {\n \"url\": \"Image 5 URL\",\n \"description\": \"Image 5 Description\",\n }\n ],\n \"results\": [\n {\n \"title\": \"Source 1 Title\",\n \"url\": \"Source 1 URL\",\n \"content\": \"Source 1 Content\",\n \"score\": 0.99\n },\n {\n \"title\": \"Source 2 Title\",\n \"url\": \"Source 2 URL\",\n \"content\": \"Source 2 Content\",\n \"score\": 0.97\n }\n ],\n \"response_time\": 1.09\n}\n\n```\n\n## [](#tavily-extract) Tavily Extract\n\nYou can access Tavily Extract in Python through the client’s `extract` function.\n\n### [](#parameters-2) Parameters\n\n| Parameter | Type | Description | Default | |\n| --- | --- | --- | --- | --- |\n| `urls` **(required)** | `str` or `list[str]` | The URL (or URLs) you want to extract. If a list is provided, it must not contain more than 20 URLs. | — | |\n| `include_images` | `bool` | Include a list of images extracted from the URLs in the response. | `False` | |\n| `extract_depth` | `str` | The depth of the extraction process. You may experience higher latency with `\"advanced\"` extraction, but it offers a higher success rate and retrieves more data from the URL (e.g., tables, embedded content). `\"basic\"` extraction costs 1 API Credit per 5 successful URL extractions, while `advanced` extraction costs 2 API Credits per 5 successful URL extractions. | `\"basic\"` | |\n| `timeout` | `int` | A timeout to be used in requests to the Tavily API. | `60` | |\n\n### [](#response-format-2) Response format\n\nThe response object you receive will be in the following format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `results` | `list[SuccessfulResult]` | A list of extracted content. |\n| `failed_results` | `list[FailedResult]` | A list of URLs that could not be processed. |\n| `response_time` | `float` | The search result response time. |\n\n#### [](#successful-results) Successful Results\n\nEach successful result in the `results` list will be in the following `SuccessfulResult` format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `url` | `str` | The URL of the webpage. |\n| `raw_content` | `str` | The raw content extracted. |\n| `images` (optional) | `list[str]` | This is only available if `include_images` is set to `True`. A list of extracted image URLs. |\n\n#### [](#failed-results) Failed Results\n\nEach failed result in the `results` list will be in the following `FailedResult` format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `url` | `str` | The URL that failed. |\n| `error` | `str` | An error message describing why it could not be processed. |\n\n### [](#example-2) Example\n\nRequest\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\n# Step 1. Instantiating your TavilyClient\ntavily_client = TavilyClient(api_key=\"tvly-YOUR_API_KEY\")\n\n# Step 2. Defining the list of URLs to extract content from\nurls = [\n \"https://en.wikipedia.org/wiki/Artificial_intelligence\",\n \"https://en.wikipedia.org/wiki/Machine_learning\",\n \"https://en.wikipedia.org/wiki/Data_science\",\n]\n\n# Step 3. Executing the extract request\nresponse = tavily_client.extract(urls=urls, include_images=True)\n\n# Step 4. Printing the extracted raw content\nprint(response)\n\n```\n\nResponse\n\nCopy\n\n```\n{\n \"results\": [\n {\n \"url\": \"https://en.wikipedia.org/wiki/Artificial_intelligence\",\n \"raw_content\": \"URL 1 raw content\",\n \"images\": [\n \"Image 1 URL\",\n \"Image 2 URL\"\n ]\n },\n {\n \"url\": \"https://en.wikipedia.org/wiki/Machine_learning\",\n \"raw_content\": \"URL 2 raw content\",\n \"images\": [\n \"Image 3 URL\",\n \"Image 4 URL\"\n ]\n },\n {\n \"url\": \"https://en.wikipedia.org/wiki/Data_science\",\n \"raw_content\": \"URL 3 raw content\",\n \"images\": [\n \"Image 5 URL\",\n \"Image 6 URL\"\n ]\n }\n ],\n \"failed_results\": [],\n \"response_time\": 1.23\n}\n\n```\n\n## [](#tavily-crawl) Tavily Crawl\n\nOur agent-first crawl endpoint, **Tavily Crawl** is currently in **invite-only beta**. If you are interested in joining the beta, please email [support@tavily.com](mailto:support@tavily.com).\n\nYou can access Tavily Crawl in Python through the `crawl` function.\n\n### [](#parameters-3) Parameters\n\n| Parameter | Type | Description | Default |\n| --- | --- | --- | --- |\n| `url` **(required)** | `str` | The root URL to begin the crawl. | — |\n| `max_depth` | `int` | Max depth of the crawl. Defines how far from the base URL the crawler can explore. | `1` |\n| `max_breadth` | `int` | Max number of links to follow **per level** of the tree (i.e., per page). | `20` |\n| `limit` | `int` | Total number of links the crawler will process before stopping. | `50` |\n| `query` | `str` | Natural language instructions for the crawler. | — |\n| `select_paths` | `list[str]` | **Regex patterns** to select only URLs with specific path patterns (e.g., `\"/docs/.*\"`, `\"/api/v1.*\"`). | `None` |\n| `select_domains` | `list[str]` | **Regex patterns** to select crawling to specific domains or subdomains (e.g., `\"^docs\\.example\\.com$\"`). | `None` |\n| `allow_external` | `bool` | Whether to allow following links that go to external domains. | `False` |\n| `include_images` | `bool` | Whether to extract image URLs from the crawled pages. | `False` |\n| `categories` | `list[str]` | Filter URLs using predefined categories. Options: `\"Careers\"`, `\"Blog\"`, `\"Documentation\"`, `\"About\"`, `\"Pricing\"`, `\"Community\"`, `\"Developers\"`, `\"Contact\"`, `\"Media\"` | `None` |\n| `extract_depth` | `str` | Advanced extraction retrieves more data, including tables and embedded content, with higher success but may increase latency. Options: `\"basic\"` or `\"advanced\"`. | `\"basic\"` |\n\n### [](#response-format-3) Response format\n\nThe response object you receive will be in the following format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `base_url` | `str` | The URL you started the crawl from. |\n| `results` | `list[Result]` | A list of crawled pages. |\n| `response_time` | `float` | The crawl response time. |\n\n#### [](#results-2) Results\n\nEach successful result in the `results` list will be in the following `Result` format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `url` | `str` | The URL of the webpage. |\n| `raw_content` | `str` | The raw content extracted. |\n| `images` | `list[str]` | Image URLs extracted from the page. |\n\n### [](#example-3) Example\n\nRequest\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\n# Step 1. Instantiating your TavilyClient\ntavily_client = TavilyClient(api_key=\"tvly-YOUR_API_KEY\")\n\n# Step 2. Defining the starting URL of the crawl\nurl = \"https://docs.tavily.com\"\n\n# Step 3. Executing the crawl with some guidance parameters\nresponse = tavily_client.crawl(url, query=\"Python SDK\")\n\n# Step 4. Printing the crawled results\nprint(response)\n\n```\n\nResponse\n\nCopy\n\n```\n{\n \"base_url\": \"https://docs.tavily.com\",\n \"results\": [\n {\n \"url\": \"https://docs.tavily.com/sdk/python/reference\",\n \"raw_content\": \"SDK Reference - Tavily Docs\\n\\n[Tavily Docs home page](https://tavily.com/)\\n\\nSearch or ask...\\n\\nCtrl K\\n\\n- [Support](mailto:support@tavily.com)\\n- [Get an API key](https://app.tavily.com)\\n- [Get an API key](https://app.tavily.com)\\n\\nSearch...\\n\\nNavigation\\n\\nPython\\n\\nSDK Reference\\n\\n[Home](/welcome)[Documentation](/documentation/about)[SDKs](/sdk/python/quick-start)[Examples](/examples/use-cases/data-enrichment)[FAQ](/faq/faq)\\n\\n- [API Playground](https://app.tavily.com/playground)\\n- [Community](https://community.tavily.com)\\n- [Blog](https://blog.tavily.com)\\n\\n##### Python\\n\\n- [Quickstart](/sdk/python/quick-start)\\n- [SDK Reference](/sdk/python/reference)\\n\\n##### JavaScript\\n\\n- [Quickstart](/sdk/javascript/quick-start)\\n- [SDK Reference](/sdk/javascript/reference)\\n\\nPython\\n\\n# SDK Reference\\n\\nIntegrate Tavily\\u2019s powerful APIs natively in your Python apps.\\n\\n## [\\u200b](#instantiating-a-client) Instantiating a client\\n\\nTo interact with Tavily in Python, you must instatiate a client with your API key. For greater flexibility, we provide both a synchronous and an asynchronous client class.\\n\\nOnce you have instantiated a client, call one of our supported methods (detailed below) to access the API.\\n\\n### [\\u200b](#synchronous-client) Synchronous Client\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\nclient = TavilyClient(\\\"tvly-YOUR_API_KEY\\\")\\n\\n```\\n\\n### [\\u200b](#asynchronous-client) Asynchronous Client\\n\\nCopy\\n\\n```\\nfrom tavily import AsyncTavilyClient\\n\\nclient = AsyncTavilyClient(\\\"tvly-YOUR_API_KEY\\\")\\n\\n```\\n\\n### [\\u200b](#proxies) Proxies\\n\\nIf you would like to specify a proxy to be used when making requests, you can do so by passing in a proxy parameter on client instantiation.\\n\\nProxy configuration is available in both the synchronous and asynchronous clients.\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\nproxies = {\\n \\\"http\\\": \\\"<your HTTP proxy>\\\",\\n \\\"https\\\": \\\"<your HTTPS proxy>\\\",\\n}\\n\\nclient = TavilyClient(\\\"tvly-YOUR_API_KEY\\\", proxies=proxies)\\n\\n```\\n\\nAlternatively, you can specify which proxies to use by setting the `TAVILY_HTTP_PROXY` and `TAVILY_HTTPS_PROXY` variables in your environment file.\\n\\n## [\\u200b](#tavily-search) Tavily Search\\n\\n**NEW!** Try our interactive [API\\nPlayground](https://app.tavily.com/playground) to see each parameter in\\naction, and generate ready-to-use Python snippets.\\n\\nYou can access Tavily Search in Python through the client\\u2019s `search` function.\\n\\n### [\\u200b](#parameters) Parameters\\n\\n| Parameter | Type | Description | Default | |\\n| --- | --- | --- | --- | --- |\\n| `query` **(required)** | `str` | The query to run a search on. | | |\\n| `search_depth` | `str` | The depth of the search. It can be `\\\"basic\\\"` or `\\\"advanced\\\"`. `\\\"advanced\\\"` search is tailored to retrieve the most relevant sources and `content` snippets for your query, while `\\\"basic\\\"` search provides generic content snippets from each source. | `\\\"basic\\\"` | |\\n| `topic` | `str` | The category of the search. Determines which agent will be used. Supported values are `\\\"general\\\"` and `\\\"news\\\"`. | `\\\"general\\\"` | |\\n| `days` | `int` | The number of days back from the current date to include in the results. Available only when using the `\\\"news\\\"` topic. | `7` | |\\n| `time_range` | `str` | The time range back from the current date. Accepted values include `\\\"day\\\"`, `\\\"week\\\"`, `\\\"month\\\"`, `\\\"year\\\"` or shorthand values `\\\"d\\\"`, `\\\"w\\\"`, `\\\"m\\\"`, `\\\"y\\\"`. | | |\\n| `max_results` | `int` | The maximum number of search results to return. It must be between `0` and `20`. | `5` | |\\n| `chunks_per_source` | `int` | The number of `content` chunks to retrieve from each source. Each chunk\\u2019s length is maximum 500 characters. It must be between `1` and `3`. Available only when `search_depth` is `advanced`. | `3` | |\\n| `include_images` | `bool` | Include a list of query-related images in the response. | `False` | |\\n| `include_image_descriptions` | `bool` | Include a list of query-related images and their descriptions in the response. | `False` | |\\n| `include_answer` | `bool` or `str` | Include an answer to the query generated by an LLM based on search results. A `\\\"basic\\\"` (or `True`) answer is quick but less detailed; an `\\\"advanced\\\"` answer is more detailed. | `False` | |\\n| `include_raw_content` | `bool` | Include the cleaned and parsed HTML content of each search result. | `False` | |\\n| `include_domains` | `list[str]` | A list of domains to specifically include in the search results. | `[]` | |\\n| `exclude_domains` | `list[str]` | A list of domains to specifically exclude from the search results. | `[]` | |\\n| `timeout` | `int` | A timeout to be used in requests to the Tavily API. | `60` | |\\n\\n### [\\u200b](#response-format) Response format\\n\\nThe response object you receive will be in the following format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `results` | `list[Result]` | A list of sorted search results ranked by relevancy. |\\n| `query` | `str` | Your search query. |\\n| `response_time` | `float` | Your search result response time. |\\n| `answer` (optional) | `str` | The answer to your search query, generated by an LLM based on Tavily\\u2019s search results. This is only available if `include_answer` is set to `True`. |\\n| `images` (optional) | `list[str]` or `list[ImageResult]` | This is only available if `include_images` is set to `True`. A list of query-related image URLs. If `include_image_descriptions` is set to `True`, each entry will be an `ImageResult`. |\\n\\n### [\\u200b](#results) Results\\n\\n| `Key` | `Type` | Description |\\n| --- | --- | --- |\\n| `title` | `str` | The title of the search result. |\\n| `url` | `str` | The URL of the search result. |\\n| `content` | `str` | The most query-related content from the scraped URL. Tavily uses proprietary AI to extract the most relevant content based on context quality and size. |\\n| `score` | `float` | The relevance score of the search result. |\\n| `raw_content` (optional) | `str` | The parsed and cleaned HTML content of the site. This is only available if `include_raw_content` is set to `True`. |\\n| `published_date` (optional) | `str` | The publication date of the source. This is only available if the search `topic` is set to `\\\"news\\\"`. |\\n\\n#### [\\u200b](#image-results) Image Results\\n\\nIf `includeImageDescriptions` is set to `true`, each image in the `images` list will be in the following `ImageResult` format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `url` | `string` | The URL of the image. |\\n| `description` | `string` | An LLM-generated description of the image. |\\n\\n### [\\u200b](#example) Example\\n\\nRequest\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\n# Step 1. Instantiating your TavilyClient\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\n\\n# Step 2. Executing the search request\\nresponse = tavily_client.search(\\\"Who is Leo Messi?\\\", include_images=True, include_image_descriptions=True)\\n\\n# Step 3. Printing the search results\\nprint(response)\\n\\n```\\n\\nResponse\\n\\nCopy\\n\\n```\\n{\\n \\\"query\\\": \\\"Who is Leo Messi?\\\",\\n \\\"images\\\": [\\n {\\n \\\"url\\\": \\\"Image 1 URL\\\",\\n \\\"description\\\": \\\"Image 1 Description\\\",\\n },\\n {\\n \\\"url\\\": \\\"Image 2 URL\\\",\\n \\\"description\\\": \\\"Image 2 Description\\\",\\n },\\n {\\n \\\"url\\\": \\\"Image 3 URL\\\",\\n \\\"description\\\": \\\"Image 3 Description\\\",\\n },\\n {\\n \\\"url\\\": \\\"Image 4 URL\\\",\\n \\\"description\\\": \\\"Image 4 Description\\\",\\n },\\n {\\n \\\"url\\\": \\\"Image 5 URL\\\",\\n \\\"description\\\": \\\"Image 5 Description\\\",\\n }\\n ],\\n \\\"results\\\": [\\n {\\n \\\"title\\\": \\\"Source 1 Title\\\",\\n \\\"url\\\": \\\"Source 1 URL\\\",\\n \\\"content\\\": \\\"Source 1 Content\\\",\\n \\\"score\\\": 0.99\\n },\\n {\\n \\\"title\\\": \\\"Source 2 Title\\\",\\n \\\"url\\\": \\\"Source 2 URL\\\",\\n \\\"content\\\": \\\"Source 2 Content\\\",\\n \\\"score\\\": 0.97\\n }\\n ],\\n \\\"response_time\\\": 1.09\\n}\\n\\n```\\n\\n## [\\u200b](#tavily-extract) Tavily Extract\\n\\nYou can access Tavily Extract in Python through the client\\u2019s `extract` function.\\n\\n### [\\u200b](#parameters-2) Parameters\\n\\n| Parameter | Type | Description | Default | |\\n| --- | --- | --- | --- | --- |\\n| `urls` **(required)** | `str` or `list[str]` | The URL (or URLs) you want to extract. If a list is provided, it must not contain more than 20 URLs. | | |\\n| `include_images` | `bool` | Include a list of images extracted from the URLs in the response. | `False` | |\\n| `extract_depth` | `str` | The depth of the extraction process. You may experience higher latency with `\\\"advanced\\\"` extraction, but it offers a higher success rate and retrieves more data from the URL (e.g., tables, embedded content). `\\\"basic\\\"` extraction costs 1 API Credit per 5 successful URL extractions, while `advanced` extraction costs 2 API Credits per 5 successful URL extractions. | `\\\"basic\\\"` | |\\n| `timeout` | `int` | A timeout to be used in requests to the Tavily API. | `60` | |\\n\\n### [\\u200b](#response-format-2) Response format\\n\\nThe response object you receive will be in the following format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `results` | `list[SuccessfulResult]` | A list of extracted content. |\\n| `failed_results` | `list[FailedResult]` | A list of URLs that could not be processed. |\\n| `response_time` | `float` | The search result response time. |\\n\\n#### [\\u200b](#successful-results) Successful Results\\n\\nEach successful result in the `results` list will be in the following `SuccessfulResult` format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `url` | `str` | The URL of the webpage. |\\n| `raw_content` | `str` | The raw content extracted. |\\n| `images` (optional) | `list[str]` | This is only available if `include_images` is set to `True`. A list of extracted image URLs. |\\n\\n#### [\\u200b](#failed-results) Failed Results\\n\\nEach failed result in the `results` list will be in the following `FailedResult` format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `url` | `str` | The URL that failed. |\\n| `error` | `str` | An error message describing why it could not be processed. |\\n\\n### [\\u200b](#example-2) Example\\n\\nRequest\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\n# Step 1. Instantiating your TavilyClient\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\n\\n# Step 2. Defining the list of URLs to extract content from\\nurls = [\\n \\\"https://en.wikipedia.org/wiki/Artificial_intelligence\\\",\\n \\\"https://en.wikipedia.org/wiki/Machine_learning\\\",\\n \\\"https://en.wikipedia.org/wiki/Data_science\\\",\\n]\\n\\n# Step 3. Executing the extract request\\nresponse = tavily_client.extract(urls=urls, include_images=True)\\n\\n# Step 4. Printing the extracted raw content\\nprint(response)\\n\\n```\\n\\nResponse\\n\\nCopy\\n\\n```\\n{\\n \\\"results\\\": [\\n {\\n \\\"url\\\": \\\"https://en.wikipedia.org/wiki/Artificial_intelligence\\\",\\n \\\"raw_content\\\": \\\"URL 1 raw content\\\",\\n \\\"images\\\": [\\n \\\"Image 1 URL\\\",\\n \\\"Image 2 URL\\\"\\n ]\\n },\\n {\\n \\\"url\\\": \\\"https://en.wikipedia.org/wiki/Machine_learning\\\",\\n \\\"raw_content\\\": \\\"URL 2 raw content\\\",\\n \\\"images\\\": [\\n \\\"Image 3 URL\\\",\\n \\\"Image 4 URL\\\"\\n ]\\n },\\n {\\n \\\"url\\\": \\\"https://en.wikipedia.org/wiki/Data_science\\\",\\n \\\"raw_content\\\": \\\"URL 3 raw content\\\",\\n \\\"images\\\": [\\n \\\"Image 5 URL\\\",\\n \\\"Image 6 URL\\\"\\n ]\\n }\\n ],\\n \\\"failed_results\\\": [],\\n \\\"response_time\\\": 1.23\\n}\\n\\n```\\n\\n## [\\u200b](#tavily-crawl) Tavily Crawl\\n\\nOur agent-first crawl endpoint, **Tavily Crawl** is currently in **invite-only beta**. If you are interested in joining the beta, please email [support@tavily.com](mailto:support@tavily.com).\\n\\nYou can access Tavily Crawl in Python through the `crawl` function.\\n\\n### [\\u200b](#parameters-3) Parameters\\n\\n| Parameter | Type | Description | Default |\\n| --- | --- | --- | --- |\\n| `url` **(required)** | `str` | The root URL to begin the crawl. | \\u2014 |\\n| `max_depth` | `int` | Max depth of the crawl. Defines how far from the base URL the crawler can explore. | `1` |\\n| `max_breadth` | `int` | Max number of links to follow **per level** of the tree (i.e., per page). | `20` |\\n| `limit` | `int` | Total number of links the crawler will process before stopping. | `50` |\\n| `query` | `str` | Natural language instructions for the crawler. | \\u2014 |\\n| `select_paths` | `str[]` | **Regex patterns** to select only URLs with specific path patterns (e.g., `\\\"/docs/.*\\\"`, `\\\"/api/v1.*\\\"`). | `None` |\\n| `select_domains` | `str[]` | **Regex patterns** to select crawling to specific domains or subdomains (e.g., `\\\"^docs\\\\.example\\\\.com$\\\"`). | `None` |\\n| `allow_external` | `bool` | Whether to allow following links that go to external domains. | `False` |\\n| `categories` | `str[]` | Filter URLs using predefined categories. Options: `\\\"Careers\\\"`, `\\\"Blog\\\"`, `\\\"Documentation\\\"`, `\\\"About\\\"`, `\\\"Pricing\\\"`, `\\\"Community\\\"`, `\\\"Developers\\\"`, `\\\"Contact\\\"`, `\\\"Media\\\"` | `None` |\\n| `extract_depth` | `str` | Advanced extraction retrieves more data, including tables and embedded content, with higher success but may increase latency. Options: `\\\"basic\\\"` or `\\\"advanced\\\"`. | `\\\"basic\\\"` |\\n\\n### [\\u200b](#response-format-3) Response format\\n\\nThe response object you receive will be in the following format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `base_url` | `str` | The URL you started the crawl from. |\\n| `results` | `list[Result]` | A list of crawled pages. |\\n| `response_time` | `float` | The crawl response time. |\\n\\n#### [\\u200b](#results-2) Results\\n\\nEach successful result in the `results` list will be in the following `Result` format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `url` | `str` | The URL of the webpage. |\\n| `raw_content` | `str` | The raw content extracted. |\\n\\n### [\\u200b](#example-3) Example\\n\\nRequest\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\n# Step 1. Instantiating your TavilyClient\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\n\\n# Step 2. Defining the starting URL of the crawl\\nurl = \\\"https://docs.tavily.com\\\"\\n\\n# Step 3. Executing the crawl with some guidance parameters\\nresponse = tavily_client.crawl(url, query=\\\"Python SDK\\\")\\n\\n# Step 4. Printing the crawled results\\nprint(response)\\n\\n```\\n\\nResponse\\n\\nCopy\\n\\n```\\n{\\n 'base_url': 'https://docs.tavily.com',\\n 'results': [\\n {\\n 'url': 'https://docs.tavily.com/sdk/python/quick-start',\\n 'raw_content': 'Quickstart - Tavily Docs\\\\n\\\\n[Tavily Docs home page](https://tavily.com/)\\\\n\\\\nSearch or ask...\\\\n\\\\nCtrl K\\\\n\\\\n- [Support](mailto:support@tavily.com)\\\\n- [Get an API key](https://app.tavily.com)\\\\n- [Get an API key](https://app.tavily.com)\\\\n\\\\nSearch...\\\\n\\\\nNavigation\\\\n\\\\nPython\\\\n\\\\nQuickstart\\\\n\\\\n[Home](/welcome)[Documentation](/documentation/about)[SDKs](/sdk/python/quick-start)[Examples](/examples/use-cases/data-enrichment)[FAQ](/faq/faq)\\\\n\\\\n- [API Playground](https://app.tavily.com/playground)\\\\n- [Community](https://community.tavily.com)\\\\n- [Blog](https://blog.tavily.com)\\\\n\\\\n##### Python\\\\n\\\\n- [Quickstart](/sdk/python/quick-start)\\\\n- [SDK Reference](/sdk/python/reference)\\\\n\\\\n##### JavaScript\\\\n\\\\n- [Quickstart](/sdk/javascript/quick-start)\\\\n- [SDK Reference](/sdk/javascript/reference)\\\\n\\\\nPython\\\\n\\\\n# Quickstart\\\\n\\\\nIntegrate Tavily\\\\'s powerful APIs natively in your Python apps.\\\\n\\\\nLooking for the Python SDK Reference? Head to our [Python SDK Reference](/sdk/python/reference) and learn how to use `tavily-python`.\\\\n\\\\n## [\\\\u200b](#introduction) Introduction\\\\n\\\\nThe Python SDK allows for easy interaction with the Tavily API, offering the full range of our search functionality directly from your Python programs. Easily integrate smart search capabilities into your applications, harnessing Tavily\\\\'s powerful search features.\\\\n\\\\n[## GitHub\\\\n\\\\n`/tavily-ai/tavily-python`\\\\n\\\\n](https://github.com/tavily-ai/tavily-python)[## PyPI\\\\n\\\\n`tavily-python`\\\\n\\\\n](https://pypi.org/project/tavily-python)\\\\n\\\\n## [\\\\u200b](#quickstart) Quickstart\\\\n\\\\nGet started with our Python SDK in less than 5 minutes!\\\\n\\\\n[## Get your free API key\\\\n\\\\nYou get 1,000 free API Credits every month. **No credit card required.**](https://app.tavily.com)\\\\n\\\\n### [\\\\u200b](#installation) Installation\\\\n\\\\nYou can install the Tavily Python SDK using the following:\\\\n\\\\nCopy\\\\n\\\\n```\\\\npip install tavily-python\\\\n\\\\n```\\\\n\\\\n### [\\\\u200b](#usage) Usage\\\\n\\\\nWith Tavily\\\\'s Python SDK, you can search the web in only 4 lines of code:\\\\n\\\\nCopy\\\\n\\\\n```\\\\nfrom tavily import TavilyClient\\\\n\\\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\\\nresponse = tavily_client.search(\\\"Who is Leo Messi?\\\")\\\\n\\\\nprint(response)\\\\n\\\\n```\\\\n\\\\nYou can also easily extract content from URLs:\\\\n\\\\nCopy\\\\n\\\\n```\\\\nfrom tavily import TavilyClient\\\\n\\\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\\\nresponse = tavily_client.extract(\\\"https://en.wikipedia.org/wiki/Lionel_Messi\\\")\\\\n\\\\nprint(response)\\\\n\\\\n```\\\\n\\\\nThese examples are very simple, and you can do so much more with Tavily!\\\\n\\\\n## [\\\\u200b](#features) Features\\\\n\\\\nOur Python SDK supports the full feature range of our [REST API](/api-reference), and more. We offer both a synchronous and an asynchronous client, for increased flexibility.\\\\n\\\\n- The `search` function lets you harness the full power of Tavily Search.\\\\n- The `extract` function allows you to easily retrieve web content with Tavily Extract.\\\\n\\\\nFor more details, head to the [Python SDK Reference](/sdk/python/reference).\\\\n\\\\n[SDK Reference](/sdk/python/reference)\\\\n\\\\n[x](https://x.com/tavilyai)[github](https://github.com/tavily-ai)[linkedin](https://linkedin.com/company/tavily)[website](https://tavily.com)\\\\n\\\\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.tavily.com)\\\\n\\\\nOn this page\\\\n\\\\n- [Introduction](#introduction)\\\\n- [Quickstart](#quickstart)\\\\n- [Installation](#installation)\\\\n- [Usage](#usage)\\\\n- [Features](#features)'\\n }\\n ],\\n 'response_time': 9.14\\n}\\n\\n```\\n\\n## [\\u200b](#tavily-map) Tavily Map\\n\\nOur agent-first mapping endpoint, **Tavily Map** is currently in **invite-only beta**. If you are interested in joining the beta, please email [support@tavily.com](mailto:support@tavily.com).\\n\\nTavily Map allows you to obtain a sitemap starting from a base URL.\\n\\nYou can access Tavily Map in Python through the `map` function.\\n\\n### [\\u200b](#parameters-4) Parameters\\n\\n| Parameter | Type | Description | Default |\\n| --- | --- | --- | --- |\\n| `url` **(required)** | `str` | The root URL to begin the mapping. | \\u2014 |\\n| `max_depth` | `int` | Max depth of the mapping. Defines how far from the base URL the crawler can explore. | `1` |\\n| `max_breadth` | `int` | Max number of links to follow **per level** of the tree (i.e., per page). | `20` |\\n| `limit` | `int` | Total number of links the crawler will process before stopping. | `50` |\\n| `query` | `str` | Natural language instructions for the crawler | \\u2014 |\\n| `select_paths` | `str[]` | **Regex patterns** to select only URLs with specific path patterns (e.g., `\\\"/docs/.*\\\"`, `\\\"/api/v1.*\\\"`). | `None` |\\n| `select_domains` | `str[]` | **Regex patterns** to select crawling to specific domains or subdomains (e.g., `\\\"^docs\\\\.example\\\\.com$\\\"`). | `None` |\\n| `allow_external` | `bool` | Whether to allow following links that go to external domains. | `False` |\\n| `categories` | `str[]` | Filter URLs using predefined categories. Options: `\\\"Careers\\\"`, `\\\"Blog\\\"`, `\\\"Documentation\\\"`, `\\\"About\\\"`, `\\\"Pricing\\\"`, `\\\"Community\\\"`, `\\\"Developers\\\"`, `\\\"Contact\\\"`, `\\\"Media\\\"` | `None` |\\n\\n### [\\u200b](#response-format-4) Response format\\n\\nThe response object you receive will be in the following format:\\n\\n| Key | Type | Description |\\n| --- | --- | --- |\\n| `base_url` | `str` | The URL you started the mapping from. |\\n| `results` | `list[str]` | A list of URLs that were discovered during the mapping. |\\n| `response_time` | `float` | The mapping response time. |\\n\\n### [\\u200b](#example-4) Example\\n\\nRequest\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\n# Step 1. Instantiating your TavilyClient\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\n\\n# Step 2. Defining the starting URL of the mapping\\nurl = \\\"https://docs.tavily.com\\\"\\n\\n# Step 3. Executing the mapping with some guidance parameters\\nresponse = tavily_client.mapping(url, query=\\\"JavaScript\\\")\\n\\n# Step 4. Printing the results\\nprint(response)\\n\\n```\\n\\nResponse\\n\\nCopy\\n\\n```\\n{\\n 'base_url': 'https://docs.tavily.com',\\n 'results': [\\n 'https://docs.tavily.com/sdk/javascript/quick-start',\\n 'https://docs.tavily.com/sdk/javascript/reference',\\n ],\\n 'response_time': 8.43\\n}\\n\\n```\\n\\n## [\\u200b](#tavily-hybrid-rag) Tavily Hybrid RAG\\n\\nTavily Hybrid RAG is an extension of the Tavily Search API built to retrieve relevant data from both the web and an existing database collection. This way, a RAG agent can combine web sources and locally available data to perform its tasks. Additionally, data queried from the web that is not yet in the database can optionally be inserted into it. This will allow similar searches in the future to be answered faster, without the need to query the web again.\\n\\n### [\\u200b](#parameters-5) Parameters\\n\\nThe TavilyHybridClient class is your gateway to Tavily Hybrid RAG. There are a few important parameters to keep in mind when you are instantiating a Tavily Hybrid Client.\\n\\n| Parameter | Type | Description | Default |\\n| --- | --- | --- | --- |\\n| `api_key` | `str` | Your Tavily API Key | |\\n| `db_provider` | `str` | Your database provider. Currently, only `\\\"mongodb\\\"` is supported. | |\\n| `collection` | `str` | A reference to the MongoDB collection that will be used for local search. | |\\n| `embeddings_field` (optional) | `str` | The name of the field that stores the embeddings in the specified collection. This field MUST be the same one used in the specified index. This will also be used when inserting web search results in the database using our default function. | `\\\"embeddings\\\"` |\\n| `content_field` (optional) | `str` | The name of the field that stores the text content in the specified collection. This will also be used when inserting web search results in the database using our default function. | `\\\"content\\\"` |\\n| `embedding_function` (optional) | `function` | A custom embedding function (if you want to use one). The function must take in a `list[str]` corresponding to the list of strings to be embedded, as well as an additional string defining the type of document. It must return a `list[list[float]]`, one embedding per input string. If no function is provided, defaults to Cohere\\u2019s Embed. Keep in mind that you shouldn\\u2019t mix different embeddings in the same database collection. | |\\n| `ranking_function` (optional) | `function` | A custom ranking function (if you want to use one). If no function is provided, defaults to Cohere\\u2019s Rerank. It should return an ordered `list[dict]` where the documents are sorted by decreasing relevancy to your query. Each returned document will have two properties - `content`, which is a `str`, and `score`, which is a `float`. The function MUST accept the following parameters: `query`: `str` - This is the query you are executing. When your ranking function is called during Hybrid RAG, the query parameter of your search call (more details below) will be passed as query. `documents`:`List[Dict]`: - This is the list of documents that are returned by your Hybrid RAG call and that you want to sort. Each document will have two properties - `content`, which is a `str`, and `score`, which is a `float`. `top_n`: `int` - This is the number of results you want to return after ranking. When your ranking function is called during Hybrid RAG, the max\\\\_results value will be passed as `top_n`. | |\\n\\n### [\\u200b](#methods) Methods\\n\\n`search`(query, max\\\\_results=10, max\\\\_local=None, max\\\\_foreign=None, save\\\\_foreign=False, \\\\*\\\\*kwargs)\\n\\nPerforms a Tavily Hybrid RAG query and returns the retrieved documents as a `list[dict]` where the documents are sorted by decreasing relevancy to your query. Each returned document will have three properties - `content` (str), `score` (float), and `origin`, which is either `local` or `foreign`.\\n\\n| Parameter | Type | Description | Default | |\\n| --- | --- | --- | --- | --- |\\n| `query` | `str` | The query you want to search for. | | |\\n| `max_results` | `int` | The maximum number of total search results to return. | 10 | |\\n| `max_local` | `int` | The maximum number of local search results to return. | `None`, which defaults to `max_results`. | |\\n| `max_local` | `int` | The maximum number of local search results to return. | `None`, which defaults to `max_results`. | |\\n| `max_foreign` | `int` | The maximum number of web search results to return. | `None`, which defaults to `max_results`. | |\\n| `save_foreign` | `Union[bool, function]` | Save documents from the web search in the local database. If `True` is passed, our default saving function (which only saves the content `str` and the embedding `list[float]` will be used.) If `False` is passed, no web search result documents will be saved in the local database. If a function is passed, that function MUST take in a `dict` as a parameter, and return another `dict`. The input `dict` contains all properties of the returned Tavily result object. The output dict is the final document that will be inserted in the database. You are free to add to it any fields that are supported by the database, as well as remove any of the default ones. If this function returns `None`, the document will not be saved in the database. | | |\\n\\nAdditional parameters can be provided as keyword arguments (detailed below). The keyword arguments supported by this method are: `search_depth`, `topic`, `include_raw_content`, `include_domains`,`exclude_domains`.\\n\\n### [\\u200b](#setup) Setup\\n\\n#### [\\u200b](#mongodb-setup) MongoDB setup\\n\\nYou will need to have a MongoDB collection with a vector search index. You can follow the [MongoDB Documentation](https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-type/) to learn how to set this up.\\n\\n#### [\\u200b](#cohere-api-key) Cohere API Key\\n\\nBy default, embedding and ranking use the Cohere API, our recommended option. Unless you want to provide a custom embedding and ranking function, you\\u2019ll need to get an API key from [Cohere](https://cohere.com/) and set it as an environment variable named `CO_API_KEY`\\n\\nIf you decide to stick with Cohere, please note that you\\u2019ll need to install the Cohere Python package as well:\\n\\nCopy\\n\\n```\\npip install cohere\\n\\n```\\n\\n#### [\\u200b](#tavily-hybrid-rag-client-setup) Tavily Hybrid RAG Client setup\\n\\nOnce you are done setting up your database, you\\u2019ll need to create a MongoDB Client as well as a Tavily Hybrid RAG Client.\\nA minimal setup would look like this:\\n\\nCopy\\n\\n```\\nfrom pymongo import MongoClient\\nfrom tavily import TavilyHybridClient\\n\\ndb = MongoClient(\\\"mongodb+srv://YOUR_MONGO_URI\\\")[\\\"YOUR_DB\\\"]\\n\\nhybrid_rag = TavilyHybridClient(\\n api_key=\\\"tvly-YOUR_API_KEY\\\",\\n db_provider=\\\"mongodb\\\",\\n collection=db.get_collection(\\\"YOUR_COLLECTION\\\"),\\n index=\\\"YOUR_VECTOR_SEARCH_INDEX\\\",\\n embeddings_field=\\\"YOUR_EMBEDDINGS_FIELD\\\",\\n content_field=\\\"YOUR_CONTENT_FIELD\\\"\\n)\\n\\n```\\n\\n### [\\u200b](#usage) Usage\\n\\nOnce you create the proper clients, you can easily start searching. A few simple examples are shown below. They assume you\\u2019ve followed earlier steps. You can use most of the Tavily Search parameters with Tavily Hybrid RAG as well.\\n\\n#### [\\u200b](#simple-tavily-hybrid-rag-example) Simple Tavily Hybrid RAG example\\n\\nThis example will look for context about Leo Messi on the web and in the local database.\\nHere, we get 5 sources, both from our database and from the web, but we want to exclude unwanted-domain.com from our web search results:\\n\\nCopy\\n\\n```\\nresults = hybrid_rag.search(\\\"Who is Leo Messi?\\\", max_results=5, exclude_domains=['unwanted-domain.com'])\\n\\n```\\n\\nHere, we want to prioritize the number of local sources, so we will get 2 foreign (web) sources, and 5 sources from our database:\\n\\nCopy\\n\\n```\\nresults = hybrid_rag.search(\\\"Who is Leo Messi?\\\", max_local=5, max_foreign=2)\\n\\n```\\n\\nNote: The sum of `max_local` and `max_foreign` can exceed `max_results`, but only the top `max_results` results will be returned.\\n\\n#### [\\u200b](#adding-retrieved-data-to-the-database) Adding retrieved data to the database\\n\\nIf you want to add the retrieved data to the database, you can do so by setting the save\\\\_foreign parameter to True:\\n\\nCopy\\n\\n```\\nresults = hybrid_rag.search(\\\"Who is Leo Messi?\\\", save_foreign=True)\\n\\n```\\n\\nThis will use our default saving function, which stores the content and its embedding.\\n\\n### [\\u200b](#examples) Examples\\n\\n#### [\\u200b](#sample-1%3A-using-a-custom-saving-function) Sample 1: Using a custom saving function\\n\\nYou might want to add some extra properties to documents you\\u2019re inserting or even discard some of them based on custom criteria. This can be done by passing a function to the save\\\\_foreign parameter:\\n\\nCopy\\n\\n```\\ndef save_document(document):\\n if document['score'] < 0.5:\\n return None # Do not save documents with low scores\\n\\n return {\\n 'content': document['content'],\\n\\n # Save the title and URL in the database\\n 'site_title': document['title'],\\n 'site_url': document['url'],\\n\\n # Add a new field\\n 'added_at': datetime.now()\\n }\\n\\nresults = hybrid_rag.search(\\\"Who is Leo Messi?\\\", save_foreign=save_document)\\n\\n```\\n\\n#### [\\u200b](#sample-2%3A-using-a-custom-embedding-function) Sample 2: Using a custom embedding function\\n\\nBy default, we use [Cohere](https://cohere.com/) for our embeddings. If you want to use your own embeddings, can pass a custom embedding function to the TavilyHybridClient:\\n\\nCopy\\n\\n```\\ndef my_embedding_function(texts, doc_type): # doc_type will be either 'search_query' or 'search_document'\\n return my_embedding_model.encode(texts)\\n\\nhybrid_rag = TavilyHybridClient(\\n # ...\\n embedding_function=my_embedding_function\\n)\\n\\n```\\n\\n#### [\\u200b](#sample-3%3A-using-a-custom-ranking-function) Sample 3: Using a custom ranking function\\n\\nCohere\\u2019s [rerank](https://cohere.com/rerank) model is used by default, but you can pass your own function to the ranking\\\\_function parameter:\\n\\nCopy\\n\\n```\\ndef my_ranking_function(query, documents, top_n):\\n return my_ranking_model.rank(query, documents, top_n)\\n\\nhybrid_rag = TavilyHybridClient(\\n # ...\\n ranking_function=my_ranking_function\\n)\\n\\n```\\n\\n[Quickstart](/sdk/python/quick-start)[Quickstart](/sdk/javascript/quick-start)\\n\\n[x](https://x.com/tavilyai)[github](https://github.com/tavily-ai)[linkedin](https://linkedin.com/company/tavily)[website](https://tavily.com)\\n\\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.tavily.com)\\n\\nOn this page\\n\\n- [Instantiating a client](#instantiating-a-client)\\n- [Synchronous Client](#synchronous-client)\\n- [Asynchronous Client](#asynchronous-client)\\n- [Proxies](#proxies)\\n- [Tavily Search](#tavily-search)\\n- [Parameters](#parameters)\\n- [Response format](#response-format)\\n- [Results](#results)\\n- [Image Results](#image-results)\\n- [Example](#example)\\n- [Tavily Extract](#tavily-extract)\\n- [Parameters](#parameters-2)\\n- [Response format](#response-format-2)\\n- [Successful Results](#successful-results)\\n- [Failed Results](#failed-results)\\n- [Example](#example-2)\\n- [Tavily Crawl](#tavily-crawl)\\n- [Parameters](#parameters-3)\\n- [Response format](#response-format-3)\\n- [Results](#results-2)\\n- [Example](#example-3)\\n- [Tavily Map](#tavily-map)\\n- [Parameters](#parameters-4)\\n- [Response format](#response-format-4)\\n- [Example](#example-4)\\n- [Tavily Hybrid RAG](#tavily-hybrid-rag)\\n- [Parameters](#parameters-5)\\n- [Methods](#methods)\\n- [Setup](#setup)\\n- [MongoDB setup](#mongodb-setup)\\n- [Cohere API Key](#cohere-api-key)\\n- [Tavily Hybrid RAG Client setup](#tavily-hybrid-rag-client-setup)\\n- [Usage](#usage)\\n- [Simple Tavily Hybrid RAG example](#simple-tavily-hybrid-rag-example)\\n- [Adding retrieved data to the database](#adding-retrieved-data-to-the-database)\\n- [Examples](#examples)\\n- [Sample 1: Using a custom saving function](#sample-1%3A-using-a-custom-saving-function)\\n- [Sample 2: Using a custom embedding function](#sample-2%3A-using-a-custom-embedding-function)\\n- [Sample 3: Using a custom ranking function](#sample-3%3A-using-a-custom-ranking-function)\",\n \"images\": []\n },\n {\n \"url\": \"https://docs.tavily.com/sdk/python/quick-start\",\n \"raw_content\": \"Quickstart - Tavily Docs\\n\\n[Tavily Docs home page](https://tavily.com/)\\n\\nSearch or ask...\\n\\nCtrl K\\n\\n- [Support](mailto:support@tavily.com)\\n- [Get an API key](https://app.tavily.com)\\n- [Get an API key](https://app.tavily.com)\\n\\nSearch...\\n\\nNavigation\\n\\nPython\\n\\nQuickstart\\n\\n[Home](/welcome)[Documentation](/documentation/about)[SDKs](/sdk/python/quick-start)[Examples](/examples/use-cases/data-enrichment)[FAQ](/faq/faq)\\n\\n- [API Playground](https://app.tavily.com/playground)\\n- [Community](https://community.tavily.com)\\n- [Blog](https://blog.tavily.com)\\n\\n##### Python\\n\\n- [Quickstart](/sdk/python/quick-start)\\n- [SDK Reference](/sdk/python/reference)\\n\\n##### JavaScript\\n\\n- [Quickstart](/sdk/javascript/quick-start)\\n- [SDK Reference](/sdk/javascript/reference)\\n\\nPython\\n\\n# Quickstart\\n\\nIntegrate Tavily\\u2019s powerful APIs natively in your Python apps.\\n\\nLooking for the Python SDK Reference? Head to our [Python SDK Reference](/sdk/python/reference) and learn how to use `tavily-python`.\\n\\n## [\\u200b](#introduction) Introduction\\n\\nThe Python SDK allows for easy interaction with the Tavily API, offering the full range of our search functionality directly from your Python programs. Easily integrate smart search capabilities into your applications, harnessing Tavily\\u2019s powerful search features.\\n\\n[## GitHub\\n\\n`/tavily-ai/tavily-python`\\n\\n](https://github.com/tavily-ai/tavily-python)[## PyPI\\n\\n`tavily-python`\\n\\n](https://pypi.org/project/tavily-python)\\n\\n## [\\u200b](#quickstart) Quickstart\\n\\nGet started with our Python SDK in less than 5 minutes!\\n\\n[## Get your free API key\\n\\nYou get 1,000 free API Credits every month. **No credit card required.**](https://app.tavily.com)\\n\\n### [\\u200b](#installation) Installation\\n\\nYou can install the Tavily Python SDK using the following:\\n\\nCopy\\n\\n```\\npip install tavily-python\\n\\n```\\n\\n### [\\u200b](#usage) Usage\\n\\nWith Tavily\\u2019s Python SDK, you can search the web in only 4 lines of code:\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\nresponse = tavily_client.search(\\\"Who is Leo Messi?\\\")\\n\\nprint(response)\\n\\n```\\n\\nYou can also easily extract content from URLs:\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\nresponse = tavily_client.extract(\\\"https://en.wikipedia.org/wiki/Lionel_Messi\\\")\\n\\nprint(response)\\n\\n```\\n\\nTavily also allows you to perform a smart crawl starting at a given URL.\\n\\nOur agent-first crawl is currently in **invite-only beta**. If you are interested in joining the beta, please email [support@tavily.com](mailto:support@tavily.com).\\n\\nCopy\\n\\n```\\nfrom tavily import TavilyClient\\n\\ntavily_client = TavilyClient(api_key=\\\"tvly-YOUR_API_KEY\\\")\\nresponse = tavily_client.crawl(\\\"https://docs.tavily.com\\\", query=\\\"Python SDK\\\")\\n\\nprint(response)\\n\\n```\\n\\nThese examples are very simple, and you can do so much more with Tavily!\\n\\n## [\\u200b](#features) Features\\n\\nOur Python SDK supports the full feature range of our [REST API](/api-reference), and more. We offer both a synchronous and an asynchronous client, for increased flexibility.\\n\\n- The `search` function lets you harness the full power of Tavily Search.\\n- The `extract` function allows you to easily retrieve web content with Tavily Extract.\\n\\nFor more details, head to the [Python SDK Reference](/sdk/python/reference).\\n\\n[SDK Reference](/sdk/python/reference)\\n\\n[x](https://x.com/tavilyai)[github](https://github.com/tavily-ai)[linkedin](https://linkedin.com/company/tavily)[website](https://tavily.com)\\n\\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.tavily.com)\\n\\nOn this page\\n\\n- [Introduction](#introduction)\\n- [Quickstart](#quickstart)\\n- [Installation](#installation)\\n- [Usage](#usage)\\n- [Features](#features)\",\n \"images\": []\n }\n ],\n \"response_time\": 9.07\n}\n\n```\n\n## [](#tavily-map) Tavily Map\n\nOur agent-first mapping endpoint, **Tavily Map** is currently in **invite-only beta**. If you are interested in joining the beta, please email [support@tavily.com](mailto:support@tavily.com).\n\nTavily Map allows you to obtain a sitemap starting from a base URL.\n\nYou can access Tavily Map in Python through the `map` function.\n\n### [](#parameters-4) Parameters\n\n| Parameter | Type | Description | Default |\n| --- | --- | --- | --- |\n| `url` **(required)** | `str` | The root URL to begin the mapping. | — |\n| `max_depth` | `int` | Max depth of the mapping. Defines how far from the base URL the crawler can explore. | `1` |\n| `max_breadth` | `int` | Max number of links to follow **per level** of the tree (i.e., per page). | `20` |\n| `limit` | `int` | Total number of links the crawler will process before stopping. | `50` |\n| `query` | `str` | Natural language instructions for the crawler | — |\n| `select_paths` | `list[str]` | **Regex patterns** to select only URLs with specific path patterns (e.g., `\"/docs/.*\"`, `\"/api/v1.*\"`). | `None` |\n| `select_domains` | `list[str]` | **Regex patterns** to select crawling to specific domains or subdomains (e.g., `\"^docs\\.example\\.com$\"`). | `None` |\n| `allow_external` | `bool` | Whether to allow following links that go to external domains. | `False` |\n| `categories` | `list[str]` | Filter URLs using predefined categories. Options: `\"Careers\"`, `\"Blog\"`, `\"Documentation\"`, `\"About\"`, `\"Pricing\"`, `\"Community\"`, `\"Developers\"`, `\"Contact\"`, `\"Media\"` | `None` |\n\n### [](#response-format-4) Response format\n\nThe response object you receive will be in the following format:\n\n| Key | Type | Description |\n| --- | --- | --- |\n| `base_url` | `str` | The URL you started the mapping from. |\n| `results` | `list[str]` | A list of URLs that were discovered during the mapping. |\n| `response_time` | `float` | The mapping response time. |\n\n### [](#example-4) Example\n\nRequest\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\n# Step 1. Instantiating your TavilyClient\ntavily_client = TavilyClient(api_key=\"tvly-YOUR_API_KEY\")\n\n# Step 2. Defining the starting URL of the mapping\nurl = \"https://docs.tavily.com\"\n\n# Step 3. Executing the mapping with some guidance parameters\nresponse = tavily_client.mapping(url, query=\"JavaScript\")\n\n# Step 4. Printing the results\nprint(response)\n\n```\n\nResponse\n\nCopy\n\n```\n{\n 'base_url': 'https://docs.tavily.com',\n 'results': [\n 'https://docs.tavily.com/sdk/javascript/quick-start',\n 'https://docs.tavily.com/sdk/javascript/reference',\n ],\n 'response_time': 8.43\n}\n\n```\n\n## [](#tavily-hybrid-rag) Tavily Hybrid RAG\n\nTavily Hybrid RAG is an extension of the Tavily Search API built to retrieve relevant data from both the web and an existing database collection. This way, a RAG agent can combine web sources and locally available data to perform its tasks. Additionally, data queried from the web that is not yet in the database can optionally be inserted into it. This will allow similar searches in the future to be answered faster, without the need to query the web again.\n\n### [](#parameters-5) Parameters\n\nThe TavilyHybridClient class is your gateway to Tavily Hybrid RAG. There are a few important parameters to keep in mind when you are instantiating a Tavily Hybrid Client.\n\n| Parameter | Type | Description | Default |\n| --- | --- | --- | --- |\n| `api_key` | `str` | Your Tavily API Key | |\n| `db_provider` | `str` | Your database provider. Currently, only `\"mongodb\"` is supported. | |\n| `collection` | `str` | A reference to the MongoDB collection that will be used for local search. | |\n| `embeddings_field` (optional) | `str` | The name of the field that stores the embeddings in the specified collection. This field MUST be the same one used in the specified index. This will also be used when inserting web search results in the database using our default function. | `\"embeddings\"` |\n| `content_field` (optional) | `str` | The name of the field that stores the text content in the specified collection. This will also be used when inserting web search results in the database using our default function. | `\"content\"` |\n| `embedding_function` (optional) | `function` | A custom embedding function (if you want to use one). The function must take in a `list[str]` corresponding to the list of strings to be embedded, as well as an additional string defining the type of document. It must return a `list[list[float]]`, one embedding per input string. If no function is provided, defaults to Cohere’s Embed. Keep in mind that you shouldn’t mix different embeddings in the same database collection. | |\n| `ranking_function` (optional) | `function` | A custom ranking function (if you want to use one). If no function is provided, defaults to Cohere’s Rerank. It should return an ordered `list[dict]` where the documents are sorted by decreasing relevancy to your query. Each returned document will have two properties - `content`, which is a `str`, and `score`, which is a `float`. The function MUST accept the following parameters: `query`: `str` - This is the query you are executing. When your ranking function is called during Hybrid RAG, the query parameter of your search call (more details below) will be passed as query. `documents`:`List[Dict]`: - This is the list of documents that are returned by your Hybrid RAG call and that you want to sort. Each document will have two properties - `content`, which is a `str`, and `score`, which is a `float`. `top_n`: `int` - This is the number of results you want to return after ranking. When your ranking function is called during Hybrid RAG, the max\\_results value will be passed as `top_n`. | |\n\n### [](#methods) Methods\n\n`search`(query, max\\_results=10, max\\_local=None, max\\_foreign=None, save\\_foreign=False, \\*\\*kwargs)\n\nPerforms a Tavily Hybrid RAG query and returns the retrieved documents as a `list[dict]` where the documents are sorted by decreasing relevancy to your query. Each returned document will have three properties - `content` (str), `score` (float), and `origin`, which is either `local` or `foreign`.\n\n| Parameter | Type | Description | Default | |\n| --- | --- | --- | --- | --- |\n| `query` | `str` | The query you want to search for. | — | |\n| `max_results` | `int` | The maximum number of total search results to return. | 10 | |\n| `max_local` | `int` | The maximum number of local search results to return. | `None`, which defaults to `max_results`. | |\n| `max_local` | `int` | The maximum number of local search results to return. | `None`, which defaults to `max_results`. | |\n| `max_foreign` | `int` | The maximum number of web search results to return. | `None`, which defaults to `max_results`. | |\n| `save_foreign` | `Union[bool, function]` | Save documents from the web search in the local database. If `True` is passed, our default saving function (which only saves the content `str` and the embedding `list[float]` will be used.) If `False` is passed, no web search result documents will be saved in the local database. If a function is passed, that function MUST take in a `dict` as a parameter, and return another `dict`. The input `dict` contains all properties of the returned Tavily result object. The output dict is the final document that will be inserted in the database. You are free to add to it any fields that are supported by the database, as well as remove any of the default ones. If this function returns `None`, the document will not be saved in the database. | — | |\n\nAdditional parameters can be provided as keyword arguments (detailed below). The keyword arguments supported by this method are: `search_depth`, `topic`, `include_raw_content`, `include_domains`,`exclude_domains`.\n\n### [](#setup) Setup\n\n#### [](#mongodb-setup) MongoDB setup\n\nYou will need to have a MongoDB collection with a vector search index. You can follow the [MongoDB Documentation](https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-type/) to learn how to set this up.\n\n#### [](#cohere-api-key) Cohere API Key\n\nBy default, embedding and ranking use the Cohere API, our recommended option. Unless you want to provide a custom embedding and ranking function, you’ll need to get an API key from [Cohere](https://cohere.com/) and set it as an environment variable named `CO_API_KEY`\n\nIf you decide to stick with Cohere, please note that you’ll need to install the Cohere Python package as well:\n\nCopy\n\n```\npip install cohere\n\n```\n\n#### [](#tavily-hybrid-rag-client-setup) Tavily Hybrid RAG Client setup\n\nOnce you are done setting up your database, you’ll need to create a MongoDB Client as well as a Tavily Hybrid RAG Client.\nA minimal setup would look like this:\n\nCopy\n\n```\nfrom pymongo import MongoClient\nfrom tavily import TavilyHybridClient\n\ndb = MongoClient(\"mongodb+srv://YOUR_MONGO_URI\")[\"YOUR_DB\"]\n\nhybrid_rag = TavilyHybridClient(\n api_key=\"tvly-YOUR_API_KEY\",\n db_provider=\"mongodb\",\n collection=db.get_collection(\"YOUR_COLLECTION\"),\n index=\"YOUR_VECTOR_SEARCH_INDEX\",\n embeddings_field=\"YOUR_EMBEDDINGS_FIELD\",\n content_field=\"YOUR_CONTENT_FIELD\"\n)\n\n```\n\n### [](#usage) Usage\n\nOnce you create the proper clients, you can easily start searching. A few simple examples are shown below. They assume you’ve followed earlier steps. You can use most of the Tavily Search parameters with Tavily Hybrid RAG as well.\n\n#### [](#simple-tavily-hybrid-rag-example) Simple Tavily Hybrid RAG example\n\nThis example will look for context about Leo Messi on the web and in the local database.\nHere, we get 5 sources, both from our database and from the web, but we want to exclude unwanted-domain.com from our web search results:\n\nCopy\n\n```\nresults = hybrid_rag.search(\"Who is Leo Messi?\", max_results=5, exclude_domains=['unwanted-domain.com'])\n\n```\n\nHere, we want to prioritize the number of local sources, so we will get 2 foreign (web) sources, and 5 sources from our database:\n\nCopy\n\n```\nresults = hybrid_rag.search(\"Who is Leo Messi?\", max_local=5, max_foreign=2)\n\n```\n\nNote: The sum of `max_local` and `max_foreign` can exceed `max_results`, but only the top `max_results` results will be returned.\n\n#### [](#adding-retrieved-data-to-the-database) Adding retrieved data to the database\n\nIf you want to add the retrieved data to the database, you can do so by setting the save\\_foreign parameter to True:\n\nCopy\n\n```\nresults = hybrid_rag.search(\"Who is Leo Messi?\", save_foreign=True)\n\n```\n\nThis will use our default saving function, which stores the content and its embedding.\n\n### [](#examples) Examples\n\n#### [](#sample-1%3A-using-a-custom-saving-function) Sample 1: Using a custom saving function\n\nYou might want to add some extra properties to documents you’re inserting or even discard some of them based on custom criteria. This can be done by passing a function to the save\\_foreign parameter:\n\nCopy\n\n```\ndef save_document(document):\n if document['score'] < 0.5:\n return None # Do not save documents with low scores\n\n return {\n 'content': document['content'],\n\n # Save the title and URL in the database\n 'site_title': document['title'],\n 'site_url': document['url'],\n\n # Add a new field\n 'added_at': datetime.now()\n }\n\nresults = hybrid_rag.search(\"Who is Leo Messi?\", save_foreign=save_document)\n\n```\n\n#### [](#sample-2%3A-using-a-custom-embedding-function) Sample 2: Using a custom embedding function\n\nBy default, we use [Cohere](https://cohere.com/) for our embeddings. If you want to use your own embeddings, can pass a custom embedding function to the TavilyHybridClient:\n\nCopy\n\n```\ndef my_embedding_function(texts, doc_type): # doc_type will be either 'search_query' or 'search_document'\n return my_embedding_model.encode(texts)\n\nhybrid_rag = TavilyHybridClient(\n # ...\n embedding_function=my_embedding_function\n)\n\n```\n\n#### [](#sample-3%3A-using-a-custom-ranking-function) Sample 3: Using a custom ranking function\n\nCohere’s [rerank](https://cohere.com/rerank) model is used by default, but you can pass your own function to the ranking\\_function parameter:\n\nCopy\n\n```\ndef my_ranking_function(query, documents, top_n):\n return my_ranking_model.rank(query, documents, top_n)\n\nhybrid_rag = TavilyHybridClient(\n # ...\n ranking_function=my_ranking_function\n)\n\n```\n\n[Quickstart](/sdk/python/quick-start)[Quickstart](/sdk/javascript/quick-start)\n\n[x](https://x.com/tavilyai)[github](https://github.com/tavily-ai)[linkedin](https://linkedin.com/company/tavily)[website](https://tavily.com)\n\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=referral&utm_source=docs.tavily.com)\n\nOn this page\n\n- [Instantiating a client](#instantiating-a-client)\n- [Synchronous Client](#synchronous-client)\n- [Asynchronous Client](#asynchronous-client)\n- [Proxies](#proxies)\n- [Tavily Search](#tavily-search)\n- [Parameters](#parameters)\n- [Response format](#response-format)\n- [Results](#results)\n- [Image Results](#image-results)\n- [Example](#example)\n- [Tavily Extract](#tavily-extract)\n- [Parameters](#parameters-2)\n- [Response format](#response-format-2)\n- [Successful Results](#successful-results)\n- [Failed Results](#failed-results)\n- [Example](#example-2)\n- [Tavily Crawl](#tavily-crawl)\n- [Parameters](#parameters-3)\n- [Response format](#response-format-3)\n- [Results](#results-2)\n- [Example](#example-3)\n- [Tavily Map](#tavily-map)\n- [Parameters](#parameters-4)\n- [Response format](#response-format-4)\n- [Example](#example-4)\n- [Tavily Hybrid RAG](#tavily-hybrid-rag)\n- [Parameters](#parameters-5)\n- [Methods](#methods)\n- [Setup](#setup)\n- [MongoDB setup](#mongodb-setup)\n- [Cohere API Key](#cohere-api-key)\n- [Tavily Hybrid RAG Client setup](#tavily-hybrid-rag-client-setup)\n- [Usage](#usage)\n- [Simple Tavily Hybrid RAG example](#simple-tavily-hybrid-rag-example)\n- [Adding retrieved data to the database](#adding-retrieved-data-to-the-database)\n- [Examples](#examples)\n- [Sample 1: Using a custom saving function](#sample-1%3A-using-a-custom-saving-function)\n- [Sample 2: Using a custom embedding function](#sample-2%3A-using-a-custom-embedding-function)\n- [Sample 3: Using a custom ranking function](#sample-3%3A-using-a-custom-ranking-function)",
"images": []
},
{
url: "https://docs.tavily.com/sdk/python/quick-start",
rawContent: "Quickstart - Tavily Docs\n\n[Tavily Docs home page](https://tavily.com/)\n\nSearch or ask...\n\nCtrl K\n\n- [Support](mailto:support@tavily.com)\n- [Get an API key](https://app.tavily.com)\n- [Get an API key](https://app.tavily.com)\n\nSearch...\n\nNavigation\n\nPython\n\nQuickstart\n\n[Home](/welcome)[Documentation](/documentation/about)[SDKs](/sdk/python/quick-start)[Examples](/examples/use-cases/data-enrichment)[FAQ](/faq/faq)\n\n- [API Playground](https://app.tavily.com/playground)\n- [Community](https://community.tavily.com)\n- [Blog](https://blog.tavily.com)\n\n##### Python\n\n- [Quickstart](/sdk/python/quick-start)\n- [SDK Reference](/sdk/python/reference)\n\n##### JavaScript\n\n- [Quickstart](/sdk/javascript/quick-start)\n- [SDK Reference](/sdk/javascript/reference)\n\nPython\n\n# Quickstart\n\nIntegrate Tavily's powerful APIs natively in your Python apps.\n\nLooking for the Python SDK Reference? Head to our [Python SDK Reference](/sdk/python/reference) and learn how to use `tavily-python`.\n\n## [](#introduction) Introduction\n\nThe Python SDK allows for easy interaction with the Tavily API, offering the full range of our search functionality directly from your Python programs. Easily integrate smart search capabilities into your applications, harnessing Tavily's powerful search features.\n\n[## GitHub\n\n`/tavily-ai/tavily-python`\n\n](https://github.com/tavily-ai/tavily-python)[## PyPI\n\n`tavily-python`\n\n](https://pypi.org/project/tavily-python)\n\n## [](#quickstart) Quickstart\n\nGet started with our Python SDK in less than 5 minutes!\n\n[## Get your free API key\n\nYou get 1,000 free API Credits every month. **No credit card required.**](https://app.tavily.com)\n\n### [](#installation) Installation\n\nYou can install the Tavily Python SDK using the following:\n\nCopy\n\n```\npip install tavily-python\n\n```\n\n### [](#usage) Usage\n\nWith Tavily's Python SDK, you can search the web in only 4 lines of code:\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\ntavily_client = TavilyClient(api_key="tvly-YOUR_API_KEY")\nresponse = tavily_client.search("Who is Leo Messi?")\n\nprint(response)\n\n```\n\nYou can also easily extract content from URLs:\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\ntavily_client = TavilyClient(api_key="tvly-YOUR_API_KEY")\nresponse = tavily_client.extract("https://en.wikipedia.org/wiki/Lionel_Messi")\n\nprint(response)\n\n```\n\nTavily also allows you to perform a smart crawl starting at a given URL.\n\nOur agent-first crawl is currently in **invite-only beta**. If you are interested in joining the beta, please email [support@tavily.com](mailto:support@tavily.com).\n\nCopy\n\n```\nfrom tavily import TavilyClient\n\ntavily_client = TavilyClient(api_key="tvly-YOUR_API_KEY")\nresponse = tavily_client.crawl("https://docs.tavily.com", query="Python SDK")\n\nprint(response)\n\n```\n\nThese examples are very simple, and you can do so much more with Tavily!\n\n## [](#features) Features\n\nOur Python SDK supports the full feature range of our [REST API](/api-reference), and more. We offer both a synchronous and an asynchronous client, for increased flexibility.\n\n- The `search` function lets you harness the full power of Tavily Search.\n- The `extract` function allows you to easily retrieve web content with Tavily Extract.\n\nFor more details, head to the [Python SDK Reference](/sdk/python/reference).\n\n[SDK Reference](/sdk/python/reference)\n\n[x](https://x.com/tavilyai)[github](https://github.com/tavily-ai)[linkedin](https://linkedin.com/company/tavily)[website](https://tavily.com)\n\n[Powered by Mintlify](https://mintlify.com/preview-request?utm_campaign=poweredBy&utm_medium=docs&utm_source=docs.tavily.com)\n\nOn this page\n\n- [Introduction](#introduction)\n- [Quickstart](#quickstart)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Features](#features)",
images: []
},
{
"url": "https://docs.tavily.com/docs/python-sdk/tavily-search/getting-started",
"raw_content": "Welcome - Tavily Docs\n\n[Tavily Docs home page](https://tavily.com/)\n\nSearch or ask...\n\nCtrl K\n\n- [Support](mailto:support@tavily.com)\n- [Get an API key](https://app.tavily.com)\n- [Get an API key](https://app.tavily.com)\n\nSearch...\n\nNavigation\n\n[Home](/welcome)[Documentation](/documentation/about)[SDKs](/sdk/python/quick-start)[Examples](/examples/use-cases/data-enrichment)[FAQ](/faq/faq)\n\nExplore our docs\n\nYour journey to state-of-the-art web search starts right here.\n\n[## Quickstart\n\nStart searching with Tavily in minutes](documentation/quickstart)[## API Reference\n\nStart using Tavily’s powerful APIs](documentation/api-reference/endpoint/search)[## API Credits Overview\n\nLearn how to get and manage your Tavily API Credits](documentation/api-credits)[## Rate Limits\n\nLearn about Tavily’s API rate limits for both development and production environments](documentation/rate-limits)[## Python\n\nGet started with our Python SDK, `tavily-python`](sdk/python/quick-start)[## Playground\n\nExplore Tavily’s APIs with our interactive playground](https://app.tavily.com/playground)",
"images": []
}
]
}
Tavily Map
Our agent-first mapping endpoint, Tavily Map is currently in invite-only beta. If you are interested in joining the beta, please email support@tavily.com.
You can access Tavily Map in JavaScript through the client’s map
function.
Parameters
Parameter | Type | Description | Default |
---|---|---|---|
url (required) | string | The root URL to begin the mapping. | — |
maxDepth | number | Max depth of the mapping. Defines how far from the base URL the crawler can explore. | 1 |
maxBreadth | number | Max number of links to follow per level of the tree (i.e., per page). | 20 |
limit | number | Total number of links the crawler will process before stopping. | 50 |
instructions | string | Natural language instructions for the mapper. | — |
selectPaths | string[] | Regex patterns to select only URLs with specific path patterns (e.g., "/docs/.*" , "/api/v1.*" ). | [] |
selectDomains | string[] | Regex patterns to select crawling to specific domains or subdomains (e.g., "^docs\.example\.com$" ). | [] |
excludePaths | string[] | Regex patterns to exclude URLs with specific path patterns (e.g., "/admin/.*" , "/private/.*" ). | [] |
excludeDomains | string[] | Regex patterns to exclude specific domains or subdomains from mapping (e.g., "^admin\.example\.com$" ). | [] |
allowExternal | boolean | Whether to return links from external domains in crawl output. | false |
categories | string[] | Filter URLs using predefined categories. Options: "Careers" , "Blog" , "Documentation" , "About" , "Pricing" , "Community" , "Developers" , "Contact" , "Media" | [] |
timeout | number | A timeout to be used in requests to the Tavily API. | 60 |
Response format
The response object you receive will be in the following format:
Key | Type | Description |
---|---|---|
baseUrl | string | The URL you started the crawl from. |
results | string[] | A list of URLs that were discovered during the mapping. |
responseTime | number | The crawl response time. |
Example
const { tavily } = require("@tavily/core");
// Step 1. Instantiating your Tavily client
const tvly = tavily({ apiKey: "tvly-YOUR_API_KEY" });
// Step 2. Defining the starting URL of the mapping
const url = "https://docs.tavily.com";
// Step 3. Executing the mapping with some guidance parameters
const response = await client.map(url, { instructions: "Find all pages on the Python SDK" });
// Step 4. Printing the results
console.log(response);
{
baseUrl: 'https://docs.tavily.com',
results:[
'https://docs.tavily.com/sdk/python/reference',
'https://docs.tavily.com/sdk/python/quick-start',
'https://docs.tavily.com/docs/python-sdk/tavily-search/getting-started'
],
responseTime: 8.43
}