---
title: "Create a subscriber"
method: POST
path: "/v4/subscribers"
tags: ["Subscribers"]
---

# Create a subscriber

`POST /v4/subscribers`

Behaves as an upsert. If a subscriber with the provided email address does not exist, it creates one with the specified first name and state. If a subscriber with the provided email address already exists, it updates the first name.<br/><br/>If you include a custom field key that does not exist on your account, the request returns an error. Use [List custom fields](/api-reference/custom-fields/list-custom-fields) to retrieve existing keys, or [Create a custom field](/api-reference/custom-fields/create-a-custom-field) to add new fields before setting them for subscribers.<br/><br/><strong>NOTE:</strong> Updating the subscriber state with this endpoint is not supported at this time.<br/><strong>NOTE:</strong> We support creating/updating a maximum of 140 custom fields at a time.

## Request body

- object
  - `first_name` string, nullable
  - `email_address` string, required
  - `state` 'active' | 'cancelled' | 'bounced' | 'complained' | 'inactive', nullable — Create subscriber in this state (`active`, `bounced`, `cancelled`, `complained` or `inactive`). Defaults to `active`.
  - `fields` object — Custom field values keyed by the custom field's `key` (e.g. `last_name`, not `Last Name`). Unknown keys are ignored and reported in the response `warnings` array.

## Response `200`

Returns a 200 and updates the subscriber first name when a subscriber with provided email already exists

- object
  - `subscriber` object, required
    - `id` integer, required
    - `first_name` string, nullable, required
    - `email_address` string, required
    - `state` 'active' | 'cancelled' | 'bounced' | 'complained' | 'inactive', required
    - `created_at` string, required
    - `fields` object, required

## Other responses

- `201` — Creates a new subscriber
- `202` — Returns a 202 and asynchronously adds custom fields for the new subscriber when more than 10 custom fields are included in the request
- `401` — Returns a 401 if the token and/or account cannot be authenticated
- `422` — Returns a 422 with an error message when one or more of the parameters are invalid

---

[API](https://skmtc.net/kit/apis/kit-api.md) · [All operations](https://skmtc.net/kit/apis/kit-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/kit/kit-api/revisions/0df0c90d12da/schema)
