Ask a question
const url = 'https://api.hyperresearch.ai/v1/answers';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"question":"example","mode":"fast","as_of":"example","max_cost_cents":1}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.hyperresearch.ai/v1/answers \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "question": "example", "mode": "fast", "as_of": "example", "max_cost_cents": 1 }'One question, one concise answer checked word for word against quoted sources, or an honest abstain. Synchronous (fast up to ~45 s, standard ~3 min, max ~4 min). Billed per call from the prepaid wallet: fast 5¢, standard 10¢ (20¢ when it escalates to high effort on its own), max 50¢ (deep is accepted as the old name for max); not_found/unconfirmed cost 20% of that price, or more when the search behind them was expensive (1.5x our cost, never above the full price); error (our failure) is free. 402 insufficient_balance carries topup_url. Honours Idempotency-Key.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters”Retry safely: the same key and body replay the first call with one charge.
Retry safely: the same key and body replay the first call with one charge.
respond-async; wait=<seconds> (at most 50): answer 202 pending with the call id if the answer is not ready by then; the call keeps running and GET /v1/answers/{id} returns it. Charged once, when it finishes.
respond-async; wait=<seconds> (at most 50): answer 202 pending with the call id if the answer is not ready by then; the call keeps running and GET /v1/answers/{id} returns it. Charged once, when it finishes.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Fast 5¢ · standard 10¢ (20¢ when it escalates to high effort on its own) · max 50¢ per call (deep is accepted as the old name for max). An abstain (not_found, unconfirmed) costs 20% of that price, or 1.5x our cost when that is more (never above the full price); a failure on our side costs nothing.
Answer as of this date (YYYY-MM-DD).
The most this call may cost. Below the mode price it is refused (400); for standard, below 20 it runs with escalation off and costs at most 10¢.
Responses
Section titled “ Responses ”The answer, its evidence, and what it cost
object
object
True when the quote was found on the live page itself.
True when a standard ask escalated to high effort on its own and was charged the escalated price (2x).
What the check could not settle, in one sentence, when the answer ships with check “partial” or the call reached its time limit; absent otherwise.
What this call cost, in cents (may be fractional).
Wallet balance after this call, in cents.
Example
{ "status": "answered", "mode": "fast"}Headers
Section titled “Headers”Example
"reads";q=60;w=60The quota policy this request was counted against (draft-ietf-httpapi-ratelimit-headers): "<bucket>";q=<requests>;w=<window seconds>, e.g. "reads";q=60;w=60. Buckets: reads 60/min, status 600/min, creates 10/min, writes 20/min per credential; public 300/min per network on keyless routes.
Example
"reads";r=57;t=41Remaining quota in the current window: "<bucket>";r=<remaining>;t=<seconds until reset>, e.g. "reads";r=57;t=41.
Requests allowed per window in this bucket (legacy form of RateLimit-Policy).
Requests left in this window (legacy form of RateLimit).
Unix time (seconds) when the window resets.
Which bucket counted the request: reads, status, creates, writes or public.
With Prefer: respond-async: still running. id, status: "pending", poll_after_seconds, price_cents_max; nothing charged yet.
object
Example
{ "kind": "ask", "mode": "fast"}Headers
Section titled “Headers”Example
"reads";q=60;w=60The quota policy this request was counted against (draft-ietf-httpapi-ratelimit-headers): "<bucket>";q=<requests>;w=<window seconds>, e.g. "reads";q=60;w=60. Buckets: reads 60/min, status 600/min, creates 10/min, writes 20/min per credential; public 300/min per network on keyless routes.
Example
"reads";r=57;t=41Remaining quota in the current window: "<bucket>";r=<remaining>;t=<seconds until reset>, e.g. "reads";r=57;t=41.
Requests allowed per window in this bucket (legacy form of RateLimit-Policy).
Requests left in this window (legacy form of RateLimit).
Unix time (seconds) when the window resets.
Which bucket counted the request: reads, status, creates, writes or public.
Invalid request
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Authentication failed
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}insufficient_balance (with topup_url, price_cents, balance_cents) or wallet_frozen
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Insufficient scope or plan
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Not found
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}idempotency_key_reuse or idempotency_in_flight
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Rate limited or over quota
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}Headers
Section titled “Headers”Seconds to wait before retrying. Always present on a 429.
Example
"reads";q=60;w=60The quota policy this request was counted against (draft-ietf-httpapi-ratelimit-headers): "<bucket>";q=<requests>;w=<window seconds>, e.g. "reads";q=60;w=60. Buckets: reads 60/min, status 600/min, creates 10/min, writes 20/min per credential; public 300/min per network on keyless routes.
Example
"reads";r=57;t=41Remaining quota in the current window: "<bucket>";r=<remaining>;t=<seconds until reset>, e.g. "reads";r=57;t=41.
Requests allowed per window in this bucket (legacy form of RateLimit-Policy).
Requests left in this window (legacy form of RateLimit).
Unix time (seconds) when the window resets.
Which bucket counted the request: reads, status, creates, writes or public.
Internal error
object
object
Example
{ "error": { "type": "invalid_request", "code": "missing_api_key", "request_id": "req_01J9ZQ7V6H0000000000000000" }}