---
search:
  tags:
    - Promotions
    - PUT
seo:
  description: >-
    Updates an existing promotion. Reference for the PUT /promotions/{id}
    endpoint in the Bolder API v2.
sidebar:
  label: Update a promotion
  badge: PUT
title: Update a promotion
type: openapi-operation
---
Updates an existing promotion.

`PUT /promotions/{id}`

**Request body** (`application/json`, required)

- `shop_id` (integer, required) — ID of the shop (required on create)
- `name` (string, required)
- `status` (string)
- `cumulative` (boolean) — Whether this promotion can stack with others. Defaults to \`true\`.
- `discount_type` (string, required)
- `discount` (number, required) — Discount value — a percentage (0–100) or a fixed amount in cents.
- `activation_mode` (string, required) — How the promotion is activated. \`code\` requires a coupon code; \`auto\` applies automatically to eligible orders; \`fulfillment\` activates for a specific fulfillment method; \`payment\` activates for a specific payment method.
- `code` (string) — Coupon code (required when \`activation\_mode\` is \`code\`).
- `fulfillment_method` (integer) — Fulfillment method ID (required when \`activation\_mode\` is \`fulfillment\`).
- `payment_method_id` (integer) — Payment method ID (required when \`activation\_mode\` is \`payment\`).
- `usage_limit` (integer) — Maximum total redemptions. Unlimited if omitted.
- `per_user_limit` (integer) — Maximum redemptions per customer. Unlimited if omitted.
- `starts_at` (string<date-time>)
- `expires_at` (string<date-time>)
- `price_range_from` (integer) — Minimum order subtotal in cents for the promotion to apply.
- `price_range_to` (integer) — Maximum order subtotal in cents for the promotion to apply.
- `product_range_from` (integer) — Minimum number of qualifying products required in the cart.
- `product_range_to` (integer) — Maximum number of qualifying products allowed in the cart.
- `product_discount_group_id` (integer) — ID of the group whose products receive the discount.
- `product_discount_group_type` (string)
- `product_discount_group_filter_mode` (string) — Which items within the discount group receive the discount.
- `product_count_group_id` (integer) — Group used to count qualifying products (for count-gated discounts).
- `product_count_group_type` (string)
- `price_list_id` (integer) — Restrict the promotion to orders using this price list.
- `apply_tag` (string) — Tag to apply to the order when this promotion is used.

Request body example:

```json
{
  "name": "Summer Sale Extended",
  "discount": 25
}
```

**Responses**

- `200` — Promotion updated
- `404` — Promotion not found

Response example, 200:

```json
{
  "id": 20,
  "name": "Summer Sale Extended",
  "discount": 25,
  "_links": {
    "self": {
      "href": "https://api.onbolder.com/v2/promotions/20"
    }
  }
}
```
