Anthropic 平台文档(英文全量)
The endpoints on this page are available only to Claude Enterprise organizations. They retrieve and delete claude.ai chats, files, and projects; transcripts of sessions in apps such as Cowork and Claude Code are covered on Retrieve session transcripts. See Set up the Compliance API.
Required scope: read:compliance_user_data on the Compliance Access Key. The delete endpoints also require delete:compliance_user_data.
Prerequisite: None for listing chats organization-wide. To filter the chat list to specific users, you need user IDs from List organization users. The other endpoints on this page take resource IDs directly.
The endpoints on this page expose Claude Enterprise chat content, file uploads, projects, and project attachments to compliance reviewers. They support eDiscovery (electronic discovery) exports, data loss prevention (DLP) enforcement, and account-deletion responses. Chat, file, and project content is retained for as long as your organization's retention policy allows. When a user deletes a chat in claude.ai, its message content, attached files, tool-generated files, and artifacts are deleted with it. The Compliance API still lists the chat, with deleted_at populated and an empty name, and returns its messages without their content. Chats that have been hard-deleted (through the Compliance API itself, or after the organization's retention window expires) are not retrievable.
Both scopes are granted only on Compliance Access Keys (sk-ant-api01-...) created in claude.ai; see Set up the Compliance API to provision one. The read:compliance_user_data scope covers retrieval; delete:compliance_user_data is required only for the delete endpoints. The chat, file, project, and attachment endpoints are not available to Admin API keys (sk-ant-admin01-...); calls authenticated with an Admin API key return 403 Forbidden.
Endpoints on this page paginate two ways; see Paginate results for the full reference. Each section notes which scheme applies.
Retrieve chats and messages
Use List chats to page through chat metadata, then Get chat messages to fetch the full message content of one chat.
The chat list endpoint defaults to organization-wide scope: leave off user_ids[] to include every chat under your parent organization. Add order_by=updated_at to sort by last update time. This combination is the recommended way to export chats and keep an export current, because one paginated loop picks up new chats, modified chats, and chats deleted in claude.ai for every user without enumerating users first. The following request lists chats updated since a given date.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/apps/chats" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--header "anthropic-version: 2023-06-01" \
--data-urlencode "order_by=updated_at" \
--data-urlencode "updated_at.gte=2025-06-01T00:00:00Z" \
--data-urlencode "limit=100"{
"data": [
{
"id": "claude_chat_01H5CWunD7RpVJ5bHa8RCkja",
"name": "Product Requirements Discussion",
"created_at": "2026-04-10T08:09:10Z",
"updated_at": "2026-04-10T09:10:11Z",
"deleted_at": null,
"href": "https://claude.ai/chat/abcdef01-2345-6789-abcd-ef0123456789",
"model": "claude-opus-5",
"organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
"project_id": "claude_proj_01KGp4eZNug9ri4kE35RSppq",
"user": {
"id": "user_01XyDMpzjS89pFZXqSFUBDr6",
"email_address": "user@example.com"
}
}
],
"has_more": true,
"first_id": "eyJrIjogInVwZGF0ZWRfYXQiLCAidCI6ICIyMDI2LTA0LTEwVDA5OjEwOjExKzAwOjAwIiwgImlkIjogImFiY2RlZjAxLS4uLiJ9",
"last_id": "eyJrIjogInVwZGF0ZWRfYXQiLCAidCI6ICIyMDI2LTA0LTEwVDA5OjEwOjExKzAwOjAwIiwgImlkIjogImFiY2RlZjAxLS4uLiJ9"
}Results sort ascending by the order_by field, oldest first, with ties broken by id. Pagination uses the standard first_id/last_id/has_more cursor fields described in Paginate results. To walk forward toward newer chats, pass the response's last_id back as after_id on the next request.
That forward walk is also how you keep an export current across runs: persist the final page's last_id and resume from it as after_id on the next run. Because the list is ordered by updated_at, a chat that changes after your saved cursor reappears ahead of it, so each incremental run returns both brand-new chats and older chats that have since been modified or deleted in claude.ai. Process results idempotently, keyed by chat id, to handle those reappearances. A chat that comes back with deleted_at populated has no content left to fetch, so treat it as deleted rather than updated.
A 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 for the full filter reference.
To 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. 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 org-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.
curl --fail-with-body -sS -G \
"https://api.anthropic.com/v1/compliance/apps/chats" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--header "anthropic-version: 2023-06-01" \
--data-urlencode "user_ids[]=user_01XyDMpzjS89pFZXqSFUBDr6" \
--data-urlencode "created_at.gte=2025-06-01T00:00:00Z" \
--data-urlencode "limit=100"The list response carries chat metadata only. To pull the actual chat content, attached files, and inline artifacts (structured documents Claude generates inside a chat), follow up with the messages endpoint for each chat ID:
chat_id="claude_chat_01H5CWunD7RpVJ5bHa8RCkja"
curl --fail-with-body -sS \
"https://api.anthropic.com/v1/compliance/apps/chats/$chat_id/messages" \
--header "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
--header "anthropic-version: 2023-06-01"The 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 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):
{
"id": "claude_chat_01H5CWunD7RpVJ5bHa8RCkja",
"name": "Product Requirements Discussion",
"created_at": "2026-04-10T08:09:10Z",
"updated_at": "2026-04-10T09:10:11Z",
"deleted_at": null,
"href": "https://claude.ai/chat/abcdef01-2345-6789-abcd-ef0123456789",
"model": "claude-opus-5",
"organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
"project_id": "claude_proj_01KGp4eZNug9ri4kE35RSppq",
"user": {
"id": "user_01XyDMpzjS89pFZXqSFUBDr6",
"email_address": "user@example.com"
},
"chat_messages": [
{
"id": "claude_chat_msg_01VnBPkLmtj7YdW5QrXKEA8c",
"role": "user",
"created_at": "2026-04-10T08:09:10Z",
"content": [
{
"type": "text",
"text": "Can you help me draft requirements for our new dashboard feature?"
}
],
"files": [
{
"id": "claude_file_01UaT9wBcDfGhJkLmNpQrSv7",
"filename": "dashboard_mockup_v1.pdf",
"mime_type": "application/pdf",
"size_bytes": 482133,
"md5": "56367e4d2705cc9c025ad07424e944f0",
"created_at": "2026-04-10T08:09:10Z"
}
]
},
{
"id": "claude_chat_msg_01M8tFcHwbQ2kY6NpEjRZv4D",
"role": "assistant",
"created_at": "2026-04-10T08:09:11Z",
"content": [
{
"type": "text",
"text": "I'd be happy to help you draft requirements for your dashboard feature..."
}
],
"generated_files": [
{
"id": "claude_gen_file_01TbR8wAcCeFhJkLnPqStUvX",
"filename": "requirements_summary.csv",
"mime_type": "text/csv",
"size_bytes": 2048,
"md5": "89968669461d95416549937168269d6b"
}
],
"artifacts": [
{
"id": "claude_artifact_01HqRsTuVwXyZa2BcDeFgH4J",
"version_id": "claude_artifact_version_01KmNpQrSt3UvWxYz5AbCdEfG",
"title": "Dashboard Requirements Draft",
"artifact_type": "text/markdown"
}
]
}
],
"has_more": false,
"first_id": "eyJtc2dfdXVpZCI6ICIwZjcwYjA2Ni0uLi4ifQ==",
"last_id": "eyJtc2dfdXVpZCI6ICJhNGUwYjE3Mi0uLi4ifQ=="
}files, generated_files, and artifacts can each be null on a given message. files are the files and text attachments (for example, PDFs, images, spreadsheets, documents, and pasted text) the user attached to the message, as claude.ai stored them. generated_files are binary files the assistant created during the conversation through tool use (for example, PDFs, spreadsheets, or slide decks). artifacts are versioned documents (for example, code or markdown) the assistant generated or updated in its response; an artifact can be revised across multiple assistant turns in the same chat, and each revision appears as a new version_id under the same artifact id. Pass each entry's id (or version_id for artifacts) to the matching content endpoint in Retrieve files and artifacts to download it.
Retrieve files and artifacts
Files and artifacts are downloaded by ID, not listed independently. The IDs come from the chat messages endpoint in Retrieve chats and messages (the files, generated_files, and artifacts arrays on each message) or, for project-level uploads, from the project attachments endpoint.
Pick the endpoint that matches your ID type and the data you need. The same file content endpoint serves both chat files and project files.
| You have | You want | Use this endpoint |
|---|---|---|
claude_file_* ID | The file's content | Download file content |
claude_file_* ID | The file's metadata only | Get file metadata |
claude_gen_file_* ID | A tool-generated file's binary content | Download a Claude-generated file |
claude_gen_file_* ID | A tool-generated file's metadata only | Get generated-file metadata |
claude_artifact_version_* ID | One artifact version's text | Download artifact content |
claude_artifact_version_* ID | The artifact version's metadata only | Get artifact metadata |
claude_proj_doc_* ID | A project document's plain-text content | Get project document content |
claude_proj_doc_* ID | A project document's metadata only | Get project document metadata |
The file content endpoint streams the content that claude.ai stored for the file as a chunked binary response. That content is not always identical to the file the user uploaded. Images can be served as a processed copy rather than the uploaded bytes. Some documents attached to chats (for example, Word files, PowerPoint files, and some PDFs) are stored as the text claude.ai extracted from them. For these documents, the endpoint returns the extracted text under the original file name, and the original document is not available through the Compliance API. The size_bytes and md5 fields describe the stored content rather than the uploaded file. The file name and mime_type can still name the uploaded document's format. Identify a file's format from the returned bytes, not from its name or declared type.
The response carries these headers: