---
title: "The progress of one handoff [read]"
method: GET
path: "/session-handoffs/{id}"
tags: ["sessions"]
---

# The progress of one handoff \[read\]

`GET /session-handoffs/{id}`

## Request

- Base URL: `https://api.agentsky.dev/v1`
- URL: `https://api.agentsky.dev/v1/session-handoffs/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Response `200`

OK

- object
  - `handoff` SessionHandoff, required: `resolved_mode` is how the move was actually made: `native_fork` when source and target share a harness and the pod's own state could be forked, else `summary` — a written handover the target reads as history, never as instructions. `target_session` is null until the move completes.
    - `id` string, required: handoff_…
    - `source_session` string, nullable
    - `target_session` string, nullable
    - `last_message_id` string, nullable
    - `target_agent` string, nullable
    - `status` string, required: Lowercased HandoffStatus: pending · checkpointing · provisioning · restoring · completed · retry_wait · failed · cancelled. Terminal: completed, failed, cancelled.
    - `resolved_mode` 'native_fork' | 'summary', required
    - `resolution_reason` string, nullable
    - `hands` 'carry' | 'attach' | 'null', nullable: `carry` copies the source's workspace files into the new session's sandbox; `attach` keeps the source's sandbox under the new agent
    - `workspace_carried` boolean, nullable: For `carry`: whether the workspace files were copied. False when the source sandbox was too old to export them; the conversation still moved
    - `workspace_folder` string, nullable: For a Mac-synced chat its owner continued: where the folder the Mac stored was restored in the new session. Null otherwise
    - `checkpoint` object, nullable: What was carried across, without its content
      - `format` string, nullable
      - `format_version` string, nullable
      - `sha256` string, nullable
      - `size_bytes` integer, nullable
    - `summary` object, nullable: What was carried across, without its content
      - `format` string, nullable
      - `format_version` string, nullable
      - `sha256` string, nullable
      - `size_bytes` integer, nullable
    - `error` object, nullable
      - `code` string
      - `message` string
      - `retryable` boolean
    - `status_url` string, required: GET it to poll the move
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `completed_at` string, date-time, nullable

## Other responses

- `default`: Error — { error: { code, message } }

## Changes

- **2026-11-02** `e5e8f0229a99`: 4 info
  - added the optional property `error/request_id` to the response with the `default` status
  - added the optional property `handoff/hands` to the response with the `200` status
  - added the optional property `handoff/workspace_carried` to the response with the `200` status
  - added the optional property `handoff/workspace_folder` to the response with the `200` status

[Operation history](https://skmtc.dev/agentsky/apis/agentsky-developer-api/changes/session-handoffs/:id/get.md)

---

[API](https://skmtc.dev/agentsky/apis/agentsky-developer-api.md) - [All operations](https://skmtc.dev/agentsky/apis/agentsky-developer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/agentsky/apis/agentsky-developer-api/revisions/8280a065ef6a?raw)
