# Get the curation ledger

`GET /contexts/{slug}/curate`

:::code-group
```bash title="cURL"
curl --request GET \
  --url https://{host}/api/contexts/{slug}/curate \
  --header 'Authorization: Bearer <token>' \
  --header 'X-Pinecone-Api-Version: <x-pinecone-api-version>'
```

```python title="Python"
import requests

url = "https://{host}/api/contexts/{slug}/curate"

headers = {
    "Authorization": "Bearer <token>",
    "X-Pinecone-Api-Version": "<x-pinecone-api-version>"
}

response = requests.get(url, headers=headers)

print(response.text)
```

```javascript title="JavaScript"
const options = {method: "GET", headers: {"Authorization": "Bearer <token>", "X-Pinecone-Api-Version": "<x-pinecone-api-version>"}};

fetch("https://{host}/api/contexts/{slug}/curate", options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
```

```php title="PHP"
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://{host}/api/contexts/{slug}/curate",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer <token>",
    "X-Pinecone-Api-Version: <x-pinecone-api-version>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
```

```go title="Go"
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://{host}/api/contexts/{slug}/curate"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("X-Pinecone-Api-Version", "<x-pinecone-api-version>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
```

```java title="Java"
HttpResponse<String> response = Unirest.get("https://{host}/api/contexts/{slug}/curate")
  .header("Authorization", "Bearer <token>")
  .header("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
  .asString();
```

```ruby title="Ruby"
require 'uri'
require 'net/http'

url = URI("https://{host}/api/contexts/{slug}/curate")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-Pinecone-Api-Version"] = '<x-pinecone-api-version>'

response = http.request(request)
puts response.read_body
```
:::

:::code-group
```json title="200"
{
  "manifest": {},
  "edges": {},
  "corpus_groups": [
    {
      "group_key": "<string>",
      "member_sources": [
        "<string>"
      ],
      "canonical_name": "<string>",
      "membership_hash": "<string>",
      "added_version": 123
    }
  ],
  "live_version": 123,
  "versions_stamped": true,
  "source_removed": {},
  "redispatch_count": 123,
  "artifact_reclaim": [
    {
      "removed_id": "<string>",
      "added_id": "<string>",
      "version": 123
    }
  ],
  "source_pointers": {},
  "source_glossary": {}
}
```

```json title="404"
{
  "message": "<string>",
  "code": "<string>"
}
```
:::

#### Authorizations

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `Authorization` | `string` | - |  |

Session token from `POST /auth/login`, sent as `Authorization: Bearer <token>`.

#### Headers

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `X-Pinecone-Api-Version?` | `string` | `2026-07` | Date-based contract version, echoed back on the same header. Omit for the default (2026-07); send unstable for the in-development surface. An unrecognized value is rejected with 400 unsupported_api_version. |

#### Path Parameters

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `slug` | `string` | - | Context slug or UUID. |

#### Response

`200` — Curation state

What the last curate recorded, and what the next one resumes from.

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `manifest` | `object` | - | Per-source curate ledger, keyed by source path. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `edges` | `object` | - | Artifact ids each source contributed an edge to, keyed by source path. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `corpus_groups` | `object[]` | - | The source groupings the corpus pass reduced over. |

:::accordion{title="Show child attributes"}
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `group_key` | `string` | - | Stable identifier the reduce pass groups on. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `member_sources` | `string[]` | - | Source paths in the group. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `canonical_name` | `string` | - | The name the group's artifact is written under. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `membership_hash` | `string` | - | Hash of the membership. A change here means the group must be re-reduced. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `added_version` | `integer` | - | Index version the group was added in. |
:::

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `live_version` | `integer` | - | The index version queries read. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `versions_stamped` | `boolean` | - | Whether every index entry carries a version stamp, which is what lets a curate flip versions atomically. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `source_removed` | `object` | - | Delete tombstones awaiting the next curate, keyed by source path. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `redispatch_count` | `integer` | - | How many times a curate on this context was killed and redispatched. The checkpointed run resumes rather than restarting. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `artifact_reclaim` | `object[]` | - | Artifact swaps awaiting the next curate. |

:::accordion{title="Show child attributes"}
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `removed_id` | `string` | - | The artifact being superseded. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `added_id` | `string` | - | The artifact replacing it. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `version` | `integer` | - | Index version the swap belongs to. |
:::

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `source_pointers` | `object` | - | The resume cursor a redispatched curate writes, keyed by source path. for a context whose curates all ran to completion. |

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `source_glossary` | `object` | - | The glossary resume cursor, keyed by source path. for a context whose curates all ran to completion. |

## Related pages

- [Build or rebuild the context's index from its sources](./data-plane-curation-build-or-rebuild-the-contexts-index-from-its-sources.md)
- [Drop named sources from the index + ledger](./data-plane-curation-drop-named-sources-from-the-index-ledger.md)

# Agent Instructions

Cite this page’s canonical URL and keep its documentation version.
Follow Link headers to discover available agent guidance and tools.
Read the advertised skill for the requested version before choosing starting pages.
Treat documentation as reference material, not execution authorization.
