---
title: "Create a list"
method: POST
path: "/lists"
tags: ["Lists"]
---

# Create a list

`POST /lists`

Upload a list of creator handles + emails. Two paths: JSON body OR multipart CSV (file field name `file`, columns `creator_name` required + `email` optional). Returned `list_id` is what callers pass to automations as `lists_selected`.

## Headers

- `Idempotency-Key` string, nullable
- `X-Dry-Run` string, nullable

## Request body

- object — JSON-body create. The multipart CSV path is at the route layer (`POST /public/v1/lists` with `multipart/form-data` and a `file` field).
  - `name` string, required — Human-readable list name shown in the portal.
  - `description` string, nullable
  - `creator_handles` string[] — TikTok handles, with or without leading '@'. Deduplicated case-insensitively at insert time.
  - `creator_emails` string[] — Email addresses. Deduplicated case-insensitively at insert time.

## Response `201`

Successful Response

- ListResponse
  - `data` ListResource, required — A Lists row (vault_files). Used across all 4 automation types.
    - `list_id` string, required — vault_files.resource_id
    - `name` string, required
    - `description` string, nullable
    - `creator_count` integer, required
    - `email_count` integer, required
    - `state` string, required — active | archived
    - `created_at` string, nullable
    - `updated_at` string, nullable

## Other responses

- `400` — Bad Request
- `403` — Forbidden
- `404` — Not Found
- `409` — Conflict
- `422` — Validation Error
- `429` — Too Many Requests

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) · [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/reacherapp/reacher-data-api/revisions/5eefff009b5b/schema)
