> ## Documentation Index
> Fetch the complete documentation index at: https://docs.granola.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create legal hold

> 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.



## OpenAPI

````yaml post /v1/legal-holds
openapi: 3.1.0
info:
  title: Granola API
  version: 1.0.0
  description: API for accessing meeting data from Granola
servers:
  - url: https://public-api.granola.ai
    description: Production
security: []
paths:
  /v1/legal-holds:
    post:
      summary: Create legal hold
      description: >-
        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.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLegalHoldBody'
      responses:
        '201':
          description: The legal hold that was created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LegalHold'
        '400':
          description: Bad request, or a custodian is not a member of this workspace
        '401':
          description: Unauthorized - Invalid API key
        '409':
          description: A live legal hold with this name already exists in your workspace
      security:
        - ApiKeyAuth: []
components:
  schemas:
    CreateLegalHoldBody:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 200
          description: A name for the matter this hold preserves
          example: X v. Y
        description:
          type:
            - string
            - 'null'
          maxLength: 2000
          description: Free text describing the matter
          example: Preservation notice 2026-08-12
        covers_entire_workspace:
          type: boolean
          description: >-
            Whether the hold covers every member of your workspace, current and
            future. Required: scope is never something a caller falls into.
          example: false
        custodians:
          type: array
          items:
            $ref: '#/components/schemas/LegalHoldCustodianInput'
          maxItems: 100
          description: Users to name individually when the hold is created
      required:
        - name
        - covers_entire_workspace
    LegalHold:
      type: object
      properties:
        id:
          type: string
          pattern: ^lgh_[a-zA-Z0-9]{14}$
          description: The unique identifier for the legal hold
          example: lgh_Abc123XyZ456De
        object:
          type: string
          enum:
            - legal_hold
          description: The type of object
          example: legal_hold
        name:
          type: string
          description: The name of the hold, as your admins see it
          example: X v. Y
        description:
          type:
            - string
            - 'null'
          description: Free text describing the matter, or null
          example: Preservation notice 2026-08-12
        covers_entire_workspace:
          type: boolean
          description: >-
            True when the hold covers every member of your workspace, current
            and future. Additive with `custodian_count` — a hold may do both.
          example: false
        custodian_count:
          type: integer
          description: >-
            How many users this hold names individually. Workspace-wide coverage
            is `covers_entire_workspace`, not a custodian.
          example: 3
        created_at:
          type: string
          format: date-time
          description: When the hold was placed
          example: '2026-09-21T10:00:00Z'
        released_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            When the hold was released, or null while it is active. A released
            hold is never deleted.
          example: null
      required:
        - id
        - object
        - name
        - description
        - covers_entire_workspace
        - custodian_count
        - created_at
        - released_at
    LegalHoldCustodianInput:
      type: object
      properties:
        email:
          type: string
          format: email
          description: >-
            The custodian's email address. Use this when your system knows
            employees by email rather than by Granola user id.
          example: person@example.com
        id:
          type: string
          pattern: ^usr_[a-zA-Z0-9]{14}$
          description: The custodian's Granola user id
          example: usr_9Kd2mPq7Rt4Xyz
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: apiKey

````