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

# Answer Progress

> Read the live progress line for an in-flight answer

The streaming [Ask Question](/api-reference/endpoints/ask-question) call holds one
connection, so a client that wants to show what the Guru is doing right now
(retrieval, which tool is running) polls this endpoint instead of guessing from
elapsed time.

Each end user gets their own progress line, keyed by the `external_user_id` you
pass. Poll while the answer stream is open and stop as soon as the stream ends.
Polls count against the same per-end-user rate limit as Ask Question, so poll
no more than every 1 to 2 seconds.

<Note>
  Progress text is generated from the pipeline stages. Only the argument values an
  [Agentic Action](/guides/actions) declares as an `enum` are echoed into the line.
  Treat the line as a status hint, not as content to store.
</Note>

## Path Parameters

<ParamField path="guru_slug" type="string" required>
  The slug of the Guru whose in-flight answer is being polled.
</ParamField>

## Headers

<ParamField header="x-api-key" type="string" required>
  Your API key for authentication. You can obtain your API key from the [Gurubase dashboard](https://app.gurubase.io/api-keys).
</ParamField>

## Query Parameters

<ParamField query="external_user_id" type="string" required>
  The same `external_user_id` you passed to the [Ask Question](/api-reference/endpoints/ask-question) call whose progress you want to read.
</ParamField>

### Response

<ResponseField name="status_text" type="string">
  A short human-readable line describing what the pipeline is doing right now
  (for example `Gathering context...`, `Searching the knowledge base...`,
  `Using: search_orders`, `Writing the answer...`). Empty string when nothing has
  been reported yet or the line has expired (about 2 minutes after its last
  update). The last line (`Writing the answer...`) stays after the stream ends
  until it expires.
</ResponseField>

<ResponseField name="updated_at" type="number | null">
  Unix timestamp (seconds, float) of when `status_text` was last written. `null`
  when nothing has been reported yet or the line has expired. Compare it against the time you started
  the answer request to discard a stale line left over from a previous question
  on the same `external_user_id`.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.gurubase.io/api/v1/{guru_slug}/answer-progress/?external_user_id=end-user-123' \
    --header 'x-api-key: YOUR_API_KEY'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.gurubase.io/api/v1/{guru_slug}/answer-progress/"
  params = {"external_user_id": "end-user-123"}
  headers = {"x-api-key": "YOUR_API_KEY"}

  response = requests.get(url, params=params, headers=headers)
  print(response.json())
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
      "status_text": "Searching the knowledge base...",
      "updated_at": 1755846130.482
  }
  ```

  ```json 200 (nothing reported yet) theme={null}
  {
      "status_text": "",
      "updated_at": null
  }
  ```

  ```json 400 theme={null}
  {
      "msg": "external_user_id is required"
  }
  ```

  ```json 401 theme={null}
  {
      "msg": "Invalid API key"
  }
  ```

  ```json 404 theme={null}
  {
      "msg": "Guru type {guru_slug} not found"
  }
  ```

  ```json 429 theme={null}
  {
      "msg": "Request was throttled. Expected available in 56 seconds."
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.