Skip to main content
POST

Authorizations

Authorization
string
header
required

Opaque Authorization header using the Bearer scheme. Example: "Authorization: Bearer {token}"

Body

The list of offers to import.

offerId
string
required

ID of the offer.

Minimum string length: 1
name
string | null

Name of the offer visible in the admin tools.

validFrom
string<date-time> | null

Date when any coupons for this offer become available to pick up in store.

validTo
string<date-time> | null

Date when all coupons for this offer stop being available to pick up in the store.

previewVisibleFrom
string<date-time> | null

Date when Coupons will be returned in API and visible in the app. Cannot be cleared after being set.

offerType
string | null

Customer specific offer type. Determines how or by which service offer will be used. Types used so far: game, appCoupon, gift, preferredStore, memberOffer, stampCard, stickersCampaign, segmentedAppCoupon, personalOffer. If not specified and offer is new, default type will be used, but publish will fail.

unifiedCampaignId
string | null

ID of the unified campaign to which offer belongs.

Maximum string length: 64
title
string | null

Title of product visible in mobile app and in the coupon list. Can be cleared by passing empty string.

Maximum string length: 255
description
string | null

Additional description of product visible in mobile app. Can be cleared by passing empty string.

brand
string | null

Brand of product. Can be cleared by passing empty string.

Maximum string length: 50
imageUrl
string | null

Url to the image which be displayed in the promotion in the app. Can be cleared by passing empty string.

Maximum string length: 2000
discountLabel
string | null

Discount label - for example Price For a Day or Monthly Price. Can be cleared by passing empty string.

Maximum string length: 255
normalPriceLabel
string | null

Normal price label - for example Non-member Price. Can be cleared by passing empty string.

Maximum string length: 255
pricePerUnitLabelEnabled
boolean | null

Is the price per unit of the product(per kilo, per bottle, etc) visible in the mobile app

unitOfMeasure
string | null

Unit of measure for the product - EA, kg, etc... Can be cleared by passing empty string.

Maximum string length: 255
conditionLabel
string | null

Condition label used for override default condition label in the app

Maximum string length: 64
receiptDisplayText
string | null

Text that should be printed on receipt when the offer is applied

Maximum string length: 100
tags
string | null

Additional tags - organic, vegan, best buy, etc...

normalPrice
number<double> | null

Price of the purchased amount before discount is applied. Required when importing offer for the first time. When not provided, last stored value is used.

Required range: 0 <= x <= 100000000
normalPricePerUnit
number<double> | null

Price per unit (per kile, for example) before discount is applied. Required when importing offer for the first time. When not provided, last stored value is used.

Required range: 0 <= x <= 100000000
currency
string | null

ISO-4217 currency code - 3 characters, for example, DKK, ISK, EUR etc. Required when importing offer for the first time. When not provided, last stored value is used

Maximum string length: 3
priority
integer<int32> | null

The discount priority. The lower the priority value, the more priority the discount has

allowOtherDiscountsOnTop
boolean | null

Indicates whether the current discount allows the application of other discounts over it

itemsApplicationType
enum<string>

The discounted items type

Available options:
AllItems,
NonDiscountedItems,
DiscountedItems
maxDiscountAmount
number<double> | null

The maximum discount amount that can be applied to the basket.

impactLevel
enum<string>

Specifies what the discount impacts - specific line or the basket total

Available options:
Line,
Total
discountType
enum<string>

The type of discount calculation rule to apply

Available options:
Unknown,
SimpleLine,
SimpleQuantity,
SimpleTotal,
MixAndMatch,
MixAndMatchTotal,
QuantityStep,
RewardTotal,
TotalStep
applyOnHighestPrice
boolean | null

Defines sorting of products to apply discount on highest or lowest price product

maxNumberApplyPerReceipt
number<double> | null

Specifies the maximum amount of items for which the discount applies in scope of single receipt

redemptionLimit
integer<int32> | null

Specifies how many times coupon can be redeemed in store. Each redemption is a separate purchase. Amount of time a coupon can be used in one purchase is controlled by Discount model. When not specified, defaults to last stored value on update, or 1 on create. Use 0 to indicate that coupon can be redeemed unlimited amount of times. If value is not equal to 1, we recommend providing Idempotency key during redemption, or weird behavior might happen.

checkoutTypes
string | null

List of CheckoutTypes, separated by "ArraySplitter" where offer is applicable. ArraySplitter is a character by which symbol array should be split. ArraySplitter can be changed in settings

rewardRedeemableFrom
string<date-time> | null

The date and time when the granted benefit becomes available for use. Can be used only for Bonus benefits.

rewardRedeemableTo
string<date-time> | null

The exact date and time when the granted benefit expires if not used. Can be used only for Bonus benefits. This property is mutually exclusive with Promotion.Client.ApiModels.V3.Requests.BulkUpsertRequest.RewardRedeemableForDays.

rewardRedeemableForDays
integer<int32> | null

The number of days after which the benefit expires if not used, counted from the moment the benefit is granted. This property is mutually exclusive with Promotion.Client.ApiModels.V3.Requests.BulkUpsertRequest.RewardRedeemableTo. Can be used only for Bonus benefits.

totalCoupons
integer<int32> | null

Total amount of possible coupons in the offer. When it is null, unlimited amount of coupons can be assigned.

isDefault
boolean | null

Can be true only for personal offers ("personalOffer", "relevantOffer"). When true, this offer will be returned for a user that has no coupons assigned in personal offers.

chainIds
string | null

Collection of Chain Ids, separated by "ArraySplitter" where offer is available. Mutually exclusive with StoreIds. ArraySplitter is a character by which symbol array should be split. ArraySplitter can be changed in settings

storeIds
string | null

List of Store Ids, separated by "ArraySplitter" where offer is available. Mutually exclusive with ChainIds. ArraySplitter is a character by which symbol array should be split. ArraySplitter can be changed in settings

audienceIds
string | null

List of Audience Ids, separated by "ArraySplitter", customers from which have access to the offer.

fundedBy
string | null

Specifies who this offer is funded by. Retailers can use any values they need, or keep it empty

Maximum string length: 100
displayPriority
integer<int32> | null

Controlls the order in which coupons are returned to the mobile app. Lower number means higher priority

preactivated
boolean | null

Specifies if coupons for this offer require activation, or are working on POS without activation

ignoreOnPos
boolean | null

Specifies if coupons should be visible and processed by POS.

published
boolean | null

Specifies whether offer should be published

defaultValidForDays
integer<int32> | null

Default number of days a Triggered coupon is valid for, when no explicit value is specified during assignment

Response

OK

errors
object[] | null
Last modified on August 10, 2026