# Upload New Place List

Create a place list from a CSV file.
The CSV upload is atomic: if any row is invalid, the API returns `400`
with validation errors and no place list or places are created. The CSV
header must be exactly `name,latitude,longitude,radius_meters,external_id`.
`sensitive_location_attestation` is required and must be `"true"`.
Before uploading Place List locations through the API, API users must
accept the sensitive-location attestation. Accepting this field 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).
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`. This is a
per-request acknowledgment, not a one-time account-level setting.
The attestation language may be updated over time.

Endpoint: POST /place_lists/upload
Version: 3.0.1807
Security: Auth0

## Security:

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

## Request fields (multipart/form-data):

  - `file` (string, required)
    CSV file with header `name,latitude,longitude,radius_meters,external_id`.

  - `organization_id` (string, required)
    The ID of the owning organization. It is a string because this is a form upload.

  - `name` (string, required)
    The name of the place list being uploaded.
    Example: Starbucks Stores - New York

  - `description` (string)
    Optional place list description.

  - `sensitive_location_attestation` (string, required)
    Required and must be `"true"` for Place List content writes.
    Enum: "true"

## Response 201:

  - `201` (unknown)
    Place list response

## Response 201 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)

