Update a Promotion
PUT
/api/promotions/{id}
deprecated
Requires: Promotions.Promotions, Promotions.Promotions.Update, merchant scope.
Update an existing Promotion by id
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 UpdatePromotionDto. See the Request body section below for its fields.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id
required |
path | string (uuid) | |
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 promotion. Required on create, and immutable afterwards: an update that names a different merchant is refused rather than silently moving the promotion and the ledger entries that point at it. nullable |
code
required |
string | The code a payer types. Stored trimmed and upper-cased, and unique among the merchant's promotions, so `save10` and `SAVE10` are the same code rather than two. Conditional: When Code is not empty. nullablemax length 64 |
name
required |
string | Operator-facing promotion name. Never shown to payers. nullablemax length 128 |
description
required |
string | Free-text description of the promotion. nullablemax length 1024 |
discountType
required |
all of PromotionDiscountType | Whether the value is a percentage or a flat amount. |
value
required |
number (double) | The percentage, or the flat amount in `currency`. Conditional: When DiscountType == Percent. Must be <= 100. Conditional: When DiscountType == Flat. Must be <= 1000000. min 0 |
currency
required |
string | The ISO 4217 currency. Required for a flat amount, and optional for a percentage, where it narrows the promotion to one currency rather than denominating anything. Required: When DiscountType == Flat. Conditional: When Currency is not empty. Length: 3 to 3. nullable |
startsAtUtc
required |
string (date-time) | UTC moment the promotion starts being accepted. `null` starts it immediately. nullable |
endsAtUtc
required |
string (date-time) | UTC moment the promotion stops being accepted. `null` leaves it open. nullable |
maxRedemptions
required |
integer (int32) | How many times the promotion may be redeemed in total. `null` for no ceiling. Conditional: When MaxRedemptions is not null. Must be > 0. nullable |
maxRedemptionsPerCustomer
required |
integer (int32) | How many times one customer may redeem it. `null` for no ceiling. A promotion that carries one refuses a redemption that identifies no customer. Conditional: When MaxRedemptionsPerCustomer is not null. Must be > 0. nullable |
minimumSubtotal
required |
number (double) | The smallest amount the promotion applies to. `null` for no floor. Conditional: When MinimumSubtotal is not null. Must be >= 0. nullable |
appliesToScope
required |
all of PromotionAppliesToScope | What the promotion may be applied to. |
appliesToTargetIds
required |
array of string (uuid) | The pages, products or plans the scope names. Required by every scope except `Any`, which ignores it. Conditional: When AppliesToScope != Any. Conditional: When AppliesToTargetIds is not null. nullable |
durationMode
required |
all of PromotionDurationMode | How long the discount runs on a recurring charge. |
durationCycles
required |
integer (int32) | How many billing cycles the discount runs for. Required by `Cycles`, and ignored by every other mode. Required: When DurationMode == Cycles. nullable |
isActive
required |
boolean | Whether the promotion is accepted. A deactivated promotion keeps its ledger. |
concurrencyStamp
required |
string | nullable |
This request body has no documented fields.
Responses
200 OK
Body: PromotionDto
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 promotion. |
code
required |
string | The code a payer types, in its stored normalized form. nullable |
name
required |
string | Operator-facing promotion name. nullable |
description
required |
string | Free-text description of the promotion. nullable |
discountType
required |
all of PromotionDiscountType | Whether the value is a percentage or a flat amount. |
value
required |
number (double) | The percentage, or the flat amount in `currency`. |
currency
required |
string | The ISO 4217 currency, when the promotion is pinned to one. nullable |
startsAtUtc
required |
string (date-time) | UTC moment the promotion starts being accepted. nullable |
endsAtUtc
required |
string (date-time) | UTC moment the promotion stops being accepted. nullable |
maxRedemptions
required |
integer (int32) | How many times the promotion may be redeemed in total. nullable |
maxRedemptionsPerCustomer
required |
integer (int32) | How many times one customer may redeem it. nullable |
minimumSubtotal
required |
number (double) | The smallest amount the promotion applies to. nullable |
redemptionCount
required |
integer (int32) | How many times the promotion has been redeemed. |
remainingRedemptions
required |
integer (int32) | How many redemptions remain before the total ceiling, or `null` when there is no ceiling. nullable |
appliesToScope
required |
all of PromotionAppliesToScope | What the promotion may be applied to. |
appliesToTargetIds
required |
array of string (uuid) | The pages, products or plans the scope names. nullable |
durationMode
required |
all of PromotionDurationMode | How long the discount runs on a recurring charge. |
durationCycles
required |
integer (int32) | How many billing cycles the discount runs for, when the duration counts cycles. nullable |
isActive
required |
boolean | Whether the promotion is accepted. |
isRedeemable
required |
boolean | Whether the promotion would be accepted right now: active, inside its window, and with redemptions left. It says nothing about any particular order, which only an evaluation against a real amount and target can answer. |
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. 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.
Body: RateLimitProblemDetails
Each item has these fields.
| Field | Type | Description |
|---|---|---|
type
required |
string | The problem type identifier. Always the same value: the failure is the status code itself, so there is no sub-type for a caller to branch on. nullable |
title
required |
string | A short, human-readable summary of the problem type. nullable |
status
required |
integer (int32) | The HTTP status code, repeated in the body as the problem-details format defines. |
detail
required |
string | A human-readable explanation of this occurrence of the problem. nullable |
retryAfterSeconds
required |
integer (int32) | How long to wait before retrying, in whole seconds, carrying the same figure as the `Retry-After` header. Always at least one: a value of zero would invite an immediate retry that is certain to be rejected again. |
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.