---
title: "Add Campaign Member"
method: POST
path: "/v2/campaigns/{campaignId}/members"
---

# Add Campaign Member

`POST /v2/campaigns/{campaignId}/members`

## Request

- Base URL: `https://pub-api.conversion.ai/api`
- URL: `https://pub-api.conversion.ai/api/v2/campaigns/{campaignId}/members`
- Auth: one of:
  - API key in header `X-API-Key`
  - API key in query parameter `api_key`

Add one member to a custom campaign by email. Same rules as `POST /v2/campaigns/{campaignId}/members/batch`: the contact is created if it does not exist, adding is an idempotent upsert, and status progression is forward-only for existing members.

## Path parameters

- `campaignId` string, uuid, required

## Request body

- object
  - `email` string, email, required: The member's email address, normalized (trimmed and lowercased) before matching. An invalid email returns `400 invalid_email` and creates no contact.
  - `statusId` string, uuid: The campaign status id to place the member in, as returned by `GET /v2/campaigns/{campaignId}`. Takes precedence over `status`. An id that is not a status of the campaign's type returns `400 invalid_campaign_status`.
  - `status` string: The campaign status name, case-insensitive. Used only when `statusId` is not set. Omit both to use the campaign type's first status.

## Response `200`

Member added or updated.

- object
  - `data` object
    - `campaignMemberId` string, uuid, required: The campaign member id.
    - `contactId` string, uuid, required: The id of the member's contact, created if it did not exist.

## Other responses

- `400`: The request was malformed or contained invalid data.
- `401`: Authentication failed.
- `404`: The requested resource was not found.
- `500`: An unexpected server error occurred.

---

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