Overview
Campaigns capture structured user intent through interactive mechanics. They generate first-party preference signals (USER_DECLARED) that feed into the agentic product feed’s intent scoring. Campaigns belong to a creator within your organization and follow a defined lifecycle from draft to completion.
Campaign Types
| Type | Mechanic | Intent Signal |
|---|---|---|
SWIPE | Binary preference (like/dislike on product images) | Product preference direction |
MULTIVARIANT | Vote between attribute options (e.g., “Which shade?”) | Attribute value preference |
SURVEY | Structured question-and-answer | Explicit preference declarations |
UGC | User-generated content submission | Content creation + implicit preference |
Create a Campaign
| Field | Type | Required | Description |
|---|---|---|---|
creatorId | string | Yes | CUID of the owning creator |
type | enum | Yes | SWIPE, MULTIVARIANT, SURVEY, or UGC |
DRAFT status. Configure it with a PUT before publishing.
Configure a Draft Campaign
UsePUT /campaign/{id} to set up the campaign content, timing, and reward structure:
Configuration Fields
| Field | Type | Description |
|---|---|---|
title | string | Campaign title |
description | string | Campaign description |
hero | MediaAsset[] | Hero images/videos |
logo | string | Campaign logo URL |
video | string | Video URL |
startDate | datetime | When campaign goes live |
endDate | datetime | When campaign closes |
maxParticipants | integer | Max participants (null = unlimited) |
showInstructions | boolean | Show instruction card |
showLeaderboard | boolean | Show participation leaderboard |
rateLimit | integer | Max participations per user (0 = unlimited) |
reward | object | { points, maxSupply } — points per completion |
attributes | array | Voting attributes for MULTIVARIANT campaigns |
questions | array | Questions for SURVEY campaigns |
Campaign Lifecycle
| Status | Description |
|---|---|
DRAFT | Being configured — editable via PUT |
SUBMITTED | Awaiting admin review |
APPROVED | Approved, ready to publish |
PUBLISHED | Live, accepting participation |
ENDED | Participation closed, analytics available |
Submit for Review
Publish
requiresReview: false to skip the SUBMITTED → APPROVED step and publish directly.
Update a Published Campaign
Only a subset of fields can be changed after publishing:title, description, hero, showInstructions, showLeaderboard, status.
Participation
Cast Votes (MULTIVARIANT)
| Field | Type | Required | Description |
|---|---|---|---|
userId | string | Yes | Participating user’s CUID |
votes | array | Yes | Array of vote objects |
votes[].attributeId | number | Yes | Campaign attribute ID |
votes[].optionId | number | number[] | Yes | Selected option(s) — single or multi-select |
CampaignJourney record linking the user to the campaign and records individual CampaignVote entries. If a reward is configured, points are awarded automatically.
Submit Survey (SURVEY)
| Field | Type | Required | Description |
|---|---|---|---|
userId | string | Yes | Participating user’s CUID |
responses | array | Yes | Array of response objects |
responses[].questionId | number | Yes | Campaign question ID |
responses[].answer | string | string[] | Yes | Answer — single or multi-choice |
CampaignResponse records and feed into the enrichment pipeline as USER_DECLARED preference data.
Get Survey Report
Configure a Campaign Reward
Link an on-chain reward to a campaign:| Field | Type | Description |
|---|---|---|
name | string | Reward token name |
description | string | Reward description |
imageUrl | string | Static image URL |
animationUrl | string | Animated media URL |
points | integer | Points cost to redeem |
externalUrl | string | External link |
imageUrl or animationUrl is required.
Analytics
Campaign Overview
Available Analytics Endpoints
| Endpoint | Returns |
|---|---|
/campaign/{id}/analytics | Overall participation and response metrics |
/campaign/{id}/analytics/participants | Paginated participant list |
/campaign/{id}/analytics/participants/count | Total participant count |
/campaign/{id}/analytics/participants/growth | Participation growth over time |
/campaign/{id}/analytics/responses | Response data breakdown |
/campaign/{id}/analytics/responses/growth | Response growth over time |
/campaign/{id}/attributes | Vote distributions per attribute/option |
Attribute Vote Distribution
Campaign Model
| Field | Type | Description |
|---|---|---|
id | string | CUID2 identifier |
type | enum | SWIPE, MULTIVARIANT, SURVEY, UGC |
status | enum | Lifecycle status |
title | string | Campaign title |
description | string | Campaign description |
startDate | datetime | Go-live timestamp |
endDate | datetime | End timestamp |
maxParticipants | integer | Participant cap |
showInstructions | boolean | Show instruction card |
showLeaderboard | boolean | Show leaderboard |
rateLimit | integer | Max participations per user |
creatorId | string | Owning creator CUID |
publishedAt | datetime | When campaign was published |
createdAt | datetime | Creation timestamp |
Related Models
| Model | Purpose |
|---|---|
CampaignAttribute | Voting dimensions for MULTIVARIANT (title, hasImages) |
CampaignAttributeOption | Individual vote options within an attribute |
CampaignQuestion | Survey questions for SURVEY campaigns |
CampaignResponse | Individual survey answers |
CampaignJourney | A user’s participation record (links user, campaign, votes/responses) |
CampaignVote | Individual vote on an attribute option |
CampaignReward | Points reward configuration per campaign |
CampaignRewardTransaction | Points awarded for campaign completion |
Endpoint Summary
| Method | Path | Description |
|---|---|---|
POST | /campaign | Create campaign |
GET | /campaign/{id} | Get campaign |
PUT | /campaign/{id} | Update draft |
PATCH | /campaign/{id} | Update published |
DELETE | /campaign/{id} | Delete campaign |
PATCH | /campaign/{id}/submit | Submit for review |
PATCH | /campaign/{id}/publish | Publish |
PUT | /campaign/{id}/nft | Configure reward |
GET | /campaign/{id}/attributes | Attribute distributions |
POST | /campaign/{id}/vote | Cast votes |
POST | /campaign/{id}/survey | Submit survey |
GET | /campaign/{id}/survey/report | Survey report |
GET | /campaign/{id}/analytics | Analytics overview |
GET | /campaign/{id}/analytics/participants | Participants |
GET | /campaign/{id}/analytics/participants/count | Participant count |
GET | /campaign/{id}/analytics/participants/growth | Growth |
GET | /campaign/{id}/analytics/responses | Response data |
GET | /campaign/{id}/analytics/responses/growth | Response growth |

