The legal hold object
⚠️
Preview — this feature is being built; the design below is the spec.
The legal_hold object as the API returns it. Every field below appears in every response that returns this object; fields with no value are null rather than missing.
Example
{
"id": "hold_01JD02A4C6E8G0J2L4N6",
"type": "legal_hold",
"name": "Matter 2026-117",
"user_ids": [
"user_01J9Y0A2C4E6G8J0L2N4"
],
"kinds": [
"chats",
"projects",
"code_sessions",
"files"
],
"starting_at": "2026-06-01T00:00:00Z",
"ending_at": null,
"status": "active",
"created_by": "adminkey_01JC0Z2B4D6F8H0K2M4P",
"created_at": "2026-11-05T10:00:00Z",
"released_at": null,
"preserved": {
"chats": 412,
"projects": 3,
"code_sessions": 58,
"files": 120
}
}Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique id of this object. |
type | string | The object type, always legal_hold. |
name | string | Name shown in the Console and in reports. |
user_ids | array | Nested detail; see the endpoint pages below. |
kinds | array | Record kinds kept under hold. |
starting_at | string | See the endpoint pages below. |
ending_at | string or null | null covers records created up to the moment the hold is released. |
status | string | active or released. While active, matching records are not deleted by retention, by the person, or by the delete calls above. |
created_by | string | Who created it. |
created_at | string | When it was created, RFC 3339 UTC (some older objects use Unix seconds). |
released_at | string or null | See the endpoint pages below. |
preserved | object | Nested detail; see the endpoint pages below. |
Returned by
POST /v1/compliance/legal_holdsGET /v1/compliance/legal_holdsPOST /v1/compliance/legal_holds/{hold_id}/releaseGET /v1/compliance/legal_holds/{hold_id}
Was this page helpful?