Promotions Management
ACP supports managing promotion data through the REST API. Promotions can only be submitted via the API; SFTP file upload is not supported.5.1 Promotion Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique promotion identifier |
title | string | Yes | Promotion name |
description | string | No | Detailed promotion description |
status | enum | Yes | Promotion status |
active_period | DateTimeRange | No | Active time range |
benefits | Benefit[] | Yes | List of discount types |
applies_to | ProductTarget | No | Applicable product scope |
url | URI string | No | Promotion details page URL |
Promotion Status
| Status | Description |
|---|---|
draft | Draft, not yet active |
scheduled | Scheduled, awaiting activation |
active | Currently active |
expired | Has expired |
disabled | Manually disabled |
Active Time Range
active_period uses the DateTimeRange type, containing start_time and end_time fields:
Product Targeting
applies_to uses the ProductTarget type to specify which products the promotion applies to:
variant_ids is not specified, the promotion applies to all variants of that product.
5.2 Three Discount Types
Fixed Amount Discount (AmountOffBenefit)
Percentage Discount (PercentOffBenefit)
Free Shipping (FreeShippingBenefit)
5.3 Complete Promotion Example
5.4 API Submission
Promotions are upserted via the PATCH endpoint:id: existing records are updated, non-existing records are created.
5.5 Discounts in Checkout Sessions
When an AI agent creates a Checkout Session, promotion discounts are communicated through the following fields.Discount Codes
codes array contains discount codes provided by the user.
Applied Discounts (AppliedDiscount)
| Field | Type | Description |
|---|---|---|
id | string | Discount identifier |
code | string | Discount code |
coupon | Coupon | Coupon details |
amount | Price | Discount amount |
automatic | boolean | Whether automatically applied |
start | datetime | Start time |
end | datetime | End time |
method | enum | each (per-item discount) or across (total discount) |
priority | number | Priority (lower number means higher priority) |
allocations | Allocation[] | Breakdown allocated to each line item |
Coupon Object
percent_off (percentage discount) or amount_off (fixed amount discount) modes.
Rejected Discounts (RejectedDiscount)
If a discount code is invalid or not applicable, it appears in therejected array:
Complete Discount Structure Example
5.6 Best Practices
| Practice | Description |
|---|---|
| Use stable promotion IDs | Keep the ID unchanged when updating promotions |
| Set explicit time ranges | Avoid promotions remaining in active status indefinitely |
| Update status promptly | Mark expired promotions as disabled or expired |
| Test discount calculations | Verify that minor-unit amount calculations are correct |
| Specify applicable products | Use applies_to to precisely control promotion scope |
| Price consistency | Promotion prices must match actual discounts on your website |
Next chapter: Chapter 6: Data Quality Best Practices — ID stability, URL conventions, prohibited content