Skip to content

Create an email campaign (draft)

Requires EDITOR. Computes audience preview counts at creation.

projectId
required
string

Tenant project id (row-level isolation on every query).

Media typeapplication/json
object
name
required
string
>= 1 characters <= 120 characters
templateId
required
string
>= 1 characters
providerId
string | null
>= 1 characters
identityId
string | null
>= 1 characters
audienceFilter
required

Segment predicate shared by campaigns and trigger userFilter (all fields optional).

object
locale
One of:
string
hasEmail
boolean
hasPhone
boolean
userIdLike
string
firstSeenFrom
string format: date-time
firstSeenTo
string format: date-time
lastSeenFrom
string format: date-time
lastSeenTo
string format: date-time
savedAudienceId
string
queueKey
string
Allowed values: new_paid_activation key_created_low_usage high_balance_inactive high_value low_balance_renewal churn_risk_paid
paidStatus
One of:
string
valueTier
One of:
string
minLtv
number
maxLtv
number
minBalance
number
maxBalance
number
minUsage30d
number
maxUsage30d
number
lastPurchaseFrom
string format: date-time
lastPurchaseTo
string format: date-time
lifecycleStage
One of:
string
recommendedAction
One of:
string
variables
object
key
additional properties
any
sendRatePerSecond
integer
default: 10 >= 1 <= 100
scheduledAt
string format: date-time

Created campaign.

Media typeapplication/json
object
campaign

Email campaign (serialized). See handler for the full field set.

object
id
string
projectId
string
name
string
status
string
Allowed values: draft queued expanding sending paused completed aborted
templateId
string
providerId
string | null
identityId
string | null
audienceFilter

Segment predicate shared by campaigns and trigger userFilter (all fields optional).

object
locale
One of:
string
hasEmail
boolean
hasPhone
boolean
userIdLike
string
firstSeenFrom
string format: date-time
firstSeenTo
string format: date-time
lastSeenFrom
string format: date-time
lastSeenTo
string format: date-time
savedAudienceId
string
queueKey
string
Allowed values: new_paid_activation key_created_low_usage high_balance_inactive high_value low_balance_renewal churn_risk_paid
paidStatus
One of:
string
valueTier
One of:
string
minLtv
number
maxLtv
number
minBalance
number
maxBalance
number
minUsage30d
number
maxUsage30d
number
lastPurchaseFrom
string format: date-time
lastPurchaseTo
string format: date-time
lifecycleStage
One of:
string
recommendedAction
One of:
string
variables
object | null
estimatedRecipients
integer
suppressionPreview
integer
sendRatePerSecond
integer
scheduledAt
string | null format: date-time
launchAt
string | null format: date-time
expandedCount
integer
sentCount
integer
deliveredCount
integer
openedCount
integer
clickedCount
integer
failedCount
integer
suppressedCount
integer
abortedReason
string | null
quotaDeferredCount
integer
lastQuotaDeferredAt
string | null format: date-time
createdBy
string | null
createdAt
string format: date-time
updatedAt
string format: date-time
startedAt
string | null format: date-time
completedAt
string | null format: date-time

Request body failed Zod validation.

Media typeapplication/json

Validation error envelope with per-field issues.

object
error
string
issues
Array<object>
object
path
string
message
string
Examplegenerated
json
{
"error": "example",
"issues": [
{
"path": "example",
"message": "example"
}
]
}

Not authenticated (no valid session/principal).

Media typeapplication/json
object
error
required

Human-readable error message.

string
message
string
Examplegenerated
json
{
"error": "example",
"message": "example"
}

Authenticated but lacks the required project role.

Media typeapplication/json
object
error
required

Human-readable error message.

string
message
string
Examplegenerated
json
{
"error": "example",
"message": "example"
}

Saved audience or sending identity not found.

Media typeapplication/json
object
error
required

Human-readable error message.

string
message
string
Examplegenerated
json
{
"error": "example",
"message": "example"
}