list_coupons
Retrieve a paginated list of discount coupons on your Checkout Page account. This is the only way to discover a coupon ID — take the id from here to use update_coupon.
search is a case-insensitive contains match on the coupon's label and code, so it answers "is there already a coupon for X?" before you create a duplicate with create_coupon.
Reading a coupon: the discount is either percentOff (a percentage) or amountOff (a flat amount in the smallest currency unit, paired with currency) — never both. duration is once, repeating (for durationInMonths), or forever. timesRedeemed counts redemptions so far, against maxRedemptions when one is set.
Whether a coupon actually works right now depends on several fields together, and there is no single "active" flag: deleted: true means soft deleted and dead; redeemBy in the past means expired; timesRedeemed >= maxRedemptions means exhausted. Check all three before telling a merchant a coupon is live. Soft-deleted coupons are returned by this tool — they are not filtered out.
Scoping: pageIds limits the coupon to specific pages and ticketTypeIds to specific ticket types. Empty or absent means the coupon is valid everywhere. These are IDs only — this tool does not resolve them to page or event names.
No filters beyond search. There is no way to filter by deleted, expiry, redemption count, or scope server-side. Page through and inspect those fields.
Coupons are returned sorted newest-first. Use cursor-based pagination (starting_after / ending_before) to page through large result sets. starting_after and ending_before cannot be used simultaneously. Max limit is 100, default is 10.
This tool is read-only. Use create_coupon to add one and update_coupon to change or soft delete one. A coupon's discount (code, amountOff, percentOff, currency, duration) can never be changed after creation.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of records per page (integer, max 100, default 10). | |
| search | No | Case-insensitive contains match against the coupon's label and code. Searching '10off' matches the code `10OFF`; searching 'summer' matches the label 'Summer sale'. There is no filter for redemption count, expiry, or deleted status — page through and inspect those fields instead. | |
| ending_before | No | Cursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`. | |
| starting_after | No | Cursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| total | Yes | Total number of records matching the query across all pages. | |
| has_more | Yes | Whether more records exist beyond the current page. |