update_coupon
Update an existing coupon in your Checkout Page account.
Only the fields you supply are changed; omitted fields are left as-is. Send null for maxRedemptions or redeemBy to remove that limit. rules is replaced wholesale rather than merged - send every rule you want, or an empty array to make the coupon work everywhere.
What cannot be changed: the discount itself. code, amountOff, percentOff, currency, duration, and durationInMonths are fixed once a coupon exists, because they are mirrored into Stripe. To change a discount, soft delete this coupon (deleted: true) and create a replacement with create_coupon.
Coupons created before 2025-10-04 cannot be updated at all — their redemption limits are synced with Stripe and the API returns a 400 saying so.
How scoping works:
ruleslists where the coupon works and what it discounts:[{ pageId, appliesTo, priceIds, ticketTypeIds, bumpProductIds }]. Omit it (or send an empty list) for a coupon that discounts the whole order on every checkout page and event.A coupon works on any page a rule names. Several rules on one page are combined with OR. An event can't mix
ticketsandticketsAndAddOnsrules.Checkout pages:
wholeOrder(the main product at any price and every order bump),prices(applies when the customer buys one ofpriceIds, discounting that price only),pricesAndBumps(applies only when the customer buys one ofpriceIdsAND one ofbumpProductIds, discounting both).Events:
wholeOrder(every ticket and add-on),tickets(applies when the customer buys one ofticketTypeIds, discounting those tickets only),ticketsAndAddOns(applies only when the customer buys one ofticketTypeIdsAND one ofbumpProductIds, discounting both).priceIdsare theids of the page's main product'sprices(fromget_product), not Stripe price ids.bumpProductIdsare products of order bumps or add-ons on that page. LeavepriceIds,ticketTypeIdsorbumpProductIdsempty for every price, ticket type, bump or add-on on the page, including ones added later. A page with no bumps or add-ons cannot usepricesAndBumpsorticketsAndAddOns.When no rule matches the order, the code is accepted but discounts nothing. Setup fees and ticket fees join with
appliesToSetupFeeandappliesToTicketFees.pageIdsandticketTypeIdsare deprecated: userules. They are still accepted withoutrules(each page whole order, or tickets on an event with picked ticket types).Without
rules,pageIdsreplaces the rules with whole-order rules for those pages (an empty list makes the coupon work everywhere), andticketTypeIdssent withoutpageIdsmust belong to the coupon's pages. A coupon whose rules go beyond onewholeOrderrule, or oneticketsrule with pickedticketTypeIds, per page refusespageIdsandticketTypeIdswith a 400: sendrulesinstead.
This tool modifies live data. Every change applies to live checkouts at once. There is no undo, because the previous values are not kept. Setting deleted: true stops the coupon working at checkout immediately.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Internal name for the coupon. | |
| rules | No | Where the coupon works and what it discounts, one rule per page. A coupon works on a page when any of its rules names that page, and on each page the rules are combined with OR (an event cannot mix `tickets` and `ticketsAndAddOns` rules). Omit `rules` (and `pageIds`), or send an empty list, for a coupon that discounts the whole order on every checkout page and event. Replaces every stored rule; an empty list makes the coupon work everywhere. | |
| deleted | No | Set true to soft delete the coupon. It stops working at checkout but its data and redemption history are retained. | |
| pageIds | No | Deprecated: use `rules`. The checkout pages and events this coupon can be used on, each discounting the whole order. Accepted only without `rules`. In responses, the pages named by `rules`. Replaces the stored rules with whole-order rules for these pages; an empty array makes the coupon work everywhere. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` rule, or one `tickets` rule with picked `ticketTypeIds`, per page: send `rules` instead. | |
| couponId | Yes | The ID of the coupon to update. Use `list_coupons` first if you need to discover the coupon ID by code or label. | |
| redeemBy | No | The ISO datetime that this coupon must be used before. Send `null` to remove the expiry. | |
| ticketTypeIds | No | Deprecated: use `rules`. Ticket types of events in `pageIds`: on such an event the coupon discounts only those tickets. Accepted only without `rules`. In responses, every ticket type named by `rules`. Without `pageIds`, checked against the pages already on the coupon. Refused with a 400 when the coupon's rules go beyond one `wholeOrder` rule, or one `tickets` rule with picked `ticketTypeIds`, per page. | |
| maxRedemptions | No | The total number of times this coupon can be redeemed across all customers. Doesn't limit a single customer from redeeming multiple times. Send `null` to remove the limit. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes |