v3

latestOpenAPI 3.1.02026-08-0431146.5 KB

Returns comprehensive research-grade answers with multi-step reasoning

Research goes beyond a single web search. In response to your question, it runs multiple searches, reads through the sources, and synthesizes everything into a thorough, well-cited answer. Use it when a question is too complex for a simple lookup, and when you need a response you can actually trust and verify.

post/v1/research

Request body

inputstring required

The research question or complex query requiring in-depth investigation and multi-step reasoning.

Note: The maximum length of the input is 40,000 characters.

research_effort'lite' | 'standard' | 'deep' | 'exhaustive' | 'frontier'

Controls how much time and effort the Research API spends on your question. Higher effort levels run more searches and dig deeper into sources, at the cost of a longer response time.

Available levels:

  • lite: Returns answers quickly. Good for straightforward questions that just need a fast, reliable answer.
  • standard: The default. Balances speed and depth, a good fit for most questions.
  • deep: Spends more time researching and cross-referencing sources. Use this when accuracy and thoroughness matter more than speed.
  • exhaustive: The most thorough option. Explores the topic as fully as possible, best suited for complex research tasks where you want the highest quality result.
  • frontier: Designed for long-running, deep research tasks that require the maximum compute budget. Latency ranges from 30s to 12000s (p50: 300s). Requires background: true — synchronous requests with research_effort: "frontier" return 422.
output_schemaobject

Beta. Requests structured JSON output in output.content using a supported JSON Schema subset. Supported with research_effort values standard, deep, exhaustive, and frontier. Sending output_schema with research_effort: "lite" returns 422.

Limits are enforced before model execution. The request fails with 422 if any limit is exceeded:

  • Max nesting depth: 5. - Max total properties: 100. - Max total enum values: 500. - Max large-enum string budget (enums over 250 values): 7,500. - Max total schema string budget: 25,000. The schema string budget counts property names, $defs names, enum values, and const values.

Schema rules:

  • Root must be a JSON object. Top-level anyOf is not allowed. - Every object must define properties and set additionalProperties: false. - Every property must be listed in required. To make a field optional, keep it in required and add "null" to its type, for example ["string", "null"]. - Recursive schemas are not supported. - A property's type may not be a bare {"type": "null"}. Use a nullable array form such as ["string", "null"], or a null branch inside an anyOf.

See Structured Output for full rules, supported patterns, the optional-via-nullable pattern, conditional structure, and examples.

backgroundboolean

When true, runs the request asynchronously as a background task. The API returns a task handle immediately instead of waiting for the final answer. Poll GET /v1/research/{task_id} or stream progress via GET /v1/research/{task_id}/stream to retrieve the result. Useful for deep or exhaustive research that can exceed client-side timeouts, or when you want to decouple submission from retrieval. Required for research_effort: "frontier".

Example request

{
  "input": "Which global cities improved air quality the most over the past 10 years, and what measurable actions contributed?",
  "research_effort": "lite",
  "source_control": {
    "include_domains": [
      "nytimes.com",
      "bbc.com"
    ],
    "exclude_domains": [
      "spam-site.com",
      "other-site.com"
    ],
    "boost_domains": [
      "nytimes.com",
      "wired.com"
    ]
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "name": {
        "type": "string"
      },
      "gtin": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "required": [
      "name",
      "gtin"
    ],
    "additionalProperties": false
  }
}

Response

In synchronous mode (background: false, the default), a JSON object containing a comprehensive answer with citations and supporting search results. In background mode (background: true), a JSON object with a task handle that you can poll or stream for the final result.

OR

Example response

{
  "output": {
    "content_type": "text",
    "sources": [
      {
        "url": "https://sustainablemobility.iclei.org/air-pollution-beijing/",
        "title": "Clearing the skies: how Beijing tackled air pollution & what lies ahead",
        "snippets": [
          "The city actively coordinated air pollution control measures with surrounding areas, such as the Beijing-Tianjin-Hebei region."
        ]
      }
    ]
  },
  "warnings": []
}