Create a Campaign
POST
/api/campaigns
deprecated
Requires: Campaigns.Campaigns, Campaigns.Campaigns.Create, merchant scope.
Create a new Campaign
Signed in, you can send this request to your own sandbox merchant from the console and read the answer. Sign in to try it.
Example request
Every block below sends the same request. Replace {{BASE_URL}} with the address of the API you are calling and {{API_KEY}} with your own key.
The request body is a CreateCampaignDto. See the Request body section below for its fields.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
suppressNulls
required |
query | boolean | If true, omit properties with null values. |
Request body
application/json
, required
| Field | Type | Description |
|---|---|---|
merchantId
required |
string (uuid) | The merchant that owns this campaign. Required on create, and immutable afterwards: an update that names a different merchant is refused rather than silently moving the campaign and every link pointing at it. nullable |
name
required |
string | Operator-facing campaign name. Never shown to payers. nullablemax length 128 |
description
required |
string | Free-text description of the campaign. nullablemax length 1024 |
startsAtUtc
required |
string (date-time) | UTC moment the campaign starts accepting payments. `null` means it starts as soon as it is activated. nullable |
endsAtUtc
required |
string (date-time) | UTC moment the campaign stops accepting payments. `null` means it stays open until it is ended explicitly. nullable |
inactiveMessage
required |
string | Payer-facing message shown when someone opens a member link while the campaign is not accepting payments. `null` falls back to the platform default copy. nullablemax length 512 |
externalReference
required |
string | The merchant's own identifier for this campaign, carried through to reporting. nullablemax length 128 |
maxCompletions
required |
integer (int32) | The number of approved payments at which the campaign ends on its own, or `null` for no completion cap. Must be greater than zero when set. Enforced exactly: the payment that would exceed it is refused at submit, and two payers cannot both take the last slot. nullablemin 0 |
maxTotalAmount
required |
number (double) | The net collected amount at which the campaign ends on its own, or `null` for no amount cap. Must be greater than zero when set. A payment already in flight when the cap is reached still completes, so the total can overshoot by the payments in flight at that instant. nullablemin 0 |
goalAmount
required |
number (double) | The amount the campaign is aiming to collect, or `null` for no goal. Must be greater than zero when set. Drives the progress bar and the `Campaign.Milestone` and `Campaign.GoalReached` notifications; reaching it never ends the campaign. nullablemin 0 |
refundsReduceTotal
required |
boolean | Whether refunds, voids and reversals reduce the collected total the caps and the goal are measured against. Off by default: the total only ever goes up. |
showProgress
required |
boolean | Whether the campaign's count, total and goal are shown to payers on its hosted pages and links, and published at `GET /api/campaigns/{id}/progress`. Off by default: nothing about the campaign leaves the merchant's own surfaces. |
overrides
required |
all of CampaignOverridesDto | Branding and text laid over every hosted page and payment link in the campaign when it renders. On an update, leave this out (or send `null`) to keep the overrides the campaign already has; send an object to replace them all, where each member left out or `null` inherits the member page's own value. |
This request body has no documented fields.
Responses
200 OK
Body: CampaignDto
Each item has these fields.
| Field | Type | Description |
|---|---|---|
extraProperties
required |
object | nullableread only |
id
required |
string (uuid) | |
creationTime
required |
string (date-time) | The date and time when this entity was created. |
creatorId
required |
string (uuid) | The ID of the user who created this entity. nullable |
lastModificationTime
required |
string (date-time) | The date and time when this entity was last modified. nullable |
lastModifierId
required |
string (uuid) | The ID of the user who last modified this entity. nullable |
isDeleted
required |
boolean | Indicates whether this entity has been deleted. |
deleterId
required |
string (uuid) | The ID of the user who deleted this entity, if it is deleted. nullable |
deletionTime
required |
string (date-time) | The date and time when this entity was deleted, if it is deleted. nullable |
merchantId
required |
string (uuid) | The merchant that owns this campaign. |
name
required |
string | Operator-facing campaign name. nullable |
description
required |
string | Free-text description of the campaign. nullable |
status
required |
all of CampaignStatus | The campaign's status right now. A running campaign whose scheduled end has already passed reads as `Ended` here, without anything having been written to it. |
endedReason
required |
all of CampaignEndedReason | Why the campaign ended, or `null` while it has not ended. A campaign that ended only because its window closed reports `Schedule`. nullable |
endedAtUtc
required |
string (date-time) | UTC moment the campaign was ended or archived out of a running state, or `null` while it has not been. A campaign that reads as ended only because its window closed carries none: its `endsAtUtc` is its end. nullable |
isAcceptingPayments
required |
boolean | Whether member payment links may transact through this campaign right now. False before the scheduled start, and for any status other than active. |
startsAtUtc
required |
string (date-time) | UTC moment the campaign starts accepting payments. nullable |
endsAtUtc
required |
string (date-time) | UTC moment the campaign stops accepting payments. nullable |
inactiveMessage
required |
string | Payer-facing message shown while the campaign is not accepting payments. nullable |
externalReference
required |
string | The merchant's own identifier for this campaign. nullable |
overrides
required |
all of CampaignOverridesDto | Branding and text laid over every hosted page and payment link in the campaign when it renders. A member that is `null` inherits each member page's own value. |
clonedFromCampaignId
required |
string (uuid) | The campaign this one was cloned from, or `null` for a campaign created from scratch. The source may have been deleted since; the reference is kept either way. nullable |
maxCompletions
required |
integer (int32) | The number of approved payments at which the campaign ends on its own, or `null` for no completion cap. nullable |
maxTotalAmount
required |
number (double) | The net collected amount at which the campaign ends on its own, or `null` for no amount cap. nullable |
goalAmount
required |
number (double) | The amount the campaign is aiming to collect, or `null` for no goal. nullable |
refundsReduceTotal
required |
boolean | Whether refunds, voids and reversals reduce the collected total. |
showProgress
required |
boolean | Whether the campaign's progress is shown to payers and published anonymously. |
completedCount
required |
integer (int32) | Approved payments counted so far. Zero on a campaign that has taken none. |
approvedTotal
required |
number (double) | The approved base amount collected so far, before any refund. |
refundedTotal
required |
number (double) | The amount refunded, voided or reversed so far. |
netTotal
required |
number (double) | The total the caps and the goal are measured against: approved less refunded when refunds reduce the total, approved otherwise. |
lastCompletedAtUtc
required |
string (date-time) | When the most recent approved payment was counted (UTC), or `null` before the first. nullable |
percentOfGoal
required |
integer (int32) | The net total as a whole percentage of the goal, not capped at 100, or `null` without a goal. nullable |
concurrencyStamp
required |
string | Optimistic concurrency token. nullable |
This response has no documented body fields.
403 Forbidden
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
401 Unauthorized
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
400 Bad Request
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
404 Not Found
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
501 Not Implemented
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
500 Internal Server Error
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
default The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
429 The request was refused because a rate limit was exceeded, or because something a later retry can clear stopped it. A rate limit refusal carries an `application/problem+json` body: wait at least the interval `Retry-After` names before retrying, then back off. Limits are tuned per deployment, so read the allowance from the response headers rather than assuming a fixed ceiling. Any other refusal carries the standard error envelope as `application/json`, and its `error.code` names the cause.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
Errors
A failed request returns the platform error envelope. The
error reference lists every value
error.code can carry and shows the four response shapes.