---
title: "Update an Ideal Customer Profile"
method: PATCH
path: "/v1/icps/{id}"
tags: ["Ideal Customer Profiles", "v1"]
---

# Update an Ideal Customer Profile

`PATCH /v1/icps/{id}`

Update an existing Ideal Customer Profile (ICP). All attributes are optional; only the attributes you send are changed. Sending `filters` replaces every category, not just the one you name.

:::info
Requires the `icps:write` OAuth2 scope.
:::

## Path parameters

- `id` string, required

## Query parameters

- `account_id` string, required

## Request body

- IcpRequestV1
  - `data` object, required
    - `type` 'icp', required — The type of the object
    - `attributes` object, required
      - `name` string — The human-readable name of the ICP
      - `filters` object — Company-level filter criteria that define the ICP, grouped by category. At least one category must be present and non-empty. Omit a category rather than sending it empty.
        - `employee_count` object[] — Employee count range filters.
          - `search_value` '1-2' | '3-10' | '11-50' | '51-200' | '201-500' | '501-1000' | '1001-5000' | '5001-10000' | '10001', required — An employee count bucket. "10001" means "10000+".
          - `display_value` string — Human-readable label for the value. Defaults to `search_value` when omitted.
          - `negated` boolean — When true, the filter excludes rather than includes companies in this bucket.
        - `industries` object[] — Industry filters.
          - `search_value` string, required — An industry code, e.g. "1594.6.4" for Software Development. This is the same code a company's `industries.industry[].code` returns, and one of those listed at https://docs.leadfeeder.com/api/public/list-of-industries-370501m0.
          - `display_value` string — Human-readable label for the industry. Defaults to `search_value` when omitted.
          - `negated` boolean — When true, the filter excludes rather than includes companies in this industry.
        - `location` object[] — Location filters.
          - `search_value` string, required — The place to match, in the form the entry's `type` expects.
          - `type` 'country_code' | 'continent' | 'world_region' — What kind of place `search_value` names. `country_code` takes an ISO 3166-1 alpha-2 code (e.g. "US"). `continent` takes one of `asia`, `north_america`, `africa`, `europe`, `south_america`, `antarctica`, `australia`. `world_region` takes one of `africa`, `latam`, `emea`, `amer`, `dach`, `apac`.
          - `display_value` string — Human-readable label for the place. Defaults to `search_value` when omitted.
          - `negated` boolean — When true, the filter excludes rather than includes companies in this place.

## Response `200`

Success

- object
  - `data` ICPV1, required
    - `type` string, required — The type of the object
    - `id` string, required — The unique identifier for the ICP
    - `attributes` object, required
      - `name` string, required — The human-readable name of the ICP
      - `created_at` string, date-time, required — Date and time when the ICP was created
      - `filters` object, required — Filter criteria that define this ICP, grouped by filter category. Categories with no configured criteria are omitted. The object is empty when the ICP has no filters configured.
        - `employee_count` object[] — Employee count range filters.
          - `search_value` string — The internal value used to match this filter (e.g. industry code, country code, employee range identifier).
          - `display_value` string, required — The human-readable label of the filter value.
          - `negated` boolean, required — When true, the filter excludes (rather than includes) matching results.
        - `industries` object[] — Industry filters.
          - `search_value` string — The internal value used to match this filter (e.g. industry code, country code, employee range identifier).
          - `display_value` string, required — The human-readable label of the filter value.
          - `negated` boolean, required — When true, the filter excludes (rather than includes) matching results.
        - `location` object[] — Location filters.
          - `search_value` string — The place this filter matches, in the form its `type` expects.
          - `type` 'country_code' | 'continent' | 'world_region' | 'region' — What kind of place `search_value` names. `country_code` is an ISO 3166-1 alpha-2 code, `continent` one of `asia`, `north_america`, `africa`, `europe`, `south_america`, `antarctica`, `australia`, and `world_region` one of `africa`, `latam`, `emea`, `amer`, `dach`, `apac`. `region` is legacy and read-only: it is rejected on create and update. May be absent on records created before the type was recorded; treat an absent value as `country_code`. Send it back unchanged when updating, or the filter is read as a country code and rejected.
          - `display_value` string, required — The human-readable label of the filter value.
          - `negated` boolean, required — When true, the filter excludes (rather than includes) matching results.
  - `meta` object, required
    - `request_id` string, required — A unique identifier assigned to each API request for end-to-end traceability.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized. The request was rejected because the credentials are missing, invalid, expired, or have been revoked. The client must re-authenticate before retrying. Clients can differentiate via the `code` value of the first item in `errors`.
- `403` — Forbidden. The credentials are valid but the caller is not authorized to perform the request — typically because the user lacks the required permission, the OAuth scope is insufficient, the subscription plan does not include the required entitlement, the `account_id` does not belong to the authenticated user, or the target list is read-only and its members cannot be modified. Clients can differentiate via the `code` value of the first item in `errors`.
- `404` — Not found
- `422` — Unprocessable entity
- `429` — Too many requests. Either the per-second rate limit or the monthly quota configured for the API key / OAuth application has been exceeded. Clients can differentiate via the `code` value of the first item in `errors`.
- `500` — Internal server error
- `504` — Server timeout

---

[API](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api.md) · [All operations](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/leadfeeder/leadfeeder-public-api/revisions/3b95d5a53148/schema)
