Product Discounts

Product Discounts reduce certain Product Prices.

Product Discounts apply to Embedded Prices, as well as StandalonePrices. In the case of an Embedded Price, the system stores Product Discounts in the discounted field of the Embedded Price. For StandalonePrices, the API uses the discounted field of the StandalonePrice in its current, as well as its staged representation.

In the case of StandalonePrices, Discounts for Products in a published state apply based on the current ProductData. For Products not published, the staged ProductData is used to calculate the Discount.

Product Discounts are useful for scenarios when you want to display a discounted price before adding an item to the Cart.

A maximum of 500 Product Discounts can be active at the same time.

Only one Product Discount can apply to a Product at any given time. If more than one Product Discount matches a Price, the sortOrder determines which one applies.

When you create, update, or delete a Product Discount, the Prices are updated in an eventually consistent manner. Both Embedded Prices and StandalonePrices associated to a ProductVariant are updated, regardless of the Product's priceMode value.

The time to update can vary—between a fraction of a second to several hours—depending on the following factors:

  • The number of Products and their size
  • The number of Products affected by Discount predicates
  • The number of Prices to be updated

Learn more about Product Discounts in our self-paced Product Discounts module.

Representations

ProductDiscount

id
String

Unique identifier of the ProductDiscount.

version
Int

Current version of the ProductDiscount.

key
String

User-defined unique identifier of the ProductDiscount.

MinLength: 2MaxLength: 256Pattern: ^[A-Za-z0-9_-]+$
name

Name of the ProductDiscount.

description

Description of the ProductDiscount.

Type of Discount and its corresponding value.

predicate
String
sortOrder
String

Unique decimal value between 0 and 1 (stored as String literal) defining the order of Product Discounts to apply in case more than one is applicable and active. A Product Discount with a higher value is prioritized.

isActive
Boolean

If true the Product Discount is applied to Products matching the predicate.

references
Array of Reference

References of all the resources that are addressed in the predicate.

validFrom

Date and time (UTC) from which the Discount is effective. Take Eventual Consistency into account for calculated discount values.

validUntil

Date and time (UTC) until which the Discount is effective. Take Eventual Consistency into account for calculated undiscounted values.

createdAt

Date and time (UTC) the ProductDiscount was initially created.

createdByBETA

IDs and references that created the ProductDiscount.

lastModifiedAt

Date and time (UTC) the ProductDiscount was last updated.

lastModifiedByBETA

IDs and references that last modified the ProductDiscount.

Example: json
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

ProductDiscountDraft

key
String

User-defined unique identifier for the ProductDiscount.

MinLength: 2MaxLength: 256Pattern: ^[A-Za-z0-9_-]+$
name

Name of the ProductDiscount.

description

Description of the ProductDiscount.

Type of Discount and its corresponding value.

predicate
String
sortOrder
String

Decimal value between 0 and 1 (passed as String literal) that defines the order of ProductDiscounts to apply in case more than one is applicable and active. A ProductDiscount with a higher sortOrder is prioritized. The value must be unique among all ProductDiscounts in the Project.

isActive
Boolean

Set to true to activate the ProductDiscount, set to false to deactivate it (even though the predicate matches).

validFrom

Date and time (UTC) from which the Discount is effective. Take Eventual Consistency into account for calculated discount values.

validUntil

Date and time (UTC) until which the Discount is effective. Take Eventual Consistency into account for calculated undiscounted values.

Example: json
{
"value": {
"type": "absolute",
"money": [
{
"currencyCode": "EUR",
"centAmount": 100
}
]
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534"
}

ProductDiscountPagedQueryResponse

PagedQueryResult with results containing an array of ProductDiscount.

limit
Int
offset
Int

Number of elements skipped.

count
Int

Actual number of results returned.

total
Int

Total number of results matching the query. This number is an estimation that is not strongly consistent. This field is returned by default. For improved performance, calculating this field can be deactivated by using the query parameter withTotal=false. When the results are filtered with a Query Predicate, total is subject to a limit.

results
Array of ProductDiscount

ProductDiscounts matching the query.

Example: json
{
"limit": 20,
"offset": 0,
"count": 2,
"total": 2,
"results": [
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
]
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
},
{
"id": "29cc032d-8ee3-4763-b2ab-3fe0dda22a2d",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
]
},
"predicate": "1=1",
"name": {
"en": "test-discount2"
},
"description": {
"en": "test-discount2"
},
"isActive": false,
"sortOrder": "0.9478",
"references": [],
"createdAt": "2016-02-24T10:25:04.206Z",
"lastModifiedAt": "2016-02-24T10:25:04.295Z"
}
]
}

ProductDiscountReference

id
String

Unique identifier of the referenced ProductDiscount.

typeId
String
"product-discount"

References a ProductDiscount.

Contains the representation of the expanded ProductDiscount. Only present in responses to requests with Reference Expansion for ProductDiscounts.

ProductDiscountResourceIdentifier

ResourceIdentifier to a ProductDiscount. Either id or key is required. If both are set, an InvalidJsonInput error is returned.

id
String

Unique identifier of the referenced ProductDiscount. Required if key is absent.

key
String

User-defined unique identifier of the referenced ProductDiscount. Required if id is absent.

typeId
String
"product-discount"

References a ProductDiscount.

ProductDiscountValue

Abstract parent type for the specific values, distinguished by the type field - relative, absolute, or external.

ProductDiscountValueRelative

Discounts the product price by a percentage, defined by the permyriad field.

type
String
"relative"
permyriad
Int

Fraction (per ten thousand) the price is reduced by. For example, 1000 will result in a 10% price reduction.

ProductDiscountValueAbsolute

Discounts the Product's Price by a fixed amount, defined by the money field.

type
String
"absolute"
money
Array of CentPrecisionMoney

Money values in different currencies. An absolute ProductDiscount will only match a price if this array contains a value with the same currency. For example, if it contains 10€ and 15$, the matching € price will be decreased by 10€ and the matching $ price will be decreased by 15$.

ProductDiscountValueExternal

Discounts the Product Price by allowing the client to explicitly set a discounted value. Used when setting discounts using an external service.

type
String
"external"

ProductDiscountValueDraft

Abstract parent draft type for the specific value drafts, distinguished by the type field - relative, absolute, or external.

ProductDiscountValueRelativeDraft

Discounts the Product Price by a percentage, defined by the permyriad field.

type
String
"relative"
permyriad
Int

Fraction (per ten thousand) the price is reduced by. For example, 1000 will result in a 10% price reduction.

ProductDiscountValueAbsoluteDraft

Discounts the Product Price by a fixed amount, defined by the money field.

type
String
"absolute"
money
Array of Money

Money values in different currencies. An absolute Product Discount will match a price only if the array contains a value with the same currency. For example, if it contains 10€ and 15$, the matching € price will be decreased by 10€ and the matching $ price will be decreased by 15$. If the array has multiple values of the same currency, the API returns an InvalidOperation error.

If the array is empty, the discount does not apply.

ProductDiscountValueExternalDraft

Discounts the Product Price by allowing the client to explicitly set a discounted value. Use this when setting discounts using an external service.

type
String
"external"

QueryPrice

id
String

Unique identifier of the given Price.

value

Money value of the given Price.

country

Country for which the given Price is valid.

Pattern: ^[A-Z]{2}$
customerGroup

CustomerGroup for which the given Price is valid.

channel

ProductDistribution Channel for which the given Price is valid.

validFrom

Date from which the given Price is valid.

validUntil

Date until which the given Price is valid.

discounted

DiscountedPrice you specify for the given Price.

tiers
Array of PriceTierDraft

Price tier applied when the minimum quantity for the LineItem of a ProductVariant with the related Price is reached in a Cart.

If discounted is specified, the tiered Price is ignored for a Product Variant.

custom

Custom Fields for the Price.

Get ProductDiscount

Get ProductDiscount by ID

GET
https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id}
OAuth 2.0 Scopes:
view_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

id
String

id of the ProductDiscount.

Query parameters:
expand
The parameter can be passed multiple times.
Response:
200ProductDiscountasapplication/json
Request Example:cURL
curl --get https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'
200 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

Get ProductDiscount by Key

GET
https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key}
OAuth 2.0 Scopes:
view_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

key
String

key of the ProductDiscount.

Query parameters:
expand
The parameter can be passed multiple times.
Response:
200ProductDiscountasapplication/json
Request Example:cURL
curl --get https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'
200 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

Query ProductDiscounts

GET
https://api.{region}.commercetools.com/{projectKey}/product-discounts
OAuth 2.0 Scopes:
view_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

Query parameters:
where
The parameter can be passed multiple times.
/^var[.][a-zA-Z0-9]+$/
Any string parameter matching this regular expression

Predicate parameter values.

The parameter can be passed multiple times.
sort
The parameter can be passed multiple times.
expand
The parameter can be passed multiple times.
limit
Int
offset
Int

Number of elements skipped.

withTotal
Boolean

Controls the calculation of the total number of query results. Set to false to improve query performance when the total is not needed.

Response:
Request Example:cURL
curl --get https://api.{region}.commercetools.com/{projectKey}/product-discounts -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'
200 Response Example: ProductDiscountPagedQueryResponsejson
{
"limit": 20,
"offset": 0,
"count": 2,
"total": 2,
"results": [
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
]
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
},
{
"id": "29cc032d-8ee3-4763-b2ab-3fe0dda22a2d",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
]
},
"predicate": "1=1",
"name": {
"en": "test-discount2"
},
"description": {
"en": "test-discount2"
},
"isActive": false,
"sortOrder": "0.9478",
"references": [],
"createdAt": "2016-02-24T10:25:04.206Z",
"lastModifiedAt": "2016-02-24T10:25:04.295Z"
}
]
}

Check if ProductDiscount exists

Check if ProductDiscount exists by ID

HEAD
https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id}

Checks if a ProductDiscount exists for a given id. Returns a 200 OK status if the ProductDiscount exists or a 404 Not Found otherwise.

OAuth 2.0 Scopes:
view_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

id
String

id of the ProductDiscount.

Response:
200
Request Example:cURL
curl --head https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'

Check if ProductDiscount exists by Key

HEAD
https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key}

Checks if a ProductDiscount exists for a given key. Returns a 200 OK status if the ProductDiscount exists or a 404 Not Found otherwise.

OAuth 2.0 Scopes:
view_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

key
String

key of the ProductDiscount.

Response:
200
Request Example:cURL
curl --head https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'

Check if ProductDiscount exists by Query Predicate

HEAD
https://api.{region}.commercetools.com/{projectKey}/product-discounts

Checks if a ProductDiscount exists for a given Query Predicate. Returns a 200 OK status if any ProductDiscounts match the Query Predicate, or a 404 Not Found otherwise.

OAuth 2.0 Scopes:
view_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

Query parameters:
where
The parameter can be passed multiple times.
Response:
200
Request Example:cURL
curl --head https://api.{region}.commercetools.com/{projectKey}/product-discounts -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'

Create ProductDiscount

POST
https://api.{region}.commercetools.com/{projectKey}/product-discounts
OAuth 2.0 Scopes:
manage_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

Query parameters:
expand
The parameter can be passed multiple times.
Request Body:ProductDiscountDraftasapplication/json
Response:
201ProductDiscountasapplication/json
Request Example:cURL
curl https://api.{region}.commercetools.com/{projectKey}/product-discounts -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}' \
--header 'Content-Type: application/json' \
--data-binary @- << DATA
{
"value" : {
"type" : "absolute",
"money" : [ {
"currencyCode" : "EUR",
"centAmount" : 100
} ]
},
"predicate" : "1=1",
"name" : {
"en" : "test-discount1"
},
"description" : {
"en" : "test-discount1"
},
"isActive" : false,
"sortOrder" : "0.9534"
}
DATA
201 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

Update ProductDiscount

Update ProductDiscount by ID

POST
https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id}
OAuth 2.0 Scopes:
manage_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

id
String

id of the ProductDiscount.

Query parameters:
expand
The parameter can be passed multiple times.
Request Body:
application/json
version
Int

Expected version of the ProductDiscount on which the changes should be applied. If the expected version does not match the actual version, a ConcurrentModification error will be returned.

actions

Update actions to be performed on the ProductDiscount.

Response:
200ProductDiscountasapplication/json
Request Example:cURL
curl https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}' \
--header 'Content-Type: application/json' \
--data-binary @- << DATA
{
"version" : 1,
"actions" : [ {
"action" : "changeValue",
"value" : {
"type" : "absolute",
"money" : [ {
"currencyCode" : "EUR",
"centAmount" : 100
} ]
}
} ]
}
DATA
200 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

Update ProductDiscount by Key

POST
https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key}
OAuth 2.0 Scopes:
manage_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

key
String

key of the ProductDiscount.

Query parameters:
expand
The parameter can be passed multiple times.
Request Body:
application/json
version
Int

Expected version of the ProductDiscount on which the changes should be applied. If the expected version does not match the actual version, a ConcurrentModification error will be returned.

actions

Update actions to be performed on the ProductDiscount.

Response:
200ProductDiscountasapplication/json
Request Example:cURL
curl https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}' \
--header 'Content-Type: application/json' \
--data-binary @- << DATA
{
"version" : 1,
"actions" : [ {
"action" : "changeValue",
"value" : {
"type" : "absolute",
"money" : [ {
"currencyCode" : "EUR",
"centAmount" : 100
} ]
}
} ]
}
DATA
200 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

Update actions

Set Key

action
String
"setKey"
key
String

Value to set. If empty, any existing value will be removed.

MinLength: 2MaxLength: 256Pattern: ^[A-Za-z0-9_-]+$
Example: json
{
"action": "setKey",
"key": "new-key"
}

Change Value

action
String
"changeValue"

New value to set. Must not be empty.

Example: json
{
"action": "changeValue",
"value": {
"type": "relative",
"permyriad": 2000
}
}

Change Predicate

action
String
"changePredicate"
predicate
String

New value to set. Must be a valid ProductDiscount predicate.

Example: json
{
"action": "changePredicate",
"predicate": "product.id = \"{{product-id}}\""
}

Change Is Active

action
String
"changeIsActive"
isActive
Boolean

New value to set. If set to true, the Discount will be applied to Product Prices.

Example: json
{
"action": "changeIsActive",
"isActive": false
}

Set Valid From

action
String
"setValidFrom"
validFrom

Value to set. If empty, any existing value will be removed. Take Eventual Consistency into account for calculated discount values.

Example: json
{
"action": "setValidFrom",
"validFrom": "2018-10-12T14:05:00.000Z"
}

Set Valid Until

action
String
"setValidUntil"
validUntil

Value to set. If empty, any existing value will be removed. Take Eventual Consistency into account for calculated undiscounted values.

Example: json
{
"action": "setValidUntil",
"validUntil": "2018-10-12T14:05:00.000Z"
}

Set Valid From and Until

action
String
"setValidFromAndUntil"
validFrom

Value to set. Take Eventual Consistency into account for calculated undiscounted values.

validUntil

Value to set. Take Eventual Consistency into account for calculated undiscounted values.

Example: json
{
"action": "setValidFromAndUntil",
"validFrom": "2018-10-12T14:00:00.000Z",
"validUntil": "2018-10-12T14:05:00.000Z"
}

Change Name

action
String
"changeName"
name

New value to set. Must not be empty.

Example: json
{
"action": "changeName",
"name": {
"de": "NewProductDiscountDE",
"en": "NewProductDiscountEN"
}
}

Set Description

action
String
"setDescription"
description

Value to set. If empty, any existing value will be removed.

Example: json
{
"action": "setDescription",
"description": {
"de": "New Product Discount Description DE",
"en": "New Product Discount Description EN"
}
}

Change Sort Order

action
String
"changeSortOrder"
sortOrder
String

New value to set. Must not be empty. The string value must be a number between 0 and 1. A Discount with a higher sortOrder is prioritized.

Example: json
{
"action": "changeSortOrder",
"sortOrder": "0.3"
}

Delete ProductDiscount

Delete ProductDiscount by ID

DELETE
https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id}
OAuth 2.0 Scopes:
manage_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

id
String

id of the ProductDiscount.

Query parameters:
version
Int

Last seen version of the resource.

expand
The parameter can be passed multiple times.
Response:
200ProductDiscountasapplication/json
Request Example:cURL
curl -X DELETE https://api.{region}.commercetools.com/{projectKey}/product-discounts/{id}?version={version} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'
200 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

Delete ProductDiscount by Key

DELETE
https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key}
OAuth 2.0 Scopes:
manage_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

key
String

key of the ProductDiscount.

Query parameters:
version
Int

Last seen version of the resource.

expand
The parameter can be passed multiple times.
Response:
200ProductDiscountasapplication/json
Request Example:cURL
curl -X DELETE https://api.{region}.commercetools.com/{projectKey}/product-discounts/key={key}?version={version} -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}'
200 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}

Get Matching ProductDiscount

POST
https://api.{region}.commercetools.com/{projectKey}/product-discounts/matching

This endpoint can be used to simulate which Product Discounts would be applied if a specified Product Variant had a specified Price. Given Product and Product Variant IDs and a Price, this endpoint will return the ProductDiscount that would have been applied to that Price.

If a Product Discount could not be found that could be applied to the Price of a Product Variant, a NoMatchingProductDiscountFound error is returned.

OAuth 2.0 Scopes:
view_products:{projectKey}
Path parameters:
region
String

Region in which the Project is hosted.

projectKey
String

key of the Project.

Request Body:
application/json
productId
String

ID of the specified Product.

variantId
Int

ID of the specified Product Variant.

staged
Boolean

Controls which projected representation is applied for the query. Set to true for the staged Product Projection of the specified Product Variant, set to false for the current one.

price

Specified Price of the specified Product Variant.

Response:
200ProductDiscountasapplication/json
Request Example:cURL
curl https://api.{region}.commercetools.com/{projectKey}/product-discounts/matching -i \
--header 'Authorization: Bearer ${BEARER_TOKEN}' \
--header 'Content-Type: application/json' \
--data-binary @- << DATA
"{n "productId": "123456",n "variantId": 1,n "staged": false,n "price": {n "value": {n "centAmount": 100,n "currencyCode": "EUR"n }n }n}n"
DATA
200 Response Example: ProductDiscountjson
{
"id": "d7a204f9-7746-4857-b17e-71f1235a691a",
"version": 2,
"value": {
"type": "absolute",
"money": [
{
"type": "centPrecision",
"fractionDigits": 2,
"currencyCode": "EUR",
"centAmount": 100
}
],
"id": "3544d4a3-1279-443c-8699-4220753bf6f5"
},
"predicate": "1=1",
"name": {
"en": "test-discount1"
},
"description": {
"en": "test-discount1"
},
"isActive": false,
"sortOrder": "0.9534",
"references": [],
"createdAt": "2016-02-24T09:44:57.858Z",
"lastModifiedAt": "2016-02-24T09:44:57.939Z"
}