Skip to content

List discounts

The discounts.list operation: GET /api/v1/discounts in the REST API and the discounts_list tool in the MCP server.

GET/api/v1/discounts

Lists applied coupons (discounts) in the request's mode, newest first: each with the coupon, the promotion code it was redeemed with, the customer and subscription it belongs to, the window it applies in (start to end, null = forever) and its status now. Filter by customerId, subscriptionId or couponId.

Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page).

At a glance

  • REST: GET /api/v1/discounts
  • MCP tool: discounts_list
  • Operation ID: discounts.list
  • Scope: Brand
  • Permission: subscriptions:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Pagination: limit (at most 100) and starting_after
  • Authentication: API key with the subscriptions:read scope
  • Since: M5

Request

Query parameters

FieldTypeRequiredDescription
customerIdcus_… IDNoOnly this customer's discounts.
subscriptionIdsub_… IDNoOnly this subscription's discounts.
couponIdcpn_… IDNoOnly discounts of this coupon.
limitinteger (1 to 100)No
starting_afterdisc_… IDNo

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].iddisc_… ID
data[].object"discount"
data[].brandIdbrd_… ID
data[].livemodeboolean
data[].couponIdcpn_… ID
data[].promotionCodeIdstring or null
data[].customerIdcus_… ID
data[].subscriptionIdstring or nullThe subscription it belongs to, or null for a customer-level discount.
data[].startdate-time
data[].enddate-time or nullWhen it stops applying (exclusive), or null for forever.
data[].redeemedAtdate-time or nullWhen its redemption was counted.
data[].statusone of scheduled, active, endedscheduled before start, active, or ended from end on.
data[].createdAtdate-time
data[].updatedAtdate-time
has_moreboolean
next_cursordisc_… ID or null

Examples

A subscription's discounts

HTTP
GET /api/v1/discounts?subscriptionId=sub_01m4tx5nj8emwbyf7y9vcf47z5
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "disc_01m4tx5nj8emwbyf7y9vcf47z3",
      "object": "discount",
      "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4",
      "livemode": false,
      "couponId": "cpn_01m4tx5nj8emwbyf7y9vcf47z0",
      "promotionCodeId": "promo_01m4tx5nj8emwbyf7y9vcf47z2",
      "customerId": "cus_01m4tx5nj8emwbyf7y9vcf47z4",
      "subscriptionId": "sub_01m4tx5nj8emwbyf7y9vcf47z5",
      "start": "2026-10-13T12:00:00.000Z",
      "end": "2027-01-13T12:00:00.000Z",
      "redeemedAt": "2026-10-13T12:00:00.000Z",
      "status": "active",
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A filter or pagination value is malformed.Fix the fields listed in details.issues and send the request again.
permission_denied403You can't see this brand's subscriptions.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, scope_required, resource_not_found, dry_run_not_supported, rate_limited, internal_error.