---
title: "GET /harness/sessions/{sessionId}/checkpoints"
description: List checkpoints
full: true
---

**Auth:** required. Send an `ivy_` API key (`Authorization: Bearer ivy_…` or `X-Ivy-Api-Key`), a Clerk session JWT (`Authorization: Bearer …`) or the Clerk `__session` cookie (browser sessions). See [Authentication](/docs/api/authentication).

Returns checkpoint history for this session, ordered by creation time descending. Use `source` to filter by what triggered the checkpoint.

## Request

#### Path parameters

- `sessionId` (string (uuid)) —
Session UUID (UUIDv7 — time-ordered)

#### Query parameters

- `limit` (integer) —

- `source` (enum (&quot;message&quot; | &quot;manual&quot; | &quot;sync&quot; | &quot;job_complete&quot; | &quot;subagent&quot; | &quot;tool_execution&quot;)) —
Filter by checkpoint source

## Responses

### `200` OK

Checkpoints listed

Response shape:

- `checkpoints` (object[]) —

- `total` (integer) —

### `401` Unauthorized

Authentication required

Response shape: `object`

### `404` Not Found

Resource not found

Response shape: `object`

**curl**

```bash
curl -X GET 'https://ivybiosciences.com/api/harness/sessions/{sessionId}/checkpoints' \
  -H "Authorization: Bearer $IVY_API_KEY"
```

**JavaScript**

```js
const res = await fetch('https://ivybiosciences.com/api/harness/sessions/{sessionId}/checkpoints', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${process.env.IVY_API_KEY}`,
  },
});
const data = await res.json();
```

**Python**

```python
import os, requests

res = requests.get(
    "https://ivybiosciences.com/api/harness/sessions/{sessionId}/checkpoints",
    headers={"Authorization": f"Bearer {os.environ['IVY_API_KEY']}"},
)
data = res.json()
```
