External promotions
How to manage custom promotions via external services
Besides the promotion types that are supported out-of-the-box (buy X pay Y, fixed amount, fixed price, free gift, free shipping, and percentage discount) Commerce Layer lets you integrate any kind of promotional engine as an external promotion.
When an external promotion activates — i.e. its activation rules are met — Commerce Layer triggers a POST request to the promotion_url endpoint, sending the order payload (including its line items) in the request body.
Request
The request payload is a JSON:API compliant object you can query to perform your own computation. Aside from the target resource — orders in the specific case — some relationships are also included to avoid useless API roundtrips:
marketcustomercustomer.tagsline_itemsline_items.itemshipping_addressbilling_address
{
"data": {
"id": "wBXVhKzrnq",
"type": "orders",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
},
"included": [
{
"id": "DvlGRmhdgX",
"type": "markets",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
},
{
"id": "bGvCXzYgNB",
"type": "customers",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
},
{
"id": "YawgnfmKad",
"type": "tags",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
},
{
"id": "kdPgtRXOKL",
"type": "line_items",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
},
{
"id": "XGZwpOSrWL",
"type": "skus",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
}
{
"id": "BgnguJvXmb",
"type": "addresses",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
},
{
"id": "AlrkugwyVW",
"type": "addresses",
"links": { ... },
"attributes": { ... },
"relationships": { ... },
"meta": { ... }
},
{ ... }
]
}Response
Your service response (or error) must match the format described in the examples below.
Applying the discount to all taxable items of the order
The successful response must be a JSON object, returning at least the discount computed by the external logic. If needed, you can optionally enrich the response with some additional information, notification messages, and metadata:
On error, you must respond with an HTTP code >= 400. The response body must be a JSON object containing any other relevant error code and message:
Applying the discount to specific taxable items
The successful response must be a JSON object, returning at least the discount computed by the external logic to be applied to the specified line items. If needed, you can optionally enrich the response with some additional information, notification messages, and metadata:
On error, you must respond with an HTTP code >= 400. The response body must be a JSON object containing any other relevant error code and message:
Applying a specific discount to specific taxable items
The successful response must be a JSON object, returning at least a specific discount computed by the external logic to be applied to the specified line items. If needed, you can optionally enrich the response with some additional information, notification messages, and metadata:
On error, you must respond with an HTTP code >= 400. The response body must be a JSON object containing any other relevant error code and message:
Security
When you create a new external promotion, a shared secret is generated. We recommend verifying the callback authenticity by signing the payload with that shared secret and comparing the result with the callback signature header.
Last updated