---
title: "Read conversation messages"
method: GET
path: "/api/apps/{app_id}/chat/full-conversation"
---

# Read conversation messages

`GET /api/apps/{app_id}/chat/full-conversation`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the app's AI chat, both the messages sent to the AI and the replies it produced, oldest first.

An assistant message can have empty `content` when the whole turn is carried by tool calls, so treat an empty message as work the AI did rather than an error. Messages with `hidden` set to `true` are internal and do not appear in the app editor, so skip them to reconstruct the transcript shown there.

A tool call whose `status` is `waiting_for_user_input` means the AI has paused and cannot continue until that call is answered. Answer it with [Submit tool-call input](/api-reference/submit-tool-call-input) to let the turn continue.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

## Path parameters

- `app_id` string, required — ID of the app whose conversation to read.

## Query parameters

- `limit` integer, nullable — Maximum number of messages to return, counted back from the newest. Omit to return the whole conversation.
- `skip` integer, nullable — Number of messages to skip, counted back from the newest. Combine with `limit` to page back through the conversation. For example, `skip=20` with `limit=20` returns the 20 messages before the 20 most recent.

## Response `200`

Successful Response

- ConversationDetail — A window of messages from an app's AI chat.
  - `id` string, nullable — ID of the conversation.
  - `messages` ConversationMessageSummary[], nullable — The requested window of messages, oldest first.
    - `id` string, nullable — ID of the message.
    - `role` 'user' | 'assistant' | 'system', nullable — Who produced the message. A `user` message is a prompt sent to the AI, an `assistant` message is the AI's reply, and a `system` message is a platform-generated note.
    - `content` string, nullable — Text of the message. Empty on assistant turns whose work is carried entirely by tool calls, and on internal diff messages.
    - `file_urls` string[], nullable — URLs of the files attached to the message, or `null` if it has none.
    - `hidden` boolean, nullable — Whether the message is internal and hidden from the chat in the app editor.
    - `checkpoint_id` string, nullable — ID of the [checkpoint](/developers/references/app-management/get-started/concepts#checkpoints) this message produced, or `null` if it produced none. Pass it as `checkpoint_id` to [Deploy an app](/api-reference/deploy-an-app) to deploy that version.
    - `tool_calls` ConversationToolCallSummary[], nullable — Tool calls the AI made on this message, or `null` on messages that made none. A call with `status` set to `waiting_for_user_input` is holding the turn open until it is answered.
      - `id` string, nullable — ID of the tool call. Pass it as `tool_call_id` to [Submit tool-call input](/api-reference/submit-tool-call-input) when `status` is `waiting_for_user_input`.
      - `name` string, nullable — Name of the tool the AI is calling.
      - `status` 'running' | 'success' | 'error' | 'stopped' | 'waiting_for_user_input', nullable — Where the tool call is. Either `running`, `success`, `error`, `stopped`, or `waiting_for_user_input`. The last one means the turn is paused until the call is answered.
      - `requires_user_input` boolean, nullable — Whether this tool call has to be approved or rejected before the turn can continue.
    - `usage` MessageUsageSummary
      - `prompt_tokens` integer, nullable — Tokens the model read for this message, including the conversation history it was given.
      - `completion_tokens` integer, nullable — Tokens the model generated for this message.
      - `credits_charged` number, nullable — Credits charged for this message, or `null` if it was not billed.
    - `metadata` MessageMetadataSummary
      - `created_date` string, date-time, nullable — Time the message was created, as a UTC timestamp in ISO 8601 format.
      - `created_by_email` string, nullable — Email of the user whose turn produced the message, or `anonymous` on a message Base44 created with no user in context.

## Other responses

- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app.
- `404` — App not found.
- `422` — The `limit` or `skip` is not an integer.

## Changes

- **2026-08-30** `394136a6cdd4` — 1 breaking
  - removed the media type `application/json` for the response with the status `422`
- **2026-08-24** `a58b38664ce9` — 1 info
  - added the optional property `messages/anyOf[subschema #1]/items/tool_calls` to the response with the `200` status
- **2026-08-23** `25fbcaf1823e` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/chat/full-conversation/get.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/idealspot/base44-app-management-api/revisions/394136a6cdd4/schema)
