# GET /v1/conversations/{conversation_id}/messages

> The conversation, paged: your messages, Bash's replies, and summaries of the work it did.

In [Conversations API](https://vestra.ai/developers/reference/api/conversations.md): Ask Bash in a conversation, follow its reply as it happens, and stop it.

Send `Authorization: Bearer vk_test_...` on every call.

The conversation, paged: your messages, Bash's replies, and summaries of the work it did.

Your API key, or a session's token, scope `runtime` or `all`. On the card: [`ask`](https://vestra.ai/developers/ask.md). Over HTTP it is made from the contract: fill in each {…} and every value.

## Request

Path:

- `conversation_id` (`string`, required): The conversation's id (`conv_...`).

Query:

- `limit` (`integer`): How many items per page, 1 to 100. Default 20.
- `cursor` (`string`): Where to go on from: the `next_cursor` of the page before, unchanged. Absent: the first page.

## Answers 200

- `data` (`object[]`): The items on this page.
  - `id` (`string`): The line.
  - `object` (`"conversation.message"`): Always conversation.message.
  - `turn_id` (`string`): The turn it belongs to (turn_...).
  - `role` (`"user" | "assistant"`): user: what was sent. assistant: what Bash said back.
  - `text` (`string`): The words. A send of tool results reads "Tool results:" and the tools it answered.
  - `work` (`object[]`): On Bash's line: the work its reply started.
    - `task_id` (`string`): The task (task_...).
    - `title` (`string | null`): What the work is; null until Bash names it.
  - `created_at` (`string`): When it was said, as an ISO 8601 time.
- `next_cursor` (`string | null`): Send it as `cursor` for the next page; null on the last page.

## Code

**HTTP**

```bash
curl "$VESTRA_BASE_URL/v1/conversations/{conversation_id}/messages" \
  -H "Authorization: Bearer $VESTRA_API_KEY"
```

**TypeScript, Python, CLI, MCP**: No sample in your language for this route, so here it is over HTTP.
