# Update Place List

Update a place list by ID.
List-level fields (`name`, `description`) are partially updated. If
`places[]` is present, it is treated as the desired full set: omitted
places are deleted, matching places are updated in place, and new places
are inserted. An empty `places[]` clears the list.
`sensitive_location_attestation` may be omitted for metadata-only
updates and for no-op `places[]` resubmissions. If the submitted
`places[]` content changes geographic Place content by adding a place,
removing a place, or changing an existing place's `latitude`,
`longitude`, or `radius_meters`, the API requires
`sensitive_location_attestation: true`; otherwise, the request is
rejected. Matched-place `name` and `external_id` edits are metadata
edits that persist without requiring or recording attestation. `version`
is optional and enables optimistic locking when present.
When changing Place List locations through the API, accepting
`sensitive_location_attestation: true` confirms the following
attestation on behalf of the API user for this request:

```text
I represent and warrant that these locations are not being used to
target or identify individuals at sensitive locations, and that I have
the rights and consents necessary for this targeting, including consent
to share with third parties where required.
```
For guidance on what qualifies as a sensitive location, see
[Places attestation guidelines](https://support.infillion.com/s/article/Places).
Geographic-content-changing requests submitted without
`sensitive_location_attestation`, or with it set to any value other than
`true`, are rejected with a `400` `invalid-request` error on
`/sensitive_location_attestation`. Metadata-only matched-place edits
and no-op resubmissions of unchanged Place content do not require or
record a new attestation. This is a per-request acknowledgment for
actual geographic content changes, not a one-time account-level setting.
The attestation language may be updated over time.

Endpoint: POST /place_lists/{place_list_id}
Version: 3.0.1807
Security: Auth0

## Security:

  - `Auth0` (unknown)
    oauth2 scopes: offline_access, manage:services

## Path parameters:

  - `place_list_id` (integer, required)
    Numeric ID of the place list to update

## Request fields (application/json):

  - `version` (integer)
    Optional optimistic-lock version. When present, it must match the current Place List version.
    Example: 2

  - `name` (string)
    Example: Starbucks Stores - New York

  - `description` (string)
    Example: NYC flagship + competitor zones

  - `sensitive_location_attestation` (boolean)
    Optional for metadata-only updates and no-op content resubmissions. If submitted `places` content changes geographic Place content by adding a place, removing a place, or changing an existing place's `latitude`, `longitude`, or `radius_meters`, this field must be `true`. Matched-place `name` and `external_id` edits do not require or record attestation.

  - `places` (array)
    Desired full set of circle places. When present, omitted existing places
are deleted, matching places are updated in place to preserve stable
child place IDs, and new places are inserted. An empty array clears all
places from the list. Within one place list, nonblank external_id values
must be unique and circle geometry (latitude, longitude, radius_meters)
must be unique after coordinate truncation to four decimal places.

  - `places.name` (string)
    Example: Times Square

  - `places.external_id` (string)
    Example: STORE-001

  - `places.latitude` (number, required)
    JSON number using standard JSON syntax; do not include leading zeroes (use `40.7589`, not `040.7589`).
    Example: 40.7589

  - `places.longitude` (number, required)
    JSON number using standard JSON syntax; do not include leading zeroes (use `-73.9851`, not `-073.9851`).
    Example: -73.9851

  - `places.radius_meters` (integer, required)
    Example: 1000

## Response 200:

  - `200` (unknown)
    Place list response

## Response 200 fields (application/json):

  - `data` (object)

  - `data.id` (integer)
    Example: 126

  - `data.entity_type` (string)
    Example: place_list

  - `data.version` (integer)
    Example: 2

  - `data.organization_id` (integer)
    Example: 100048

  - `data.name` (string)
    Example: Starbucks Stores - New York

  - `data.description` (string)
    Example: NYC flagship + competitor zones

  - `data.filename` (string)
    Example: starbucks_new_york.csv

  - `data.content_updated_on` (string)

  - `data.places_count` (integer)
    Example: 42

  - `data.strategy_count` (integer)
    Number of strategies currently assigned to this Place List through PLCS geofence targeting.

  - `data.created_on` (string)

  - `data.updated_on` (string)

  - `data.places` (array)
    Nested places — returned on create/update and single GET responses

  - `data.places.id` (integer)
    Example: 5001

  - `data.places.name` (string)
    Example: Times Square

  - `data.places.external_id` (string)
    Example: STORE-001

  - `data.places.geometry_type` (string)
    Returned by the API and must not be supplied by users
    Enum: "circle"

  - `data.places.latitude` (number)
    Example: 40.7589

  - `data.places.longitude` (number)
    Example: -73.9851

  - `data.places.radius_meters` (integer)
    Example: 1000

  - `meta` (object)

  - `meta.status` (string, required)
    Example: success

## Response 400:

  - `400` (unknown)
    Error response

## Response 400 fields (application/json):

  - `errors` (array, required)

  - `errors.code` (string)

  - `errors.sub_code` (string)
    Optional identifier that refines the generic `code` category (e.g. `html5-noscript-tag`). Present on HTML5 upload/preview validation errors; absent otherwise.

  - `errors.field` (string)
    Optional when it is a schema error

  - `errors.message` (string)

  - `meta` (object, required)

  - `meta.status` (string, required)

## Response 401:

  - `401` (unknown)
    Error response

## Response 401 fields (application/json):

  - `errors` (array, required)

  - `errors.code` (string)

  - `errors.sub_code` (string)
    Optional identifier that refines the generic `code` category (e.g. `html5-noscript-tag`). Present on HTML5 upload/preview validation errors; absent otherwise.

  - `errors.field` (string)
    Optional when it is a schema error

  - `errors.message` (string)

  - `meta` (object, required)

  - `meta.status` (string, required)

## Response 403:

  - `403` (unknown)
    Error response

## Response 403 fields (application/json):

  - `errors` (array, required)

  - `errors.code` (string)

  - `errors.sub_code` (string)
    Optional identifier that refines the generic `code` category (e.g. `html5-noscript-tag`). Present on HTML5 upload/preview validation errors; absent otherwise.

  - `errors.field` (string)
    Optional when it is a schema error

  - `errors.message` (string)

  - `meta` (object, required)

  - `meta.status` (string, required)

## Response 404:

  - `404` (unknown)
    Error response

## Response 404 fields (application/json):

  - `errors` (array, required)

  - `errors.code` (string)

  - `errors.sub_code` (string)
    Optional identifier that refines the generic `code` category (e.g. `html5-noscript-tag`). Present on HTML5 upload/preview validation errors; absent otherwise.

  - `errors.field` (string)
    Optional when it is a schema error

  - `errors.message` (string)

  - `meta` (object, required)

  - `meta.status` (string, required)

## Response 409:

  - `409` (unknown)
    Error response

## Response 409 fields (application/json):

  - `errors` (array, required)

  - `errors.code` (string)

  - `errors.sub_code` (string)
    Optional identifier that refines the generic `code` category (e.g. `html5-noscript-tag`). Present on HTML5 upload/preview validation errors; absent otherwise.

  - `errors.field` (string)
    Optional when it is a schema error

  - `errors.message` (string)

  - `meta` (object, required)

  - `meta.status` (string, required)

