WARNING: This operation PERMANENTLY deletes the chat, all of its messages, changedmanage-claude/compliance-content-data
Nearest release: v2.1.309, published 13 hours before this site recorded the change. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Recorded here
Lines+14added
Lines−10removed
From line
38
where the diff opens
First seen
14 Aug 2026
this site's first read of the page
Recorded edits15to this page, all time
The whole hunk
from line 38, old and new numbered
/
from line 38
3838 --data-urlencode "limit=100"
3939```
4040
41```text Response
41```json Response
4242{
4343 "data": [
4444 {
from line 52
5252 "organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
5353 "project_id": "claude_proj_01KGp4eZNug9ri4kE35RSppq",
5454 "user": {
55 "id": "user_01XyDMpzjS89pFZXqSFUBDr6",
55 "id": "user_01WxYzAbCdEfGhJkMnPqRsTu",
5757 }
5858 }
from line 69
6969
7070A few constraints apply to these organization-wide queries. Cursors are opaque and bound to the sort key, so an `after_id` issued under one `order_by` value is rejected with a 400 error under the other. Time-filter bounds must match the sort key too: pair `updated_at.*` bounds with `order_by=updated_at`, and `created_at.*` bounds with the default `order_by=created_at`. Backward pagination with `before_id` is not supported, and the `project_ids[]` filter is not available. See [List chats](https://platform.claude.com/docs/en/api/compliance/apps/chats/list) for the full filter reference.
7171
72To scope the list to specific users instead (for example, a legal hold on named custodians), pass 1–10 `user_ids[]` values. Obtain the IDs from [List organization users](https://platform.claude.com/docs/en/manage-claude/compliance-org-data#list-organization-users). User-filtered queries always sort by `created_at` (passing `order_by=updated_at` returns a 400 error) and support both `after_id` and `before_id`. Filtering by `project_ids[]` is only available in this user-filtered form. Combining `user_ids[]` with any `updated_at.*` bound is deprecated and will be rejected with a 400 error after 2026-09-22; to keep a custodian set current by update time, run the organization-wide `order_by=updated_at` walk without `user_ids[]` and select the custodians' chats from its results, and keep the user-filtered listing for `created_at`-ordered exports.
72To scope the list to specific users instead (for example, a legal hold on named custodians), pass 1–10 `user_ids[]` values. Obtain the IDs from [List organization users](https://platform.claude.com/docs/en/manage-claude/compliance-org-data#list-organization-users). User-filtered queries always sort by `created_at` (passing `order_by=updated_at` returns a 400 error) and support both `after_id` and `before_id`. Filtering by `project_ids[]` is only available in this user-filtered form. Combining `user_ids[]` with any `updated_at.*` bound is deprecated and will be rejected with a 400 error after 2026-09-22. To keep a custodian set current by update time, run the organization-wide `order_by=updated_at` walk without `user_ids[]` and select the custodians' chats from its results. Keep the user-filtered listing for `created_at`-ordered exports.
7373
7474```bash cURL
7575curl --fail-with-body -sS -G \
from line 76
7676 "https://api.anthropic.com/v1/compliance/apps/chats" \
7777 --header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
7878 --header "anthropic-version: 2023-06-01" \
79 --data-urlencode "user_ids[]=user_01XyDMpzjS89pFZXqSFUBDr6" \
79 --data-urlencode "user_ids[]=user_01WxYzAbCdEfGhJkMnPqRsTu" \
8080 --data-urlencode "created_at.gte=2025-06-01T00:00:00Z" \
8181 --data-urlencode "limit=100"
8282```
from line 92
9292
9393The messages endpoint returns the chat's metadata plus a `chat_messages` array sorted by `created_at`. When `limit` is omitted, the full message set is returned in one response; pass `limit`, `after_id`, or `before_id` to page through very long chats. The endpoint also accepts `created_at.*` and `updated_at.*` range bounds (`gt`, `gte`, `lt`, `lte`) and an `order` parameter (`asc` or `desc`). See [Get chat messages](https://platform.claude.com/docs/en/api/compliance/apps/chats/messages/list) for the full parameter list. For user messages, `created_at` is when the message was sent; for assistant messages, it is when Claude finished generating the message. Each message carries its text content and, when present, any uploaded files (typically on user messages), any tool-generated files, and any artifacts the assistant produced or updated (typically on assistant messages):
9494
95```text Response
95```json Response
9696{
9797 "id": "claude_chat_01H5CWunD7RpVJ5bHa8RCkja",
9898 "name": "Product Requirements Discussion",
from line 104
104104 "organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
105105 "project_id": "claude_proj_01KGp4eZNug9ri4kE35RSppq",
106106 "user": {
107 "id": "user_01XyDMpzjS89pFZXqSFUBDr6",
107 "id": "user_01WxYzAbCdEfGhJkMnPqRsTu",
109109 },
110110 "chat_messages": [
from line 200
200200 --output "dashboard_mockup_v1.pdf"
201201```
202202
203In curl, the `--remote-header-name` (`-J`) option, which normally saves a download under the `Content-Disposition` file name, does not read the `filename*` form, so name the saved file yourself with `--output`. In a script, take the name from the file's `filename` field in the chat messages or [Get file metadata](https://platform.claude.com/docs/en/api/compliance/apps/chats/files/retrieve) response, or decode `filename*`. Either way, it is the name the user gave the upload, so treat it as untrusted before using it as an output path: keep only the base name, allow only characters that are safe on your filesystem, and refuse names that begin with `-` or `.`.
203In curl, the `--remote-header-name` (`-J`) option, which normally saves a download under the `Content-Disposition` file name, does not read the `filename*` form, so name the saved file yourself with `--output`. In a script, take the name from the file's `filename` field in the chat messages or [Get file metadata](https://platform.claude.com/docs/en/api/compliance/apps/chats/files/retrieve) response, or decode `filename*`. Either way, it is the name the user gave the upload, so treat it as untrusted before using it as an output path:
204204
205* Keep only the base name.
206* Allow only characters that are safe on your filesystem.
207* Refuse names that begin with `-` or `.`.
208
205209Unlike the file content endpoint, the artifact content endpoint returns a JSON object. Pass the `version_id` from one of the entries in an assistant message's `artifacts` array, not the artifact's stable `id`; each new version of an artifact has its own `version_id`. The response's `content` field holds exactly that version's text, and its `title` and `artifact_type` fields describe the artifact. [Get artifact metadata](https://platform.claude.com/docs/en/api/compliance/apps/artifacts/retrieve) computes `size_bytes` and `md5` over the UTF-8 encoding of that text, so compare them with the `content` value rather than the whole response body.
206210
207211Claude Docs documents are listed separately, by [List code artifacts](https://platform.claude.com/docs/en/api/compliance/apps/code/artifacts/list), with `artifact_type` set to `claude_docs`. A document's `versions` list is empty and its `published_version_id` is `null`. To download a document's current text, call `GET /v1/compliance/apps/code/artifacts/{artifact_id}/content?multi_file_format=zip`. It returns a ZIP archive with one Word (.docx) file for each tab that holds text. Comments, uploaded files, and edit history aren't included. Downloading Claude Docs through the Compliance API is in beta.
from line 236
232236 -H "anthropic-version: 2023-06-01"
233237```
234238
235```text Response wrap
239```json Response
236240{
237241 "data": [
238242 {
from line 293
289293 -H "anthropic-version: 2023-06-01"
290294```
291295
292```text Response wrap
296```json Response
293297{
294298 "id": "claude_chat_01H5CWunD7RpVJ5bHa8RCkja",
295299 "type": "claude_chat_deleted"
from line 306
302306
303307A project cannot be deleted while any chats remain attached to it. The API returns 409 with this body:
304308
305```text
309```json
306310{
307311 "error": {
308312 "type": "invalid_request_error",
No line in this hunk matches that.