← back to index
▌
one endpoint, multiple research providers.
budget caps · fallback strategies · normalized outputs · audit logs
standard contract—orchestration—governance—auditability
Quickstart
get started in 30 seconds.
base url
https://research.site/api/v1auth header
Authorization: Bearer drx_live_...make a request
curl -X POST https://research.site/api/v1/research/run \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "what is quantum computing?",
"providers": ["perplexity:sonar-deep-research"],
"strategy": "parallel"
}'Get API Key
sign in to generate an api key. each key gets 1 free successful run.
loading...
save your key immediately. it's only shown once and cannot be retrieved later.
Authentication
all requests require an api key in the Authorization header.
Authorization: Bearer drx_live_your_key_hereFree Tier
1 free successful run per api key
each api key gets 1 free successful run. a run counts as "successful" if at least one provider returns status: "completed".
if all providers fail or timeout, the run doesn't count against your limit—you won't be penalized for infrastructure issues.
after your free run
subsequent requests return 402 with details on how to get more access:
waitlist_required response
{
"error": {
"code": "waitlist_required",
"message": "you've used your 1 free run. request access to continue.",
"waitlist_url": "https://research.site/waitlist",
"contact": {
"x": "https://x.com/vaniagrwall",
"linkedin": "https://linkedin.com/in/vaniagarwal"
}
}
}need more access?
POST /research/run
execute a deep research query across one or more providers.
request body
| Parameter | Type | Description |
|---|---|---|
query* | string | the research question |
providers* | string[] | provider:model keys to query |
strategy | string | parallel fallback race — default: parallel |
mode | string | fast deep — default: deep |
budget.max_cost_usd | number | soft cost limit (warns if exceeded) |
budget.max_time_ms | number | hard timeout — default: 120000 |
options.citations | boolean | include citations — default: true |
options.include_raw | boolean | include raw provider response — default: false |
GET /research/run/:id
fetch status and results of a previous run.
curl https://research.site/api/v1/research/run/YOUR_RUN_ID \
-H "Authorization: Bearer YOUR_API_KEY"Providers
available provider:model combinations.
| Provider Key | Name | Est. Cost |
|---|---|---|
openai:o4-mini-deep-research | OpenAI o4-mini | ~$0.02-0.10 |
openai:o3-deep-research | OpenAI o3 | ~$0.10-0.50 |
perplexity:sonar-deep-research | Perplexity Sonar | ~$0.05-0.15 |
gemini:deep-research | Gemini Deep Research | ~$0.02-0.10 |
parallel:pro | Parallel Pro | $0.10 flat |
parallel:ultra | Parallel Ultra | $0.30 flat |
Strategies
parallelrun all providers simultaneously, return all results.
fallbacktry providers in order. stop on first success.
racerun all providers, return first successful result.
Response Format
{
"run_id": "690348a5-7707-4146-8217-598c8973edb4",
"status": "completed",
"total_latency_ms": 87843,
"total_cost_usd": 0.101,
"results": {
"perplexity:sonar-deep-research": {
"provider_key": "perplexity:sonar-deep-research",
"status": "completed",
"latency_ms": 86473,
"cost_usd": 0.101,
"tokens": { "input": 7, "output": 7030, "total": 7037 },
"answer_markdown": "# Research results...",
"citations": [{ "url": "https://...", "title": "...", "snippet": "..." }]
}
}
}result status values
completedprovider returned successfullyfailedprovider returned an errortimeoutprovider exceeded time limitskippedskipped due to strategyError Codes
| Code | HTTP | Description |
|---|---|---|
auth_missing | 401 | no api key provided |
auth_invalid | 401 | api key not found |
auth_revoked | 401 | api key revoked |
waitlist_required | 402 | free run exhausted |
invalid_request | 400 | malformed request |
invalid_provider | 400 | unknown provider |
timeout | 200 | provider timed out (in result) |
provider_error | 200 | provider error (in result) |
internal_error | 500 | server error |
Examples
javascript
const response = await fetch('https://research.site/api/v1/research/run', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: 'latest developments in quantum computing',
providers: ['openai:o4-mini-deep-research'],
strategy: 'parallel',
}),
});
const data = await response.json();
console.log(data.results);python
import requests
response = requests.post(
'https://research.site/api/v1/research/run',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
json={
'query': 'latest developments in quantum computing',
'providers': ['openai:o4-mini-deep-research'],
'strategy': 'parallel',
},
)
data = response.json()
print(data['results'])