version: 2
http_backend: https://api.tavily.com
entities:
  SearchResult:
    id_field: url
    description: A ranked web search result from Tavily Search.
    fields:
      url:
        required: true
        value_ref: nv_search_result_url
      title:
        required: false
        value_ref: nv_search_result_title
      content:
        required: false
        value_ref: nv_search_result_content
      score:
        required: false
        value_ref: nv_search_result_score
      raw_content:
        required: false
        value_ref: nv_search_result_raw_content
      favicon:
        required: false
        value_ref: nv_search_result_favicon
  ExtractResult:
    id_field: url
    description: Extracted or crawled page content from Tavily Extract / Crawl.
    fields:
      url:
        required: true
        value_ref: nv_extract_result_url
      raw_content:
        required: false
        value_ref: nv_extract_result_raw_content
      favicon:
        required: false
        value_ref: nv_extract_result_favicon
  ResearchTask:
    id_field: request_id
    description: An async Tavily Research task.
    fields:
      request_id:
        required: true
        value_ref: nv_research_task_request_id
      status:
        required: false
        value_ref: nv_research_task_status
      input:
        required: false
        value_ref: nv_research_task_input
      model:
        required: false
        value_ref: nv_research_task_model
      created_at:
        required: false
        value_ref: nv_research_task_created_at
      content:
        required: false
        value_ref: nv_research_task_content
      response_time:
        required: false
        value_ref: nv_research_task_response_time
      sources:
        required: false
        value_ref: nv_research_task_sources
capabilities:
  web_search:
    kind: search
    entity: SearchResult
    description: AI-powered web search. Returns ranked results with optional LLM answer.
    parameters:
    - name: query
      value_ref: nv_wire_str_short
      required: true
      role: search
    - name: search_depth
      value_ref: nv_web_search_search_depth
      required: false
      role: response_control
    - name: chunks_per_source
      value_ref: nv_wire_int
      required: false
      role: response_control
    - name: max_results
      value_ref: nv_wire_int
      required: false
      role: response_control
    - name: topic
      value_ref: nv_web_search_topic
      required: false
    - name: time_range
      value_ref: nv_web_search_time_range
      required: false
    - name: start_date
      value_ref: nv_wire_str_short
      required: false
    - name: end_date
      value_ref: nv_wire_str_short
      required: false
    - name: include_answer
      value_ref: nv_wire_bool
      required: false
      role: response_control
    - name: include_raw_content
      value_ref: nv_wire_bool
      required: false
      role: response_control
    - name: include_images
      value_ref: nv_wire_bool
      required: false
      role: response_control
    - name: include_favicon
      value_ref: nv_wire_bool
      required: false
      role: response_control
    - name: include_domains
      value_ref: nv_web_search_include_domains
      required: false
    - name: exclude_domains
      value_ref: nv_web_search_exclude_domains
      required: false
    - name: country
      value_ref: nv_wire_str_short
      required: false
    - name: auto_parameters
      value_ref: nv_wire_bool
      required: false
      role: response_control
    - name: exact_match
      value_ref: nv_wire_bool
      required: false
  url_extract:
    kind: query
    entity: ExtractResult
    description: Extract cleaned content from one or more URLs.
    parameters:
    - name: urls
      value_ref: nv_url_extract_urls
      required: true
    - name: query
      value_ref: nv_wire_str_short
      required: false
    - name: extract_depth
      value_ref: nv_url_extract_extract_depth
      required: false
      role: response_control
    - name: format
      value_ref: nv_url_extract_format
      required: false
      role: response_control
    - name: chunks_per_source
      value_ref: nv_wire_int
      required: false
      role: response_control
    - name: include_images
      value_ref: nv_wire_bool
      required: false
      role: response_control
    - name: include_favicon
      value_ref: nv_wire_bool
      required: false
      role: response_control
  site_crawl:
    kind: query
    entity: ExtractResult
    description: Graph-based website traversal — crawl multiple pages in parallel.
    parameters:
    - name: url
      value_ref: nv_wire_str_short
      required: true
      role: scope
    - name: instructions
      value_ref: nv_wire_str_short
      required: false
    - name: max_depth
      value_ref: nv_wire_int
      required: false
      role: response_control
    - name: max_breadth
      value_ref: nv_wire_int
      required: false
      role: response_control
    - name: limit
      value_ref: nv_wire_int
      required: false
      role: response_control
    - name: chunks_per_source
      value_ref: nv_wire_int
      required: false
      role: response_control
    - name: include_images
      value_ref: nv_wire_bool
      required: false
      role: response_control
  research_create:
    kind: create
    entity: ResearchTask
    description: Start an async deep research task (returns request_id for polling).
    provides:
    - request_id
    - created_at
    - status
    - input
    - model
    parameters:
    - name: input
      value_ref: nv_wire_str_short
      required: true
    - name: model
      value_ref: nv_research_create_model
      required: false
    - name: citation_format
      value_ref: nv_research_create_citation_format
      required: false
  research_get:
    kind: get
    entity: ResearchTask
    description: Poll the status and retrieve the report for a research task.
    provides:
    - request_id
    - status
    - input
    - model
    - created_at
    - content
    - response_time
    - sources
auth:
  scheme: bearer_token
  env: TAVILY_API_TOKEN
  hosted_kv: plasm:outbound:v1:catalog:tavily
values:
  nv_extract_result_favicon:
    type: string
    string_semantics: short
    description: Favicon URL for the page's domain.
  nv_extract_result_raw_content:
    type: string
    string_semantics: markdown
    description: Full extracted page content (markdown or plain text).
  nv_extract_result_url:
    type: string
    string_semantics: short
    description: URL of the extracted page.
  nv_research_create_citation_format:
    type: select
    allowed_values:
    - numbered
    - mla
    - apa
    - chicago
  nv_research_create_model:
    type: select
    allowed_values:
    - mini
    - pro
    - auto
  nv_research_task_content:
    type: string
    string_semantics: markdown
    description: Full research content/report (populated when status=completed).
  nv_research_task_created_at:
    type: date
    value_format: rfc3339
    description: Timestamp when the task was created.
  nv_research_task_input:
    type: string
    string_semantics: short
    description: The research question submitted.
  nv_research_task_model:
    type: select
    allowed_values:
    - mini
    - pro
    - auto
    description: Research agent model used.
  nv_research_task_request_id:
    type: string
    string_semantics: short
    description: Unique identifier for the research task (use to poll status).
  nv_research_task_response_time:
    type: number
    description: Time in seconds for the research task to complete.
  nv_research_task_status:
    type: select
    allowed_values:
    - pending
    - running
    - completed
    - failed
    description: Current execution status of the task.
  nv_search_result_content:
    type: string
    string_semantics: markdown
    description: Relevance snippet or chunked content from the page.
  nv_search_result_favicon:
    type: string
    string_semantics: short
    description: Favicon URL for the result's domain.
  nv_search_result_raw_content:
    type: string
    string_semantics: markdown
    description: Full cleaned page content (only when include_raw_content=true).
  nv_search_result_score:
    type: number
    description: Relevance score (0–1).
  nv_search_result_title:
    type: string
    string_semantics: short
    description: Title of the source page.
  nv_search_result_url:
    type: string
    string_semantics: short
    description: URL of the source page.
  nv_url_extract_extract_depth:
    type: select
    allowed_values:
    - basic
    - advanced
  nv_url_extract_format:
    type: select
    allowed_values:
    - markdown
    - text
  nv_web_search_search_depth:
    type: select
    allowed_values:
    - basic
    - fast
    - ultra-fast
    - advanced
  nv_web_search_time_range:
    type: select
    allowed_values:
    - day
    - week
    - month
    - year
    - d
    - w
    - m
    - y
  nv_web_search_topic:
    type: select
    allowed_values:
    - general
    - news
    - finance
  nv_wire_bool:
    type: boolean
  nv_wire_int:
    type: integer
  nv_wire_str_short:
    type: string
    string_semantics: short
  nv_research_task_sources:
    type: array
    items:
      value_ref: nv_wire_str_short
    description: Cited sources (populated when status=completed).
  nv_url_extract_urls:
    type: array
    items:
      value_ref: nv_wire_str_short
  nv_web_search_exclude_domains:
    type: array
    items:
      value_ref: nv_wire_str_short
  nv_web_search_include_domains:
    type: array
    items:
      value_ref: nv_wire_str_short
