Exa

Exa Research API

Asynchronous multi-step deep-research tasks. Submit a research instruction, Exa orchestrates a Deep Search agent across the live web with structured outputs and web-grounded citations, and you poll for the completed report. Lives under /research/v1 with create, get, and list operations.

Exa Research API is one of 7 APIs that Exa publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include AI, Search, Research, Agents, and Deep Search. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

exa-research-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Exa Research API
  version: 2.0.0
  description: Exa Research API - subset of the Exa Public API.
servers:
- url: https://api.exa.ai
security:
- apiKey: []
- bearer: []
paths:
  /research/v1:
    get:
      description: Get a paginated list of research requests
      operationId: ResearchController_listResearch
      parameters:
      - name: cursor
        required: false
        in: query
        description: The cursor to paginate through the results
        schema:
          minLength: 1
          type: string
      - name: limit
        required: false
        in: query
        description: Number of results per page (1-50)
        schema:
          minimum: 1
          maximum: 50
          default: 10
          type: number
      responses:
        '200':
          description: List of research requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListResearchResponseDto'
      summary: List research requests
      tags:
      - Research
      x-codeSamples:
      - lang: bash
        label: List research tasks
        source: "curl -X GET 'https://api.exa.ai/research/v1?limit=10' \\\n  -H 'x-api-key: YOUR-EXA-API-KEY'"
      - lang: python
        label: List research tasks
        source: '# pip install exa-py

          from exa_py import Exa

          exa = Exa(api_key=''YOUR_EXA_API_KEY'')


          tasks = exa.research.list_tasks(limit=10)

          print(tasks)'
      - lang: javascript
        label: List research tasks
        source: '// npm install exa-js

          import Exa from ''exa-js'';

          const exa = new Exa(''YOUR_EXA_API_KEY'');


          const tasks = await exa.research.listTasks({ limit: 10 });

          console.log(tasks);'
    post:
      operationId: ResearchController_createResearch
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResearchCreateRequestDtoClass'
      responses:
        '201':
          description: Research request created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResearchDtoClass'
      summary: Create a new research request
      tags:
      - Research
      x-codeSamples:
      - lang: bash
        label: Create research task
        source: "curl -X POST 'https://api.exa.ai/research/v1' \\\n  -H 'x-api-key: YOUR-EXA-API-KEY' \\\n  -H 'Content-Type:\
          \ application/json' \\\n  -d '{\n    \"instructions\": \"Summarize the latest developments in AI safety research\"\
          ,\n    \"model\": \"exa-research\"\n  }'"
      - lang: python
        label: Create research task
        source: "# pip install exa-py\nfrom exa_py import Exa\nexa = Exa(api_key='YOUR_EXA_API_KEY')\n\ntask = exa.research.create_task(\n\
          \    instructions=\"Summarize the latest developments in AI safety research\",\n    model=\"exa-research\"\n)\n\n\
          print(task)"
      - lang: javascript
        label: Create research task
        source: "// npm install exa-js\nimport Exa from 'exa-js';\nconst exa = new Exa('YOUR_EXA_API_KEY');\n\nconst task\
          \ = await exa.research.createTask({\n  instructions: \"Summarize the latest developments in AI safety research\"\
          ,\n  model: \"exa-research\"\n});\n\nconsole.log(task);"
  /research/v1/{researchId}:
    get:
      description: Retrieve research by ID. Add ?stream=true for real-time SSE updates.
      operationId: ResearchController_getResearch
      parameters:
      - name: researchId
        required: true
        in: path
        description: The unique identifier of the research request to retrieve
        schema:
          type: string
      - name: stream
        required: false
        in: query
        description: Set to "true" to receive real-time updates via Server-Sent Events (SSE)
        schema:
          type: string
      - name: events
        required: false
        in: query
        description: Set to "true" to include the detailed event log of all operations performed
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResearchDtoClass'
      summary: Get a research request by id
      tags:
      - Research
      x-codeSamples:
      - lang: bash
        label: Get research task
        source: "curl -X GET 'https://api.exa.ai/research/v1/01jszdfs0052sg4jc552sg4jc5' \\\n  -H 'x-api-key: YOUR-EXA-API-KEY'"
      - lang: bash
        label: Get research task with streaming
        source: "curl -X GET 'https://api.exa.ai/research/v1/01jszdfs0052sg4jc552sg4jc5?stream=true' \\\n  -H 'x-api-key:\
          \ YOUR-EXA-API-KEY'"
      - lang: python
        label: Get research task
        source: '# pip install exa-py

          from exa_py import Exa

          exa = Exa(api_key=''YOUR_EXA_API_KEY'')


          task = exa.research.get_task(''01jszdfs0052sg4jc552sg4jc5'')

          print(task)'
      - lang: javascript
        label: Get research task
        source: '// npm install exa-js

          import Exa from ''exa-js'';

          const exa = new Exa(''YOUR_EXA_API_KEY'');


          const task = await exa.research.getTask(''01jszdfs0052sg4jc552sg4jc5'');

          console.log(task);'
components:
  schemas:
    ListResearchResponseDto:
      type:
      - object
      properties:
        data:
          type:
          - array
          items:
            discriminator:
              propertyName: status
            examples:
            - researchId: 01jszdfs0052sg4jc552sg4jc5
              model: exa-research
              instructions: What species of ant are similar to honeypot ants?
              status: running
            - researchId: 01jszdfs0052sg4jc552sg4jc5
              model: exa-research
              instructions: What species of ant are similar to honeypot ants?
              status: completed
              output: Melophorus bagoti
            $ref: '#/components/schemas/ResearchDtoClass'
          description: Research requests ordered by creation time (newest first)
        hasMore:
          type:
          - boolean
          description: If true, use nextCursor to fetch more results
        nextCursor:
          type:
          - string
          - 'null'
          description: Pass this value as the cursor parameter to fetch the next page
      required:
      - data
      - hasMore
      - nextCursor
    ResearchCreateRequestDtoClass:
      type:
      - object
      properties:
        model:
          default: exa-research
          type:
          - string
          enum:
          - exa-research-fast
          - exa-research
          - exa-research-pro
          description: Research model to use. exa-research is faster and cheaper, while exa-research-pro provides more thorough
            analysis and stronger reasoning.
        instructions:
          type:
          - string
          maxLength: 50000
          description: Instructions for what you would like research on. A good prompt clearly defines what information you
            want to find, how research should be conducted, and what the output should look like.
        outputSchema:
          type:
          - object
          additionalProperties: {}
          description: JSON Schema to enforce structured output. When provided, the research output will be validated against
            this schema and returned as parsed JSON.
      required:
      - instructions
      examples:
      - model: exa-research
        instructions: What species of ant are similar to honeypot ants?
    ResearchDtoClass:
      discriminator:
        propertyName: status
      oneOf:
      - type:
        - object
        properties:
          researchId:
            type:
            - string
            description: Unique identifier for tracking and retrieving this research request
          createdAt:
            type:
            - number
            description: When the research was created (Unix timestamp in milliseconds)
          model:
            default: exa-research
            type:
            - string
            enum:
            - exa-research-fast
            - exa-research
            - exa-research-pro
            description: The model used for this research request
          instructions:
            type:
            - string
            description: The original research instructions provided
          outputSchema:
            type:
            - object
            additionalProperties: {}
            description: The JSON Schema used to validate the output, if provided
          status:
            type:
            - string
            enum:
            - pending
        required:
        - researchId
        - createdAt
        - instructions
        - status
        title: Pending
      - type:
        - object
        properties:
          researchId:
            type:
            - string
            description: Unique identifier for tracking and retrieving this research request
          createdAt:
            type:
            - number
            description: When the research was created (Unix timestamp in milliseconds)
          model:
            default: exa-research
            type:
            - string
            enum:
            - exa-research-fast
            - exa-research
            - exa-research-pro
            description: The model used for this research request
          instructions:
            type:
            - string
            description: The original research instructions provided
          outputSchema:
            type:
            - object
            additionalProperties: {}
            description: The JSON Schema used to validate the output, if provided
          status:
            type:
            - string
            enum:
            - running
          events:
            type:
            - array
            items:
              $ref: '#/components/schemas/ResearchEventDtoClass'
            description: Real-time log of operations as research progresses. Poll this endpoint or use ?stream=true for live
              updates.
        required:
        - researchId
        - createdAt
        - instructions
        - status
        title: Running
      - type:
        - object
        properties:
          researchId:
            type:
            - string
            description: Unique identifier for tracking and retrieving this research request
          createdAt:
            type:
            - number
            description: When the research was created (Unix timestamp in milliseconds)
          model:
            default: exa-research
            type:
            - string
            enum:
            - exa-research-fast
            - exa-research
            - exa-research-pro
            description: The model used for this research request
          instructions:
            type:
            - string
            description: The original research instructions provided
          outputSchema:
            type:
            - object
            additionalProperties: {}
            description: The JSON Schema used to validate the output, if provided
          status:
            type:
            - string
            enum:
            - completed
          events:
            type:
            - array
            items:
              $ref: '#/components/schemas/ResearchEventDtoClass'
            description: Detailed log of all operations performed during research. Use ?events=true to include this field
              for debugging or monitoring progress.
          output:
            type:
            - object
            properties:
              content:
                type:
                - string
                description: The complete research output as text. If outputSchema was provided, this is a JSON string.
              parsed:
                type:
                - object
                additionalProperties: {}
                description: Structured JSON object matching your outputSchema. Only present when outputSchema was provided
                  and the output successfully validated.
            required:
            - content
            description: The final research results, containing both raw text and parsed JSON if outputSchema was provided
          citations:
            type:
            - array
            items:
              type:
              - object
              properties:
                id:
                  type:
                  - string
                url:
                  type:
                  - string
                publishedDate:
                  type:
                  - string
                author:
                  type:
                  - string
                  - 'null'
                score:
                  type:
                  - number
                text:
                  type:
                  - string
                highlights:
                  type:
                  - array
                  items:
                    type:
                    - string
                highlightScores:
                  type:
                  - array
                  items:
                    type:
                    - number
                summary:
                  type:
                  - string
                links:
                  type:
                  - array
                  items:
                    type:
                    - object
                    properties:
                      url:
                        type:
                        - string
                      text:
                        type:
                        - string
                    required:
                    - url
                    - text
                subpages:
                  type:
                  - array
                  items:
                    type:
                    - object
                    properties:
                      id:
                        type:
                        - string
                      title:
                        type:
                        - string
                      url:
                        type:
                        - string
                      publishedDate:
                        type:
                        - string
                      author:
                        type:
                        - string
                        - 'null'
                      text:
                        type:
                        - string
                      favicon:
                        type:
                        - string
                    required:
                    - id
                    - title
                    - url
                image:
                  type:
                  - string
                  - 'null'
                  description: URL of the image associated with the result
                favicon:
                  type:
                  - string
                  - 'null'
                  description: URL of the favicon associated with the result
                description:
                  type:
                  - string
                subtitle:
                  type:
                  - string
                snippet:
                  type:
                  - string
                profile:
                  discriminator:
                    propertyName: type
                  oneOf:
                  - type:
                    - object
                    properties:
                      type:
                        type:
                        - string
                        enum:
                        - linkedin_company
                      content:
                        type:
                        - object
                        properties:
                          name:
                            type:
                            - string
                          url:
                            type:
                            - string
                          slogan:
                            type:
                            - string
                          about_us:
                            type:
                            - string
                          founded_year:
                            type:
                            - number
                          funding:
                            type:
                            - object
                            properties:
                              number_of_rounds:
                                type:
                                - string
                              price:
                                type:
                                - string
                              last_round_date:
                                type:
                                - string
                              last_round_stage:
                                type:
                                - string
                          website:
                            type:
                            - string
                          categories:
                            type:
                            - array
                            items:
                              type:
                              - string
                          industry:
                            type:
                            - string
                          image_url:
                            type:
                            - string
                          cover_image_url:
                            type:
                            - string
                          employees_num:
                            type:
                            - number
                          followers_num:
                            type:
                            - number
                          company_size:
                            type:
                            - string
                          company_type:
                            type:
                            - string
                          affiliated_companies:
                            type:
                            - array
                            - 'null'
                            items:
                              type:
                              - object
                              properties:
                                company_name:
                                  type:
                                  - string
                                industry:
                                  type:
                                  - string
                                social_url:
                                  type:
                                  - string
                                image_url:
                                  type:
                                  - string
                          headquarters:
                            type:
                            - string
                          country_code:
                            type:
                            - string
                          locations:
                            type:
                            - array
                            items:
                              type:
                              - object
                              properties:
                                address:
                                  type:
                                  - string
                                  - 'null'
                                address_2:
                                  type:
                                  - string
                                  - 'null'
                                primary:
                                  type:
                                  - boolean
                              required:
                              - primary
                          specialties:
                            type:
                            - array
                            items:
                              type:
                              - string
                          crunchbase_url:
                            type:
                            - string
                          stock_symbol:
                            type:
                            - string
                          meta_data:
                            type:
                            - object
                            properties:
                              last_changed:
                                type:
                                - string
                              schema_version:
                                type:
                                - string
                              profile_id:
                                type:
                                - string
                            required:
                            - schema_version
                            - profile_id
                        required:
                        - name
                        - url
                        - meta_data
                    required:
                    - type
                    - content
                  - type:
                    - object
                    properties:
                      type:
                        type:
                        - string
                        enum:
                        - company
                      content:
                        oneOf:
                        - type:
                          - object
                          properties:
                            url:
                              type:
                              - string
                            linkedin_url:
                              type:
                              - string
                            version:
                              default: 1-complete
                              type:
                              - string
                              enum:
                              - 1-complete
                            identity:
                              type:
                              - object
                              properties:
                                name:
                                  type:
                                  - string
                                legal_name:
                                  type:
                                  - string
                                  - 'null'
                                aliases:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                                ids:
                                  type:
                                  - object
                                  - 'null'
                                  properties:
                                    coresignal:
                                      type:
                                      - string
                                      - 'null'
                                    linkedin:
                                      type:
                                      - string
                                      - 'null'
                                    crunchbase:
                                      type:
                                      - string
                                      - 'null'
                                    pitchbook:
                                      type:
                                      - string
                                      - 'null'
                                tickers:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - object
                                    properties:
                                      symbol:
                                        type:
                                        - string
                                      exchange:
                                        type:
                                        - string
                                        - 'null'
                                    required:
                                    - symbol
                              required:
                              - name
                            classification:
                              type:
                              - object
                              - 'null'
                              properties:
                                industry:
                                  type:
                                  - string
                                  - 'null'
                                industries:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                                categories:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                                keywords:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                                sic_codes:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                                naics_codes:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                                is_b2b:
                                  type:
                                  - boolean
                                  - 'null'
                                is_public:
                                  type:
                                  - boolean
                                  - 'null'
                                company_type:
                                  type:
                                  - string
                                  - 'null'
                            locations:
                              type:
                              - object
                              - 'null'
                              properties:
                                headquarters:
                                  type:
                                  - object
                                  - 'null'
                                  properties:
                                    address:
                                      type:
                                      - string
                                      - 'null'
                                    city:
                                      type:
                                      - string
                                      - 'null'
                                    state:
                                      type:
                                      - string
                                      - 'null'
                                    country:
                                      type:
                                      - string
                                      - 'null'
                                    country_code:
                                      type:
                                      - string
                                      - 'null'
                                    postal_code:
                                      type:
                                      - string
                                      - 'null'
                                    is_hq:
                                      type:
                                      - boolean
                                      - 'null'
                                offices:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - object
                                    properties:
                                      address:
                                        type:
                                        - string
                                        - 'null'
                                      city:
                                        type:
                                        - string
                                        - 'null'
                                      state:
                                        type:
                                        - string
                                        - 'null'
                                      country:
                                        type:
                                        - string
                                        - 'null'
                                      country_code:
                                        type:
                                        - string
                                        - 'null'
                                      postal_code:
                                        type:
                                        - string
                                        - 'null'
                                      is_hq:
                                        type:
                                        - boolean
                                        - 'null'
                                hq_city:
                                  type:
                                  - string
                                  - 'null'
                                hq_country:
                                  type:
                                  - string
                                  - 'null'
                                regions:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                            profiles:
                              type:
                              - object
                              - 'null'
                              properties:
                                website:
                                  type:
                                  - string
                                  - 'null'
                                website_aliases:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - string
                                social:
                                  type:
                                  - array
                                  - 'null'
                                  items:
                                    type:
                                    - object
                                    properties:
                                      platform:
                                        type:
                                        - string
                                      url:
                                        type:
                                        - string
                                        - 'null'
                                      followers:
                                        type:
                                        - number
     

# --- truncated at 32 KB (212 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/exa-ai/refs/heads/main/openapi/exa-research-api-openapi.yml