Read conversation messages

Changed on

<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. Read its arguments_string to see what it is asking to do, then answer it with Submit tool-call input to let the turn continue. A waiting call carries its arguments in full, while a call that is not waiting can carry them cut short. The browser-typing tools are redacted either way, so a call from one of those cannot be reviewed before approving it.

Set branch_id to read a branch's conversation. It holds the branch's own messages, not main's.

For a pull-request branch, the displayed history also includes informational PR activity. Those entries are not messages sent to the AI and do not affect chat recovery.

<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>

get/api/apps/{app_id}/chat/full-conversation

Request

  • Base URL: https://app.base44.com
  • URL: https://app.base44.com/api/apps/{app_id}/chat/full-conversation
  • Auth: HTTP bearer

Path parameters

app_idstring required

ID of the app whose conversation to read.

Query parameters

limitinteger

Maximum number of messages to return, counted back from the newest. Omit to return the whole conversation.

skipinteger

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. Prefer cursor.

cursorstring

next_cursor from the previous page, which returns the older messages before it. Send it without skip. It carries the page size, so limit is ignored. Pages are counted back from the newest message, so a message added while you page shifts the next page by one and repeats a message you already have.

branch_idstring

ID of the branch to work on, as returned by List branches. Omit it to work on the app's main branch.

Response

Successful Response

idstring nullable

ID of the conversation.

next_cursorstring nullable

Cursor for fetching the next page. The value is null if there are no more pages, or if limit wasn't set.

Example response

{
  "id": "1f0c2b7a-9d51-4c3e-8a62-7b4d5e6f8a90",
  "messages": [
    {
      "id": "7f3a1c88-52d4-4a0e-9b31-2c6f0d8e4a19",
      "role": "assistant",
      "content": "I added a contact form to the home page.",
      "file_urls": [
        "https://example.com/mockup.png"
      ],
      "checkpoint_id": "6886b8d390dc7e2f4a2c91b3",
      "tool_calls": [
        {
          "id": "toolu_01A9FJd3kP2mNqRs7VwXyZ4b",
          "name": "create_file",
          "status": "waiting_for_user_input",
          "requires_user_input": true,
          "arguments_string": "{\"file_path\": \"src/pages/Home.jsx\", \"content\": \"export default function Home() {}\"}"
        }
      ],
      "usage": {
        "prompt_tokens": 18432,
        "completion_tokens": 742,
        "credits_charged": 1.5
      },
      "metadata": {
        "created_date": "2026-08-02T14:30:00",
        "created_by_email": "developer@example.com"
      }
    }
  ],
  "next_cursor": "gAAAAABn7vJ..."
}

Changes

    • breaking

      query request parameter branch_id list-of-types was narrowed by removing types null

    • breaking

      query request parameter cursor list-of-types was narrowed by removing types null

    • breaking

      query request parameter limit list-of-types was narrowed by removing types null

    • breaking

      query request parameter skip list-of-types was narrowed by removing types null

    • breaking

      for the query request parameter limit, the type changed from no type to integer

    • breaking

      for the query request parameter skip, the type changed from no type to integer

    • info

      for the query request parameter branch_id, the type was generalized from no type to string

    • info

      for the query request parameter cursor, the type was generalized from no type to string

    • info

      added the new optional query request parameter branch_id