groundrouter

Search routing for AI

The web, routed
for your AI.

Connect to multiple search providers through one API.

Illustrative search route Dots illustrate routes from your AI through groundrouter to randomly chosen active providers. This illustration sends no network request. Your AI groundrouter Tavily Exa Brave Ozone Cloudflare inactive Bing inactive
Illustrative routes
Your AI groundrouter Tavily Exa Brave Ozone
Illustrative routes

Providers

Search providers, connected.

Choose a provider to see its supported search options.

Selected provider

Tavily

Open web search with domain, date, and full-text support.

Supported capabilities

  • Domain filtering
  • Date filtering
  • Full text
View example

POST /v1/search

Explore a sample search

See the shape of a search result before connecting an agent. This page does not send a request.

offshore wind capacity

Sample result · illustrative

01

Example search result

Results include a source URL and provider attribution, so your agent can trace where each result came from.

example.comFound by: TavilyUnlicensed

Illustrative data using a reserved example domain; no search result or provider match is claimed.

Integrations

Connect your agent

API access

Get an API key

Self-service access: coming soon

Coming soon
search.py
import os
import httpx

KEY = os.environ["GROUNDROUTER_KEY"]

r = httpx.post(
    "https://api.groundrouter.ai/v1/search",
    headers={"Authorization": f"Bearer {KEY}"},
    json={"query": "offshore wind capacity 2026", "top_k": 5},
).json()

for hit in r["results"]:
    lic = "licensed" if hit["provenance"]["licensed"] else "web"
    print(hit["rank"], hit["domain"], lic)

Routing

Routing config

before
{
  "routing": {
    "policy": "single",
    "provider": "tavily"
  }
}
after
{
  "routing": {
    "policy": "fanout",
    "providers": ["ozone", "exa", "tavily"],
    "timeout_ms": 6000
  },
  "merge": { "strategy": "precedence" }
}