---
title: "Get coding session"
method: GET
path: "/api/apps/{app_id}/imported/sessions/{session_id}"
---

# Get coding session

`GET /api/apps/{app_id}/imported/sessions/{session_id}`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/imported/sessions/{session_id}`
- Auth: HTTP bearer

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

Read a coding session's progress and pull request. Authenticate with a platform Bearer token whose user has editor access to the app. Limited to 60 requests per minute per user. Responses include X-Request-Id and rate-limit headers.

## Path parameters

- `session_id` string, required: The session's identifier.
- `app_id` string, required

## Response `200`

Successful Response

- SessionResponse
  - `launch_key` string, nullable: The original Idempotency-Key, or `null` for sessions created before key recovery was recorded. Use the same principal and key to retry a queued launch.
  - `client_reference` string, nullable: Your application reconciliation reference, or null.
  - `id` string, required: The session's opaque identifier.
  - `state` 'queued' | 'running' | 'opening_pull_request' | 'needs_input' | 'completed' | 'failed' | 'cancelling' | 'cancelled', required: The session's state: `queued`, `running`, `opening_pull_request`, `needs_input`, `completed`, `failed`, `cancelling`, or `cancelled`.
  - `message_id` string, nullable, required: The UUID of the session's user message, or `null` before dispatch. Queued processing updates it to the UUID used for the turn.
  - `input_request_id` string, nullable: Opaque identifier of the current question or approval pause, or `null` when the session is not waiting for input or the pause predates identifier tracking. Use it to deduplicate notifications for repeated input requests. To answer, use the `input_request_id` from Get a coding session's open question.
  - `repository_full_name` string, required: The connected repository the session runs in.
  - `branch_id` string, nullable, required: The session's Base Code branch identifier, or `null` before provisioning.
  - `branch_name` string, nullable, required: The session's working Git branch, or `null` before provisioning.
  - `session_url` string, nullable, required: The Base Code editor URL for inspecting the session or answering pending questions, or `null` until its branch is provisioned.
  - `pull_request` SessionPullRequest, required
    - `number` integer, required: The pull request's number in the connected repository.
    - `url` string, required: The pull request's URL.
  - `error_code` string, nullable, required: The stable failure cause, or `null` if there is no failure.
  - `outcome` 'pull_request' | 'answer', nullable: How a `completed` session ended: `pull_request` when it opened or updated a pull request, `answer` when it ended without one and replied instead; `has_unpublished_changes` says whether that branch still changes files. `null` until the session completes.
  - `summary` string, nullable: The session's final reply in Markdown, up to 10,000 characters: the answer for an `answer` outcome, the change summary for a `pull_request` outcome. `null` until the session publishes.
  - `has_unpublished_changes` boolean: `true` when an `answer` session's branch changes files that no pull request carries yet: send a message asking for one to have the agent open it. `false` otherwise.

## Other responses

- `401`: `unauthenticated`: Missing or invalid credentials.
- `403`: `forbidden`: You don't have write access to this app or repository.
- `404`: `not_found`: The imported app or session was not found.
- `409`: `idempotency_conflict` or `conflict`: The request conflicts with an earlier launch or current repository state.
- `422`: `invalid_request`: The input or Idempotency-Key is invalid.
- `429`: `rate_limited`: Retry after the number of seconds in Retry-After.

## Changes

> 58 revisions in range; 1 not diffed.

- **2026-10-15** `be100564f5a1`: 1 info
  - added the optional property `has_unpublished_changes` to the response with the `200` status
- **2026-10-15** `99162eae7daf`: 1 info
  - removed the non-success response with the status `500`
- **2026-10-14** `31b59ecae1c9`: 2 info
  - added the optional property `outcome` to the response with the `200` status
  - added the optional property `summary` to the response with the `200` status
- **2026-10-13** `b92cc2f13639`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/adexad/apis/base44-app-management-api/changes/api/apps/:app_id/imported/sessions/:session_id/get.md)

---

[API](https://skmtc.dev/adexad/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/adexad/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adexad/apis/base44-app-management-api/revisions/fa29e915c226?raw)
