# Update List

PUT /api/v2/projects/{projectId}/crm/contact-lists/{contactListId}

Updates a contact list's name, description, type, or filter. Only the fields present in `changes` are written. Editing the filter on a dynamic list changes who is in it immediately, since membership is evaluated on read.

## Request

- projectId: string, path, required — ID of the project that owns the list.
- contactListId: string, path, required — ID of the contact list to update.
- changes: object, required — Fields to change. Anything omitted is left as-is.
  - contactsFilterGroups: object[]
    - filters: object[], required — Attribute filters combined with groupType.
    - groupType: AND | OR | NOT, required — How filters in this group are combined.
    - oneDayEventFilters: object[] — Event filters evaluated over the last 24 hours only.
    - requireSubscribed: boolean — When true, the group is ANDed with `$subscribed == true`. Set by email sending, not the filter UI.
  - description: string
  - name: string
  - type: static | dynamic

## Response

- 200: Successful response
  - contactsFilterGroups: object[], required
    - filters: object[], required — Attribute filters combined with groupType.
    - groupType: AND | OR | NOT, required — How filters in this group are combined.
    - oneDayEventFilters: object[] — Event filters evaluated over the last 24 hours only.
    - requireSubscribed: boolean — When true, the group is ANDed with `$subscribed == true`. Set by email sending, not the filter UI.
  - createdAt: string, required
  - id: string, required
  - name: string, required
  - projectId: string, required
  - type: static | dynamic, required, default static
  - updatedAt: string, required
  - description: string
- 400: Invalid input data
- 401: Authorization not provided
- 403: Insufficient access
- 404: Not found
- 500: Internal server error
