---
title: "Create legal hold"
method: POST
path: "/v1/legal-holds"
---

# Create legal hold

`POST /v1/legal-holds`

## Request

- Base URL: `https://public-api.granola.ai`
- URL: `https://public-api.granola.ai/v1/legal-holds`
- Auth: HTTP bearer

Places a named legal hold on custodians in your workspace. Granola preserves a custodian's notes, transcripts and attachments while any hold covering them is active. Custodians see no change in the product.

## Request body

- CreateLegalHoldBody
  - `name` string, required: A name for the matter this hold preserves
  - `description` string, nullable: Free text describing the matter
  - `covers_entire_workspace` boolean, required: Whether the hold covers every member of your workspace, current and future. Required: scope is never something a caller falls into.
  - `custodians` LegalHoldCustodianInput[]: Users to name individually when the hold is created
    - `email` string, email: The custodian's email address. Use this when your system knows employees by email rather than by Granola user id.
    - `id` string: The custodian's Granola user id. Case-insensitive.

## Response `201`

The legal hold that was created

- LegalHold
  - `id` string, required: The unique identifier for the legal hold
  - `object` 'legal_hold', required: The type of object
  - `name` string, required: The name of the hold, as your admins see it
  - `description` string, nullable, required: Free text describing the matter, or null
  - `covers_entire_workspace` boolean, required: True when the hold covers every member of your workspace, current and future. Additive with `custodian_count` — a hold may do both.
  - `custodian_count` integer, required: How many users this hold names individually. Workspace-wide coverage is `covers_entire_workspace`, not a custodian.
  - `created_at` string, date-time, required: When the hold was placed
  - `released_at` string, date-time, nullable, required: When the hold was released, or null while it is active. A released hold is never deleted.

## Other responses

- `400`: Bad request, or a custodian is not a member of this workspace
- `401`: Unauthorized - Invalid API key
- `409`: A live legal hold with this name already exists in your workspace

## Changes

- **2026-10-19** `480617fbc624`: 1 warning
  - changed the pattern of the request property `custodians/items/id` from `^usr_[a-zA-Z0-9]{14}$` to `^[Uu][Ss][Rr]_[a-zA-Z0-9]{14}$`
- **2026-09-26** `58997a2621d6`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/granola/apis/granola-api/changes/v1/legal-holds/post.md)

---

[API](https://skmtc.dev/granola/apis/granola-api.md) - [All operations](https://skmtc.dev/granola/apis/granola-api/llms.txt) - [OpenAPI document](https://skmtc.dev/granola/apis/granola-api/revisions/24329b15cdfe?raw)
