Tavily API - Complete Developer Guide to Web Search, Extraction, Crawling, Mapping & Research

Tavily is a developer API designed to connect AI agents and applications to up-to-date web information. Instead of building your own search + scraping pipeline from scratch, Tavily provides a single API surface for (1) searching the web in an agent-friendly format, (2) extracting clean content from URLs, (3) crawling and mapping sites as a graph, and (4) running multi-step “research tasks” that produce a synthesized report with sources.

This page is a practical, developer-focused reference. It explains what each endpoint does, how authentication and rate limits work, how API credits are billed, and how to build a production architecture that stays fast, reliable, and cost-predictable.

Base URL: https://api.tavily.com
Auth: Bearer tvly-… API key
RPM: Dev 100 / Prod 1,000
Core endpoints: /search, /extract, /crawl, /map, /research
Usage endpoint: GET /usage

1) What is the Tavily API?

High-level model: web intelligence primitives for AI apps

What Tavily gives you

Tavily is built around a simple promise: your application can ask the web for information, and get back results that are ready to use in an AI workflow (RAG, agents, research assistants, support bots, dashboards). Tavily’s endpoints cover the full pipeline:

SearchWeb search with agent-friendly snippets, optional answer, optional raw content, domain filters, and recency filters.
ExtractClean content from one or more URLs (markdown or text), optional images, advanced depth for tables/embedded data.
MapGenerate a structured map of URLs on a site (graph traversal) with depth/breadth/limits and optional instructions.
CrawlMap + extract combined as a single operation, designed for site-scale workflows.
ResearchMulti-search + analysis + synthesis into a report with sources; supports streaming via SSE.
UsageProgrammatic visibility into key and account usage / limits.

When Tavily is a good fit

Tavily is especially useful when you’re building an AI product that needs current information and you want a single provider to handle the messy parts: selecting sources, extracting readable content, and returning data in a format that’s easy to feed into a model.

Common use cases include:

  • Agent web search (tools in LangChain/LlamaIndex/CrewAI, etc.) with configurable depth and domain targeting.
  • RAG augmentation: search → extract → chunk → embed → store in a vector DB, then retrieve for grounded answers.
  • Research reports: multi-step research that produces a structured report and source list.
  • Competitive intelligence and market monitoring (news, finance topics, recent updates).
  • Data enrichment: enrich a dataset with verified facts and source URLs.
  • Internal knowledge bootstrapping: crawl and extract documentation sites, help centers, or product wikis.

A helpful mental model: Tavily isn’t “just a search API.” It’s a web intelligence toolkit: search, extract, navigate site graphs, and synthesize research—then measure usage and cost as credits.

How Tavily differs from “traditional search APIs”

Traditional search APIs often return a SERP-style response (titles + links + maybe snippets). To use them in AI, you typically still need to fetch pages, clean HTML, remove navigation noise, handle paywalls, normalize encoding, and build a reranking strategy.

Tavily aims to reduce that extra work by returning AI-ready results: ranked sources plus useful content snippets and optional extracted content for each result. It also gives you explicit controls (search depth, time filtering, domain allow/deny lists, country boosting, etc.) so you can tune quality and cost instead of accepting a one-size SERP.

2) Quickstart: authentication and your first request

cURL first, then SDKs

Authentication (API key)

All Tavily endpoints are authenticated using an API key. You pass your key via an Authorization header using Bearer auth:

Authorization: Bearer tvly-YOUR_API_KEY

Tavily also supports an optional X-Project-ID header so you can track and organize usage by project when one API key is shared across multiple apps or environments.

X-Project-ID: your-project-id

Monthly free credits (starter usage)

Tavily’s platform provides a free tier that includes a monthly credit allowance (commonly shown as 1,000 free API credits per month with no credit card required on the quickstart page). You can use the /usage endpoint to monitor your key and account limits in real time.

Always treat credits as a budget: search depth, raw content, extraction depth, mapping/crawling scope, and research model selection all influence the cost.

Your first request (cURL): POST /search

The simplest Tavily call is a search. You POST JSON with a query.

curl -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "query": "Who is Leo Messi?"
  }'

A typical response includes the query, a list of ranked results, and optionally usage data (credits) if requested. Some fields appear only if you enable the related parameters (for example, answer generation or raw content).

3) Tavily API endpoints (what they do + how to use them)

Everything you need for Search, Extract, Crawl, Map, Research, and Usage

Endpoint overview

Endpoint Method Purpose Common use
/search POST Search the web and return ranked results with configurable depth and optional answer/raw content. Agent tool calls, “search-first” RAG, news monitoring
/extract POST Extract clean page content from one or more URLs (markdown/text), optionally images/favicon. Fetch full content for indexing, citations, or fact verification
/map POST Traverse a website as a graph to produce a site map (URLs), with depth/breadth/limits. Discover docs/help-center structure before extraction
/crawl POST Graph-based traversal with built-in extraction and discovery (map + extract combined). Turn a domain into a knowledge base, large-scale ingestion
/research POST Create a research task: multiple searches + analysis + synthesized report (can stream). Long-form research, multi-angle summaries with sources
/research/{request_id} GET Fetch the status and final result of a research task. Polling flow for asynchronous research jobs
/usage GET Get API key usage and account plan usage details. Budget dashboards, alerts, and safe throttling

3.2) POST /extract — Tavily Extract

Clean page content from one or many URLs

What Extract does

Extract pulls clean content from one or more specified URLs. Unlike Search (which finds sources), Extract assumes you already have the URL(s) and you want the actual content in a usable format.

It’s ideal for:

  • Indexing pages into a RAG pipeline (vector DB or hybrid search).
  • Building citation-grade summaries where you want the underlying text available.
  • Validating facts found via Search by extracting the source.
  • Converting a set of known URLs (docs pages, blog posts, KB articles) into structured content.

Extract parameters you’ll use most

urls (required)One URL or a list of URLs to extract.
extract_depthbasic or advanced; advanced can retrieve more (tables/embedded data) and may cost more credits.
formatmarkdown (default) or text (plain text; may increase latency).
include_imagesInclude a list of image URLs found during extraction.
include_faviconInclude the favicon URL per result for UI display.
timeoutMax seconds to wait (1–60). Defaults depend on depth (basic ~10s; advanced ~30s).
query + chunks_per_sourceOptional reranking of extracted chunks by intent; controls how much “raw_content” is returned (1–5 chunks).
include_usageInclude credit usage details in the response.

Extract examples

Example A — extract a single URL (markdown)

curl -X POST "https://api.tavily.com/extract" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "urls": "https://en.wikipedia.org/wiki/Artificial_intelligence",
    "extract_depth": "basic",
    "format": "markdown",
    "include_usage": true
  }'

Example B — extract multiple URLs (advanced depth + images)

curl -X POST "https://api.tavily.com/extract" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "urls": [
      "https://docs.tavily.com/documentation/api-reference/endpoint/search",
      "https://docs.tavily.com/documentation/api-credits"
    ],
    "extract_depth": "advanced",
    "include_images": true,
    "include_favicon": true,
    "format": "markdown",
    "timeout": 45,
    "include_usage": true
  }'

Workflow pattern: In many production systems, you Search first (cheap and fast), then Extract only the top 1–3 URLs you actually need. That approach keeps you from “over-extracting” and burning credits on sources you won’t use.

3.3) POST /map — Tavily Map

Discover a site’s URL structure before extraction

What Map does

Map traverses a website like a graph and returns a list of URLs (a site map). It’s designed for “discovery”: find what pages exist and how a website is structured, then decide which pages to extract or crawl.

Mapping is useful for:

  • Documentation sites (SDK refs, changelogs, best practice docs).
  • Help centers and KBs (categories, articles, sub-paths).
  • Product marketing sites (features, pricing, FAQ, blog sections).
  • Pre-crawl scoping (choose depth/breadth/limits before you ingest content).

Map parameters

url (required)The base/root URL to begin mapping.
max_depthHow far from the base URL the crawler can explore (commonly 1–5).
max_breadthMax links to follow per level (can be large, but use with care).
limitTotal number of links processed before stopping.
select_pathsRegex patterns to include only certain URL paths (e.g., docs-only).
exclude_pathsRegex patterns to exclude paths you don’t want.
instructionsNatural language instructions can guide discovery (often costs more credits per pages mapped).
include_usageInclude credit usage details in the response.

Map examples

Example A — basic mapping with strict limits

curl -X POST "https://api.tavily.com/map" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "url": "https://docs.tavily.com",
    "max_depth": 2,
    "max_breadth": 20,
    "limit": 80,
    "include_usage": true
  }'

Example B — map only documentation paths (path selection)

curl -X POST "https://api.tavily.com/map" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "url": "https://docs.tavily.com",
    "max_depth": 3,
    "select_paths": ["^/documentation/.*", "^/sdk/.*"],
    "limit": 150,
    "include_usage": true
  }'

Practical tip: For large sites, always start with low depth and low limits, then expand only if the returned set is missing important sections. Mapping is discovery—don’t treat it as a “download the internet” button.

3.4) POST /crawl — Tavily Crawl

Map + extract combined for site-scale ingestion

What Crawl does

Tavily Crawl is a graph-based site traversal tool that explores many paths in parallel with built-in extraction and intelligent discovery. It’s designed for ingesting a website into a usable dataset (for RAG, semantic search, or internal knowledge).

Crawl is appropriate when:

  • You want many pages from a site (not just one page).
  • You need content extraction as you traverse (not just a list of URLs).
  • You want to guide the crawl using natural language instructions (e.g., “Find all pages about the Python SDK”).
  • You need to control extraction depth, formats, and constraints to build an index.

Crawl parameters (high-level)

url (required)The root URL to begin the crawl.
instructionsNatural language guidance; can increase cost per pages processed.
chunks_per_sourceControls chunking in returned raw content when instructions are used (1–5).
max_depthHow deep to traverse away from the root.
max_breadthHow many links per level.
limitTotal pages processed before stopping.
allow_externalWhether to follow links that go to external domains (use carefully).
include_imagesWhether to extract image URLs from crawled pages.
extract_depth + formatBasic vs advanced extraction and markdown vs text content.

Crawl has its own rate limit bucket (often lower than general search/extract), so plan ingestion jobs with throttling and resuming logic.

Crawl examples

Example A — guided crawl for a documentation section

curl -X POST "https://api.tavily.com/crawl" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "url": "https://docs.tavily.com",
    "instructions": "Find all pages on the JavaScript SDK and API reference",
    "max_depth": 3,
    "limit": 120,
    "extract_depth": "basic",
    "format": "markdown",
    "include_usage": true
  }'

Production hint: If you’re building a searchable knowledge base, many teams run crawls on a schedule (daily/weekly) and store results keyed by URL + last seen timestamp, so they can refresh only changed pages.

3.5) Research API — create, stream, and fetch research tasks

Long-running analysis with sources

POST /research — Create Research Task

The Research endpoint creates a research task. Tavily runs multiple searches, analyzes sources, and produces a detailed report. The initial response contains a request_id and status so you can poll later.

input (required)The research question or task to investigate.
modelmini (targeted/efficient), pro (more comprehensive), or auto.
streamWhen true, returns Server-Sent Events (SSE) for real-time progress and results.

Research is typically the most expensive endpoint (credit-wise), but it can save engineering time when you want a well-structured synthesis rather than a set of links.

GET /research/{request_id} — Fetch status & final output

Once you have a request_id, you can retrieve status and results. If the job is completed, you’ll receive:

  • content: the research report (string, or structured object depending on configuration).
  • sources: a list of sources used (title, url, favicon).
  • created_at and response_time for monitoring/analytics.

Research is a great match for “deep research” UX: show progress as it runs (streaming), then store the final report and sources so users can reopen and verify later.

Research examples

Example A — create a research task (non-streaming)

curl -X POST "https://api.tavily.com/research" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "input": "What are the latest developments in AI?",
    "model": "mini"
  }'

Example B — fetch task status by request_id

curl -X GET "https://api.tavily.com/research/123e4567-e89b-12d3-a456-426614174111" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY"

Example C — enable streaming (SSE)

curl -X POST "https://api.tavily.com/research" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer tvly-YOUR_API_KEY" \
  -d '{
    "input": "Summarize the current state of edge AI devices and local LLM inference trends.",
    "model": "pro",
    "stream": true
  }'

Streaming note: Tavily Research streaming uses Server-Sent Events that are compatible with an OpenAI-style “chat completion chunk” structure, letting you display tool calls, partial content, sources, and a final “done” event.

3.6) GET /usage — monitor credits and plan limits

Build budget dashboards and safety throttles

Why /usage matters

If you’re building anything beyond a toy demo, you need visibility into consumption. /usage returns usage and limits for both your API key and your account plan.

Typical “production safety” patterns:

  • Display remaining credit budget in an admin panel.
  • Stop expensive features (like Research Pro) when below a threshold.
  • Throttle ingestion jobs when nearing daily or monthly limits.
  • Alert ops if usage spikes unexpectedly (possible key leak or runaway loop).

Usage request example

curl --request GET \
  --url "https://api.tavily.com/usage" \
  --header "Authorization: Bearer tvly-YOUR_API_KEY"

The response commonly includes a key usage object and an account usage object (fields like total usage, limits, and per-endpoint usage breakdown).

4) Credits, pricing model, and rate limits

How cost is counted and how to avoid surprises

Rate limits (RPM)

Tavily provides separate rate limits for development and production environments tied to your API key:

Development keys~100 requests per minute (RPM)
Production keys~1,000 RPM
Crawl endpointSeparate RPM limit (commonly ~100 RPM for both dev and prod)

Access to production keys may require an active paid plan or PAYGO enabled (depending on your Tavily account configuration).

How credits are billed (the practical rules)

Tavily uses an API Credits system. Credits are consumed differently depending on endpoint and depth. Here is the most important mental model:

  • Search: cost depends on search_depth (basic/fast/ultra-fast commonly 1 credit; advanced commonly 2 credits).
  • Extract: billed per successful URL extraction in batches (e.g., every 5 successful URLs is 1 credit for basic, 2 credits for advanced).
  • Map: billed per pages mapped (e.g., every 10 pages is 1 credit; mapping with instructions can cost more per 10 pages).
  • Crawl: combines mapping + extraction costs (crawl cost = mapping cost + extraction cost).
  • Research: dynamic pricing with min/max boundaries depending on model=mini vs model=pro.

“You never get charged if a URL extraction fails” is a key detail in Tavily’s credit model for Extract/Map. Still, failing URLs can increase latency and complexity, so handle failures gracefully.

Research credit boundaries (important for budgeting)

Tavily Research follows a dynamic pricing model with minimum and maximum credit boundaries per request. According to Tavily’s credits overview:

Research model Per-request minimum Per-request maximum When to use
mini 4 credits 110 credits Narrow, well-scoped questions; faster & more cost-controlled
pro 15 credits 250 credits Complex topics spanning multiple subdomains; multi-angle research

Budget tip: Treat Research as an “expensive but powerful” feature. In many products, it’s gated behind a toggle, a paid tier, or a usage quota (e.g., “3 research runs per day”).

Cost control playbook

Rule #1: Don’t extract everything. Search first, extract only top URLs you need.

Rule #2: Start with basic depth. Use advanced only when your query needs higher precision.

Rule #3: Use domain allow/deny lists. It reduces noise, improves reliability, and makes results more predictable.

Rule #4: Use time filters for “freshness.” If you want recent data, set time_range or dates.

Rule #5: Monitor with /usage. Build guardrails when remaining credits drop.

Rule #6: Cache aggressively. Deduplicate repeated queries and store extracted pages keyed by URL + last updated.

5) SDKs and code examples (Python + JavaScript)

Fast integration without hand-writing HTTP

Python SDK (sync + async)

Tavily provides a Python SDK with both synchronous and asynchronous clients. Typical usage looks like:

from tavily import TavilyClient

client = TavilyClient(api_key="tvly-YOUR_API_KEY")
res = client.search("What is Tavily?")
print(res)

For async workflows (high concurrency, background jobs), use the async client:

from tavily import AsyncTavilyClient

client = AsyncTavilyClient("tvly-YOUR_API_KEY")
res = await client.search("Latest AI developments")
print(res)

Proxies can also be configured at client instantiation if your environment requires it.

JavaScript / TypeScript SDK

Tavily offers a JavaScript SDK that supports search and extract functionality directly from JS/TS programs. A typical pattern is to instantiate a client with your API key, then call a method like search or extract.

const { tavily } = require("@tavily/core");

const client = tavily({ apiKey: "tvly-YOUR_API_KEY" });

async function run() {
  const res = await client.search({
    query: "What is Tavily?",
    max_results: 5,
    search_depth: "basic"
  });
  console.log(res);
}

run();

The JS client is commonly asynchronous by default, which fits serverless and modern Node runtimes nicely.

Full workflow example: Search → Extract → Build a mini RAG corpus

This pattern is one of the most common production uses of Tavily:

  1. Search for relevant URLs with domain and time filters.
  2. Extract content only from the top results (not everything).
  3. Chunk content into consistent sizes and embed it.
  4. Store in a vector DB or hybrid index with URL + title metadata.
  5. Retrieve during chat, and cite sources in your UI.
// PSEUDOCODE (language-agnostic)

// 1) Search
searchRes = tavily.search({
  query: "Tavily rate limits development production",
  search_depth: "basic",
  max_results: 5,
  include_answer: false,
  include_raw_content: false
})

// 2) Pick top 2 URLs (or score threshold)
urls = top(searchRes.results, 2).map(r => r.url)

// 3) Extract only what you’ll index
extractRes = tavily.extract({
  urls,
  extract_depth: "basic",
  format: "markdown"
})

// 4) Chunk + embed + store
for each page in extractRes.results:
  chunks = chunk(page.content, 900..1400 chars)
  embeddings = embed(chunks)
  store(chunks, embeddings, metadata={url, title, fetched_at})

Why this works: You minimize credit usage, reduce latency, and still get high-quality content for retrieval. Most “runaway costs” happen when apps extract too much content too often without caching.

6) Best practices: better quality, faster responses, safer costs

The checklist teams use in production

Search quality best practices

  • Keep queries concise. Short, direct queries generally search better than long prompts.
  • Use topic intentionally. Choose news for current events; finance for market data; general for everything else.
  • Use time filters. If you care about freshness, set time_range or start_date/end_date.
  • Constrain sources. Use include_domains for trusted sources or docs-only workflows.
  • Start with basic depth. Move to advanced depth only when you need higher precision.

Extract / Crawl best practices

  • Extract only what you need. Prefer “top URLs only” rather than bulk extraction.
  • Choose the right format. Markdown is often best for downstream chunking; text can be simpler but may increase latency.
  • Use advanced extraction sparingly. Advanced is great for tables and embedded content, but budget for it.
  • Set timeouts. Use timeout so slow pages don’t stall your pipeline.
  • Design for partial failure. Expect some URLs to fail; store failed URLs and retry later with backoff.

Research best practices (mini vs pro)

Research is powerful, but it can be credit-intensive. In production, teams often:

  • Default to model=mini for user-initiated questions.
  • Use model=pro only for complex requests, paid tiers, or admin workflows.
  • Enable streaming to show progress and reduce “black box waiting” UX.
  • Store final reports with sources so repeated requests don’t re-run expensive jobs.

A simple product pattern: let users start with “Quick research (mini)”, and offer “Deep research (pro)” as an upgrade, with clear credit or quota messaging.

Production architecture blueprint

Below is a typical “safe” architecture for Tavily-backed apps:

Component What it does Key guardrail
API gateway Routes requests to Tavily; injects auth header; handles retries. Centralized rate limiting & request logging
Query cache Deduplicates repeated searches and stores results for short TTL. Avoids runaway loops and cuts costs
Extraction cache Stores extracted content keyed by URL + last updated. Prevents re-extracting unchanged pages
Indexer Chunks content, embeds, stores metadata + vectors. Batching and backpressure for ingestion jobs
Retriever Retrieves top chunks for a user query. Cite sources and limit context size
Budget monitor Calls /usage; triggers alerts; enforces quotas. Disable expensive features near limits

This structure keeps Tavily usage predictable and makes your app resilient to transient web failures, timeouts, and source variability.

7) Errors, reliability, and operational tips

What to do when the web is messy

Common HTTP statuses you’ll see

  • 400: invalid parameters, bad JSON, unsupported option, or constraints violated.
  • 401/403: missing/invalid key, or lack of permission for a given feature/environment.
  • 429: rate limited — implement retry with exponential backoff and jitter.
  • 432/433: sometimes used for specialized error states (implementation-specific).
  • 500: internal error — retry a small number of times; log request_id for support.

Always store the request_id returned by Tavily. It’s the fastest path to debugging when you need to contact support.

Retry + backoff (recommended)

The web is unreliable: sites time out, block requests, change HTML, or rate-limit aggressively. Your integration should assume some failures.

// PSEUDOCODE

maxAttempts = 4
baseDelayMs = 250

for attempt in 1..maxAttempts:
  res = callTavily()
  if res.status in [200, 201, 202]:
    return res
  if res.status == 429 or res.status >= 500:
    sleep( baseDelayMs * 2^(attempt-1) + randomJitter() )
    continue
  // 400/401/403: do not retry; fix request or auth
  throw error

Security basics (API key handling)

  • Never ship your Tavily API key in client-side code for public apps. Use a server-side proxy.
  • Rotate keys if you suspect leakage; treat unexpected usage spikes as an incident.
  • Use X-Project-ID (or separate keys) to isolate environments and track usage per app.
  • Log requests in a privacy-aware way (avoid storing user secrets in query strings).

8) Tavily API FAQ (developer-focused)

Fast answers to common integration questions
Is Tavily a search engine or an AI agent tool? +
Tavily is best described as a web intelligence API for AI applications. It includes a Search endpoint, but it also includes extraction, crawling, mapping, and a research workflow that synthesizes results into a report with sources.
What is the difference between Search and Extract? +

Search finds relevant sources for a query and returns ranked results with snippets (and optional answer/raw content). Extract takes a known URL (or list of URLs) and returns the cleaned page content. In production, many teams do Search → Extract only top URLs.

When should I use Map vs Crawl? +

Use Map when you want a list of URLs (discovery) with strict constraints before extracting content. Use Crawl when you want to traverse and extract content as you go (site ingestion). Often you Map first to understand structure, then Crawl or Extract selectively.

How do I keep Tavily costs predictable? +

Use basic search depth by default, limit max_results, apply time filters and domain filters, extract only top URLs, and cache aggressively. Monitor usage with GET /usage and apply guardrails when remaining credits drop.

What are Tavily’s rate limits? +

Tavily commonly provides different request-per-minute limits for development vs production keys, and Crawl has its own separate limit bucket. Always implement retry with backoff for 429 responses and keep ingestion jobs throttled.

Can I stream Research results? +

Yes. Set stream: true when creating a research task to receive Server-Sent Events (SSE) that can include progress updates, tool calls, partial content, sources, and a final done event. Streaming is ideal for “deep research” UIs.

How do I track usage per project or app? +

You can attach an X-Project-ID header to your requests so usage can be organized by project in Tavily’s dashboards and logs. Many teams also use separate keys for dev/staging/prod to isolate risk and simplify monitoring.

Is Tavily good for RAG? +

Yes. Tavily fits naturally into “search-first RAG”: search for sources, extract content, chunk, embed, store, retrieve. Its domain filters and time filters are especially useful when you need more control and predictable source selection.

What should I do if an extraction fails? +

Treat failures as normal. Record the failed URL, retry with backoff (or later), lower extraction depth if appropriate, adjust timeout, and consider excluding domains that consistently fail. Keep the pipeline resilient so partial success still produces useful output.

Can I restrict results to specific sources? +

Yes. Search supports include/exclude domain lists. Map and Crawl can use path selection/exclusion patterns. Source constraints improve reliability and make results more consistent for user-facing products.

9) Official links (documentation)

Primary sources you can trust

If you want to verify any parameter names, response fields, or credit rules, use these official Tavily resources: