> ## Documentation Index
> Fetch the complete documentation index at: https://aisa.one/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Poll an Agent Run

> Fetch an Agent run submitted by post_exa_agent_runs, by its jobId.

Fetch an Agent run submitted by [`post_exa_agent_runs`](/docs/api-reference/search/post_exa-agent-runs), by its `jobId`. Returns the same envelope — `id`, `status`, `createdAt`, `completedAt`, `pricing`, `output`, `error`. Repeat until `status` is `completed`, `failed` or `cancelled`; on success `output` carries `text`, `structured` and `grounding`. Reads a run only; it cannot start one.


## OpenAPI

````yaml openapi/exa.json GET /exa/agent/runs/{jobId}
openapi: 3.0.0
info:
  title: Exa API
  version: 1.0.0
  description: >-
    Unified API documentation for Exa neural semantic search endpoints exposed
    through the AIsa gateway: Search, Contents, Answer, and the asynchronous
    research Agent Runs.


    Search, Contents, and Answer are synchronous and billed at a flat $0.08 per
    successful request. Agent Runs is asynchronous: the caller submits a run and
    then polls the returned job resource for status and results, billed at a
    flat $0.10 per run. Upstream 4xx responses (for example 401/403/404) are not
    billed. The `costDollars` field that Exa returns is the upstream cost
    breakdown and is informational only — customer billing follows the flat AIsa
    prices above.
servers:
  - url: https://api.aisa.one/apis/v1
security:
  - bearerAuth: []
paths:
  /exa/agent/runs/{jobId}:
    get:
      tags:
        - https://docs.exa.ai/reference/get-a-research-task
      summary: Poll a research Agent run.
      description: >-
        Fetch an Agent run submitted by `post_exa_agent_runs`, by its `jobId`.
        Returns the same envelope — `id`, `status`, `createdAt`, `completedAt`,
        `pricing`, `output`, `error`. Repeat until `status` is `completed`,
        `failed` or `cancelled`; on success `output` carries `text`,
        `structured` and `grounding`. Reads a run only; it cannot start one.
      operationId: get_exa_agent_run
      parameters:
        - in: path
          name: jobId
          required: true
          schema:
            type: string
          description: The job id returned by the submit call.
      responses:
        '200':
          description: The current state of the research run.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncJob'
components:
  schemas:
    AsyncJob:
      type: object
      description: >-
        An asynchronous integration job. Returned by the submit call (HTTP 202)
        and by the poll/detail call. Poll the job by its id until status is a
        terminal value (completed, failed, or cancelled).
      properties:
        id:
          type: string
          description: Unique AIsa job identifier. Use it to poll, list, or cancel the job.
          example: iaj_01HZY8Q2M4K7N9V3T6W1X0B2C3
        object:
          type: string
          description: Always "integration_async_job".
          example: integration_async_job
        endpoint:
          type: string
          description: The submit endpoint this job belongs to.
          example: /apis/v1/exa/agent/runs
        status:
          type: string
          enum:
            - queued
            - running
            - completed
            - failed
            - cancelled
          description: >-
            Customer-facing lifecycle status. queued and running are
            non-terminal; completed, failed, and cancelled are terminal.
        createdAt:
          type: string
          format: date-time
          description: When the job was accepted.
        completedAt:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the job reached a terminal status. Null while the job is still
            queued or running.
        pricing:
          type: object
          properties:
            currency:
              type: string
              example: USD
            authorizedMicrosUSD:
              type: integer
              description: >-
                Amount authorized (held) when the job was admitted, in
                micro-USD. Agent Runs settle at the flat $0.10 per run.
            finalMicrosUSD:
              type: integer
              nullable: true
              description: >-
                Final settled cost in micro-USD once the job is terminal. Null
                until settlement.
            billingMode:
              type: string
              description: Billing mode for the job.
              example: flat_per_call
        output:
          description: >-
            Job result payload. Present only once status is completed. For Agent
            Runs this is the structured research result.
          nullable: true
        outputExpired:
          type: boolean
          description: >-
            True when the result has been retained past its retention window and
            is no longer retrievable.
        error:
          type: object
          nullable: true
          description: Present when status is failed. Null otherwise.
          properties:
            code:
              type: string
              description: Machine-readable error code.
            message:
              type: string
              description: Human-readable error message.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````