Skip to main content
The Research API searches, evaluates sources, and synthesizes a cited report from a natural-language query. Use it for questions that need evidence across several sources rather than a single search result or webpage.

Start a research run

All requests require an X-API-Key header. Accepted requests use a Server-Sent Events stream, including when stream is omitted or false. Invalid input and other failures before a run starts return the standard JSON error body.
Each SSE message is a data: line containing JSON. Save the research_run_id from the created event and stop reading after done.

Modes

auto and an omitted mode currently select standard. Set browser_enabled: false to keep Max mode to search and static fetches. browser_enabled: true is accepted only in Max mode.

Request body

Do not combine recency_minutes with after_date or before_date. Date and recency filters are unavailable for research_paper searches. session_id and prior_run_id are mutually exclusive.

Domain filtering

Use include to prioritize listed domains while retaining other results. Use exclusive to restrict results to the allowlist. Blocked domains are always removed. Each list accepts at most 150 entries.

Read the event stream

Important events include: Ordered synthesis_delta values for a checkpoint reconstruct its matching summary or final result. If synthesis_discarded appears, discard the provisional partial checkpoint. Heartbeats keep long-running connections open.

Continue prior research

Pass prior_run_id to seed a new session with a completed report and its evidence. To continue an existing standard-mode conversation, pass the session_id emitted by the earlier run.

Retrieve saved runs

Fetch one run with GET /v1/research-run/{research_run_id}. List runs with GET /v1/research-run; supported filters are status, query, created_after, and created_before. Pagination uses limit from 1–100, sort_direction=asc|desc, and the returned next_cursor. Reuse a cursor only with the same sort direction.
Research creation is limited by both concurrent runs and completed runs per Pacific calendar day. A limit response uses HTTP 429; daily-limit responses include Retry-After and X-RateLimit-* headers.
/v1/automation/run-research remains available for compatibility. New integrations should use v2.