# Create creator campaign

Creates a creator campaign.

```http
POST https://api.pozy.ai/v1/creator-campaigns
```

- Area: Creators / Creator Campaigns
- Auth: Authorization: Bearer pz_live_...

## Header parameters

- `Idempotency-Key` (string)

## Request body

Content type: `application/json`

- `profileId`, string, required
- `name`, string, required: 1 to 200 characters
- `brandName`, string, required: 1 to 200 characters
- `economics`, object, required
  - one of: Creator Campaign Economics Cpm
    - `type`, string, required: One of `cpm`
    - `ratePer1kCents`, integer, required: At least 1
    - `minViewsToEarn`, integer, required: At least 0
    - `maxPayoutPerClipCents`, integer: At least 1
    - `budgetCents`, integer, required: At least 0
  - one of: Creator Campaign Economics Per Post
    - `type`, string, required: One of `per_post`
    - `perApprovedPostCents`, integer, required: At least 1
    - `maxPostsPerParticipant`, integer: At least 1
    - `budgetCents`, integer, required: At least 0
  - one of: Creator Campaign Economics Pool
    - `type`, string, required: One of `pool`
    - `budgetCents`, integer, required: At least 0
    - `minViewsToQualify`, integer, required: At least 0
- `caps`, object
  - `maxParticipants`, integer: At least 1
  - `maxSubmissionsPerParticipantPerDay`, integer: At least 1
  - `maxAccountsPerParticipant`, integer: At least 1
  - `maxXReadSpendCents`, integer: At least 1
  - `authenticityThreshold`, number, required: 0 to 100
- `platforms`, array of string: Each item: one of `tiktok`, `instagram`, `youtube`, `threads`, `pinterest`, `facebook`, `twitter`
- `contentRules`, string: Up to 10000 characters. Can be null
- `startsAt`, string (date-time): Can be null
- `endsAt`, string (date-time): Can be null
- `trackingDays`, integer: Default `30`. 1 to 365
- `holdDays`, integer: Default `10`. 0 to 90
- `maxPostAgeMinutes`, integer: At least 1. Can be null
- `settlement`, string: One of `none`, `external`, `treasury`. Default `none`
- `branding`, object
  - one of: Creator Campaign Branding
    - `brandName`, string
    - `primaryColor`, string
    - `logoUrl`, string
    - `theme`, object

## Example request

```bash
curl -X POST "https://api.pozy.ai/v1/creator-campaigns" \
  -H "Authorization: Bearer $POZY_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "profileId": "6a0b6573846efc28aaa9a3ff",
  "name": "Acme",
  "brandName": "Acme",
  "economics": {
    "type": "cpm",
    "ratePer1kCents": 1,
    "minViewsToEarn": 1,
    "budgetCents": 1
  }
}'
```

```ts
import { randomUUID } from "node:crypto";

const res = await fetch("https://api.pozy.ai/v1/creator-campaigns", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.POZY_API_KEY}`,
    "Idempotency-Key": randomUUID(),
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    profileId: "6a0b6573846efc28aaa9a3ff",
    name: "Acme",
    brandName: "Acme",
    economics: {
      type: "cpm",
      ratePer1kCents: 1,
      minViewsToEarn: 1,
      budgetCents: 1
    }
  }),
});
const data = await res.json();
if (!res.ok) throw new Error(data?.error ?? `Request failed with status ${res.status}`);
console.log(data);
```

```python
import os
import requests

resp = requests.post(
    "https://api.pozy.ai/v1/creator-campaigns",
    headers={"Authorization": f"Bearer {os.environ['POZY_API_KEY']}"},
    json={
        "profileId": "6a0b6573846efc28aaa9a3ff",
        "name": "Acme",
        "brandName": "Acme",
        "economics": {
            "type": "cpm",
            "ratePer1kCents": 1,
            "minViewsToEarn": 1,
            "budgetCents": 1,
        },
    },
    timeout=30,
)
resp.raise_for_status()
print(resp.json())
```

## Response 201

- `campaign`, object, required
  - `id`, string, required
  - `userId`, string, required
  - `profileId`, string, required
  - `kind`, string, required
  - `name`, string, required
  - `brandName`, string, required
  - `status`, string, required: One of `draft`, `active`, `paused`, `closed`
  - `type`, string, required: One of `cpm`, `per_post`, `pool`
  - `currency`, string, required
  - `platforms`, array of string, required: Each item: one of `tiktok`, `instagram`, `youtube`, `threads`, `pinterest`, `facebook`, `twitter`
  - `contentRules`, string, required: Can be null
  - `startsAt`, string (date-time), required: Can be null
  - `endsAt`, string (date-time), required: Can be null
  - `trackingDays`, integer, required
  - `holdDays`, integer, required
  - `maxPostAgeMinutes`, integer, required: Can be null
  - `activatedAt`, string (date-time), required: Can be null
  - `settlement`, string, required: One of `none`, `external`, `treasury`
  - `economics`, object, required
    - one of: Creator Campaign Economics Cpm
      - `type`, string, required: One of `cpm`
      - `ratePer1kCents`, integer, required: At least 1
      - `minViewsToEarn`, integer, required: At least 0
      - `maxPayoutPerClipCents`, integer: At least 1
      - `budgetCents`, integer, required: At least 0
    - one of: Creator Campaign Economics Per Post
      - `type`, string, required: One of `per_post`
      - `perApprovedPostCents`, integer, required: At least 1
      - `maxPostsPerParticipant`, integer: At least 1
      - `budgetCents`, integer, required: At least 0
    - one of: Creator Campaign Economics Pool
      - `type`, string, required: One of `pool`
      - `budgetCents`, integer, required: At least 0
      - `minViewsToQualify`, integer, required: At least 0
  - `caps`, object, required
    - `maxParticipants`, integer: At least 1
    - `maxSubmissionsPerParticipantPerDay`, integer: At least 1
    - `maxAccountsPerParticipant`, integer: At least 1
    - `maxXReadSpendCents`, integer: At least 1
    - `authenticityThreshold`, number, required: 0 to 100
  - `branding`, object, required
    - one of: Creator Campaign Branding
      - `brandName`, string
      - `primaryColor`, string
      - `logoUrl`, string
      - `theme`, object
  - `budgetExhaustedAt`, string (date-time), required: Can be null
  - `closedAt`, string (date-time), required: Can be null
  - `payableScannedAt`, string (date-time), required: Can be null
  - `createdAt`, string (date-time), required
  - `updatedAt`, string (date-time), required
  - `hasOpenInvite`, boolean, required
  - `consumedCents`, integer, required
  - `participantCount`, integer, required
  - `submissionCounts`, object, required
    - `received`, integer, required
    - `tracking`, integer, required
    - `pending_review`, integer, required
    - `approved`, integer, required
    - `rejected`, integer, required
    - `expired`, integer, required
    - `withdrawn`, integer, required
  - `payableCents`, integer, required

```json
{
  "campaign": {
    "id": "6bfebd43ddc270f6d2c56fc5",
    "userId": "6da95b9455a22c1e061837af",
    "profileId": "6a0b6573846efc28aaa9a3ff",
    "kind": "string",
    "name": "Acme",
    "brandName": "Acme",
    "status": "draft",
    "type": "cpm",
    "currency": "USD",
    "platforms": [
      "tiktok"
    ],
    "contentRules": "Hello from Pozy",
    "startsAt": "2026-10-02T09:00:00.000Z",
    "endsAt": "2026-10-02T09:00:00.000Z",
    "trackingDays": 1,
    "holdDays": 1,
    "maxPostAgeMinutes": 1,
    "activatedAt": "2026-10-02T09:00:00.000Z",
    "settlement": "none",
    "economics": {
      "type": "cpm",
      "ratePer1kCents": 1,
      "minViewsToEarn": 1,
      "maxPayoutPerClipCents": 1,
      "budgetCents": 1
    },
    "caps": {
      "maxParticipants": 1,
      "maxSubmissionsPerParticipantPerDay": 1,
      "maxAccountsPerParticipant": 42,
      "maxXReadSpendCents": 1,
      "authenticityThreshold": 12.5
    },
    "branding": {
      "brandName": "Acme",
      "primaryColor": "string",
      "logoUrl": "https://pozy.ai/media/example-1.jpg",
      "theme": {}
    },
    "budgetExhaustedAt": "2026-10-02T09:00:00.000Z",
    "closedAt": "2026-10-02T09:00:00.000Z",
    "payableScannedAt": "2026-10-02T09:00:00.000Z",
    "createdAt": "2026-10-02T09:00:00.000Z",
    "updatedAt": "2026-10-02T09:00:00.000Z",
    "hasOpenInvite": true,
    "consumedCents": 1,
    "participantCount": 42,
    "submissionCounts": {
      "received": 1,
      "tracking": 1,
      "pending_review": 1,
      "approved": 1,
      "rejected": 1,
      "expired": 1,
      "withdrawn": 1
    },
    "payableCents": 1
  }
}
```
