
Your AI→groundrouter→
Endpoints
TavilyExaBraveOzone
POST /v1/search
Search 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
}'
{
"results": [
{
"rank": 3,
"domain": "bbc.com",
"title": "Example article",
"provenance": {
"provider": "ozone",
"found_by": ["tavily", "ozone"],
"licensed": true,
"publisher_name": "BBC",
"promoted": "ozone_precedence"
}
}
]
}
Integrations
Code examples
API access
Get an API key
Self-service access: coming soon
Coming soon
claude mcp add --transport http groundrouter \
https://groundrouter-api.harlan-b6b.workers.dev/mcp \
--header "Authorization: Bearer $GROUNDROUTER_KEY"
{
"mcpServers": {
"groundrouter": {
"type": "http",
"url": "https://groundrouter-api.harlan-b6b.workers.dev/mcp",
"headers": {
"Authorization": "Bearer $GROUNDROUTER_KEY"
}
}
}
}
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)
const res = await fetch("https://groundrouter-api.harlan-b6b.workers.dev/v1/search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GROUNDROUTER_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
query: "offshore wind capacity 2026",
top_k: 5,
filters: { recency: { mode: "rolling", days: 30 } },
}),
})
const { results } = await res.json()
# Tavily
- https://api.tavily.com/search
+ https://groundrouter-api.harlan-b6b.workers.dev/compat/tavily/search
# Or Brave:
- https://api.search.brave.com/res/v1/web/search
+ https://groundrouter-api.harlan-b6b.workers.dev/compat/brave/res/v1/web/search
| 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": {
"policy": "single",
"provider": "tavily"
}
}
{
"routing": {
"policy": "fanout",
"providers": ["ozone", "exa", "tavily"],
"timeout_ms": 6000
},
"merge": { "strategy": "precedence" }
}