groundrouter

API reference

groundrouter
API.

Search · Providers · Routing config

View endpoints
Your AI connects through groundrouter to Tavily, Exa, Brave, and Ozone.
Your AIgroundrouter
TavilyExaBraveOzone
Endpoints

POST /v1/search

Search request

request
curl https://groundrouter-api.harlan-b6b.workers.dev/v1/search \
  -H "Authorization: Bearer $GROUNDROUTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "offshore wind capacity",
    "top_k": 3
  }'
response example
{
  "results": [
    {
      "rank": 3,
      "domain": "bbc.com",
              "title": "Example article",
      "provenance": {
        "provider": "ozone",
        "found_by": ["tavily", "ozone"],
        "licensed": true,
        "publisher_name": "BBC",
        "promoted": "ozone_precedence"
      }
    }
  ]
}

↗Full API reference

Integrations

Code examples

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://groundrouter-api.harlan-b6b.workers.dev/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)

Providers

Provider filters

GET /v1/providers · Unsupported filters return 400 unsupported_filter.

Provider Domain Date Publisher Full text Similar Index
Ozonelicensed Licensed publisher corpus
Exa Embeddings, open web
Tavily LLM-tuned, open web
Brave Independent index
Binginactive Pending API availability

→Publisher, article-type, and temporal filters: Ozone only.

Routing

Routing config

Config reference

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