---
title: "Create a list with an optional signup form, welcome email, and newsletter site"
method: POST
path: "/lists"
tags: ["Campaigns"]
---

# Create a list with an optional signup form, welcome email, and newsletter site

`POST /lists`

## Request

- Base URL: `https://sendhq.cc/api/v1`
- URL: `https://sendhq.cc/api/v1/lists`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sendhq/apis/sendhq-api/docs/lists/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a list. Set `form_enabled` to publish a hosted double opt-in signup form at `form.url`; `form_from` is the sender (on a verified domain) of the confirmation email, and `redirect_url` is an optional https page to show after confirming. `welcome` ({ enabled, subject, and html, markdown, or a block document in content }) sends one welcome email, from `form_from`, when someone confirms. `site` ({ enabled, slug, title, description, accent }) publishes a public newsletter site at `https://sendhq.cc/n/<slug>` with a signup form, every issue sent with `web.enabled`, and an RSS feed at `/n/<slug>/feed.xml`; it needs the signup form on, and a slug that is reserved or taken returns 409. A workspace may have 100 lists.

## Request body

- object
  - `name` string, required
  - `description` string
  - `form_enabled` boolean
  - `form_from` string: Sender of confirmation and welcome emails, on a verified domain.
  - `redirect_url` string, uri, nullable
  - `welcome` object: Welcome email sent once when someone confirms a signup. Needs `form_from`.
    - `enabled` boolean
    - `subject` string
    - `html` string
    - `markdown` string
    - `content` object, nullable: Block document from the editor ({ type: 'doc', content: [...] }); rendered with the workspace design unless `html` is sent too.
  - `site` object: Public newsletter site at https://sendhq.cc/n/<slug>. Needs the signup form on.
    - `enabled` boolean
    - `slug` string, nullable
    - `title` string, nullable
    - `description` string, nullable
    - `accent` string, nullable

## Response `201`

Successful response

- object
  - `id` string, required
  - `name` string, required
  - `description` string, required
  - `form` object, required
    - `enabled` boolean, required
    - `from` string, required
    - `redirectUrl` string, uri, required
    - `url` string, uri, required
  - `counts` object, required
    - `subscribed` integer, required
    - `pending` integer, required
    - `unsubscribed` integer, required
  - `welcome` object, required
    - `enabled` boolean, required
    - `subject` string, required
    - `html` string, required
    - `content` unknown, required
  - `site` object, required
    - `enabled` boolean, required
    - `slug` string, required
    - `title` string, required
    - `description` string, required
    - `accent` string, required
    - `url` string, uri, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid authentication
- `402`: A paid entitlement is required for this recipient or feature
- `403`: The workspace, domain, policy, or suppression state forbids the operation
- `404`: Tenant-scoped resource not found
- `409`: Resource state or idempotency conflict
- `413`: Attachment count or bytes exceed the accepted limit
- `422`: Request validation or suppression check failed
- `423`: Sending is paused for this sender identity or workspace; the message gives the reason and how to appeal
- `429`: A monthly, daily, or trial usage limit was reached
- `500`: Unexpected server error
- `502`: An upstream provider operation failed
- `503`: A required provider or signing configuration is unavailable
- `default`: An error response using SendHQ's standard JSON envelope

---

[API](https://skmtc.dev/sendhq/apis/sendhq-api.md) - [All operations](https://skmtc.dev/sendhq/apis/sendhq-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sendhq/apis/sendhq-api/revisions/98e39e48cb9a?raw)
