---
title: "List discounts"
method: GET
path: "/v1/commerce/discounts"
tags: ["Commerce"]
---

# List discounts

`GET /v1/commerce/discounts`

The store's discounts (Shopify code and automatic discounts, WooCommerce coupons), cursor-paginated with `limit`, `cursor` and an optional `query`. Each discount lists its first 10 codes; `codeCount` has the total. Needs discounts.read.

## Query parameters

- `accountId` string, required
- `limit` integer
- `cursor` string
- `query` string

## Response `200`

Discounts listed

- object
  - `discounts` CommerceDiscount[]
    - `id` string
    - `accountId` string
    - `platform` 'shopify'
    - `title` string
    - `method` 'code' | 'automatic'
    - `type` 'percentage' | 'fixed_amount' | 'free_shipping' | 'buy_x_get_y' | 'app'
    - `codes` string[] — The first 10 codes; codeCount has the total.
    - `codeCount` integer, nullable
    - `value` union — Null for free shipping, buy-X-get-Y and app discounts.
      - object
        - `type` 'percentage'
        - `percentage` number
      - object
        - `type` 'fixed_amount'
        - `amount` CommerceMoney — An exact amount of money. The amount is a decimal string so cents are never lost to floating point.
          - `amount` string, required
          - `currency` string, required — ISO 4217 code. Never null: the store currency is filled in when the platform omits it.
        - `appliesOnEachItem` boolean
    - `appliesTo` object, nullable
      - `type` 'all' | 'products' | 'collections'
      - `productIds` string[]
      - `variantIds` string[]
      - `collectionIds` string[]
    - `minimum` object, nullable
      - `type` 'subtotal' | 'quantity'
      - `amount` CommerceMoney — An exact amount of money. The amount is a decimal string so cents are never lost to floating point.
        - `amount` string, required
        - `currency` string, required — ISO 4217 code. Never null: the store currency is filled in when the platform omits it.
      - `quantity` integer
    - `usageLimit` integer, nullable
    - `oncePerCustomer` boolean
    - `usageCount` integer
    - `startsAt` string, date-time
    - `endsAt` string, date-time, nullable
    - `status` 'active' | 'scheduled' | 'expired'
    - `platformStatus` string
    - `summary` string
    - `platformData` object, nullable
  - `nextCursor` string, nullable

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — The store has not granted this permission, or the token was revoked (code insufficient_permissions). Reconnect the store to grant the latest permissions; GET /v1/commerce/store lists what the current grant allows.
- `404` — Account not found (code account_not_found) or the resource was not found (code product_not_found or resource_not_found).
- `429` — Rate limited, either by Zernio or by the platform. Retry later.

## Changes

- **2026-09-30** `16a7b9d5373e` — 1 info
  - removed the `platform` enum value from the `details/budgetScope` response property for the response status `400`
- **2026-09-29** `69bbe3da3a18` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/commerce/discounts/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/16a7b9d5373e?raw)
