Creators · Creator Campaigns
Creates a creator campaign.
Request
Send your API key as Authorization: Bearer pz_live_.... Read-only keys cannot call it. Keys with the creator_campaigns resource group disabled get 403 resource_group_disabled. Authentication
Headers
| Name | Type | Notes |
|---|---|---|
Idempotency-Key | string | Up to 255 charactersRetries with the same key return the original result. See Idempotency |
Request body
application/json, required
profileIdstringrequirednamestringrequired1 to 200 characters.
brandNamestringrequired1 to 200 characters.
economicsobjectrequiredOne of:
Creator Campaign Economics Cpm (5 fields)
typestringrequiredOne of
cpm.ratePer1kCentsintegerrequiredAt least 1.
minViewsToEarnintegerrequiredAt least 0.
maxPayoutPerClipCentsintegerAt least 1.
budgetCentsintegerrequiredAt least 0.
Creator Campaign Economics Per Post (4 fields)
typestringrequiredOne of
per_post.perApprovedPostCentsintegerrequiredAt least 1.
maxPostsPerParticipantintegerAt least 1.
budgetCentsintegerrequiredAt least 0.
Creator Campaign Economics Pool (3 fields)
typestringrequiredOne of
pool.budgetCentsintegerrequiredAt least 0.
minViewsToQualifyintegerrequiredAt least 0.
capsobjectmaxParticipantsintegerAt least 1.
maxSubmissionsPerParticipantPerDayintegerAt least 1.
maxAccountsPerParticipantintegerAt least 1.
maxXReadSpendCentsintegerAt least 1.
authenticityThresholdnumberrequired0 to 100.
platformsarray of stringEach item: one of
tiktok,instagram,youtube,threads,pinterest,facebook,twitter.contentRulesstringUp to 10000 characters. Can be null.
startsAtstring (date-time)Can be null.
endsAtstring (date-time)Can be null.
trackingDaysintegerDefault
30. 1 to 365.holdDaysintegerDefault
10. 0 to 90.maxPostAgeMinutesintegerAt least 1. Can be null.
settlementstringOne of
none,external,treasury. Defaultnone.brandingobjectOne of:
Creator Campaign Branding (4 fields)
brandNamestringprimaryColorstringlogoUrlstringthemeobject
Example
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
}
}'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);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 on success
campaignobjectrequired31 child fields
idstringrequireduserIdstringrequiredprofileIdstringrequiredkindstringrequirednamestringrequiredbrandNamestringrequiredstatusstringrequiredOne of
draft,active,paused,closed.typestringrequiredOne of
cpm,per_post,pool.currencystringrequiredplatformsarray of stringrequiredEach item: one of
tiktok,instagram,youtube,threads,pinterest,facebook,twitter.contentRulesstringrequiredCan be null.
startsAtstring (date-time)requiredCan be null.
endsAtstring (date-time)requiredCan be null.
trackingDaysintegerrequiredholdDaysintegerrequiredmaxPostAgeMinutesintegerrequiredCan be null.
activatedAtstring (date-time)requiredCan be null.
settlementstringrequiredOne of
none,external,treasury.economicsobjectrequiredOne of:
Creator Campaign Economics Cpm (5 fields)
typestringrequiredOne of
cpm.ratePer1kCentsintegerrequiredAt least 1.
minViewsToEarnintegerrequiredAt least 0.
maxPayoutPerClipCentsintegerAt least 1.
budgetCentsintegerrequiredAt least 0.
Creator Campaign Economics Per Post (4 fields)
typestringrequiredOne of
per_post.perApprovedPostCentsintegerrequiredAt least 1.
maxPostsPerParticipantintegerAt least 1.
budgetCentsintegerrequiredAt least 0.
Creator Campaign Economics Pool (3 fields)
typestringrequiredOne of
pool.budgetCentsintegerrequiredAt least 0.
minViewsToQualifyintegerrequiredAt least 0.
capsobjectrequired5 child fields
maxParticipantsintegerAt least 1.
maxSubmissionsPerParticipantPerDayintegerAt least 1.
maxAccountsPerParticipantintegerAt least 1.
maxXReadSpendCentsintegerAt least 1.
authenticityThresholdnumberrequired0 to 100.
brandingobjectrequiredOne of:
Creator Campaign Branding (4 fields)
brandNamestringprimaryColorstringlogoUrlstringthemeobject
budgetExhaustedAtstring (date-time)requiredCan be null.
closedAtstring (date-time)requiredCan be null.
payableScannedAtstring (date-time)requiredCan be null.
createdAtstring (date-time)requiredupdatedAtstring (date-time)requiredhasOpenInvitebooleanrequiredconsumedCentsintegerrequiredparticipantCountintegerrequiredsubmissionCountsobjectrequired7 child fields
receivedintegerrequiredtrackingintegerrequiredpending_reviewintegerrequiredapprovedintegerrequiredrejectedintegerrequiredexpiredintegerrequiredwithdrawnintegerrequired
payableCentsintegerrequired
{
"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
}
}Errors
Errors use one shape: { error, type, code, param?, details? }. The ones you are most likely to see here:
| 400 | invalid_request_error | A parameter or body field is missing or invalid. param names it. |
| 401 | authentication_error | The API key is missing, revoked or expired. |
| 403 | permission_error | The key is read-only, scoped to other profiles, or has this resource group disabled. |
| 429 | rate_limit_error | Too many requests this minute. Wait for Retry-After seconds. |
Every code is listed in Errors.