---
title: "Invite campaign participant"
method: POST
path: "/v1/creator-campaigns/{campaignId}/participants"
tags: ["Creator Campaigns"]
---

# Invite campaign participant

`POST /v1/creator-campaigns/{campaignId}/participants`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/creator-campaigns/{campaignId}/participants`
- Auth: HTTP bearer

Invites one creator and returns their personal invite URL.

Send the URL to the creator. On that page they connect their accounts (read-only), submit posts and see their earnings.

### Invite rules

- The URL is returned only here; inviting again creates no second link.
- A creator is matched by email within your workspace, so the same person keeps one identity across your campaigns.

### Errors

- 409: the creator is already in the campaign, or the campaign is closed.
- 403 `feature_not_available`: `caps.maxParticipants` is reached.

## Path parameters

- `campaignId` string, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `displayName` string, required
  - `email` string, email

## Response `201`

Participant invited

- object
  - `participant` CampaignParticipant, required
    - `id` string, required
    - `campaignId` string, required
    - `creator` object, required
      - `id` string, required
      - `displayName` string, required
      - `email` string, nullable, required
    - `status` 'invited' | 'active' | 'suspended' | 'removed', required
    - `joinedAt` string, date-time, nullable, required
    - `accounts` object[], required: Social accounts the creator connected, verified once Zernio confirmed the creator owns them.
      - `accountId` string, required
      - `verifiedAt` string, date-time, nullable, required
      - `platform` string, nullable, required: Null when the account is no longer active on the creator profile.
      - `username` string, nullable, required: The handle on the platform; null when the account is no longer active.
    - `balances` CampaignParticipantBalances, required: USD cents in each state. accruing: earned on posts not yet approved. owed: approved and on hold. payable: past the hold, ready to pay. settling: a treasury payout in progress, no longer payable and not reversible by a reject. settled: paid out.
      - `accruing` integer, required
      - `owed` integer, required
      - `payable` integer, required
      - `settling` integer, required
      - `settled` integer, required
    - `flags` object[], required
      - `code` 'linked_accounts' | 'cross_operator', required
      - `detail` string, required
      - `raisedAt` string, date-time, required
    - `submissionCounts` CampaignSubmissionCounts, required: Number of submissions in each status.
      - `received` integer, required
      - `tracking` integer, required
      - `pending_review` integer, required
      - `approved` integer, required
      - `rejected` integer, required
      - `expired` integer, required
      - `withdrawn` integer, required
    - `payout` object, required: How far the creator got with Stripe payout setup. Only `ready` creators can be paid through the Zernio treasury.
      - `status` 'not_started' | 'onboarding' | 'ready' | 'restricted', required: `not_started`: no payout account yet. `onboarding`: setup started or under review. `ready`: payouts enabled. `restricted`: Stripe needs more information before paying out.
  - `inviteUrl` string, uri, required: The creator's personal join link. Treat it as a secret.

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `403`: Refused. Code `feature_not_available`: creator campaigns run on usage-based billing and the workspace that owns the campaign is not on it yet ("Creator campaigns require usage-based billing..."; contact support to switch), or the campaign reached `caps.maxParticipants` (invites and joins only). Code `insufficient_permissions`: a restricted API key without the `creator_campaigns` resource group.
- `404`: The campaign, participant or submission does not exist, belongs to another team, or sits in a profile this key cannot reach (code `resource_not_found`).
- `409`: The campaign, participant or submission is not in a state that allows this action (code `invalid_resource_state`); the message names the current state. Also returned while the same `Idempotency-Key` is still processing.
- `422`: Idempotency-Key reused with a different request

## Changes

- **2026-10-28** `8f2c44dd7550`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/creator-campaigns/:campaignId/participants/post.md)

---

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