> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brand-wallet.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List coupons

> Return the coupons belonging to a BrandWallet customer, optionally filtered to a single wallet card.

`GET /v1/customers/:id/coupons` returns the coupons belonging to the given customer in your organization, as a JSON array. When `card` (a customerpass id from [GET /v1/customers/find](/api/find-customer)) is provided, only the coupons defined on that card are returned; otherwise all of the customer's coupons are returned.

```bash theme={null}
GET $BASE_URL/v1/customers/:id/coupons
```

## Request headers

<ParamField header="Authorization" type="string" required>
  Your active Bearer token: `Bearer <accessToken>`.
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>
  Customer id.
</ParamField>

## Query parameters

<ParamField query="card" type="string">
  Selected card (customerpass id). Filters coupons to those defined on that card.
</ParamField>

## Response fields (200 OK)

The response is a JSON array. Each element represents one coupon instance.

<ResponseField name="id" type="string">
  Coupon instance id. Use it as `:couponId` on redeem, or as `reward` on transactions.
</ResponseField>

<ResponseField name="coupon" type="object">
  Coupon summary.

  <Expandable title="coupon fields">
    <ResponseField name="name" type="string">
      Coupon name.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="code" type="string">
  Coupon code, when one is assigned. Optional.
</ResponseField>

<ResponseField name="type" type="string">
  Coupon type, e.g. `discount` or `product`. Optional.
</ResponseField>

<ResponseField name="discountAmount" type="number">
  Discount value. Interpreted as a percentage when `isPercent` is true. Optional.
</ResponseField>

<ResponseField name="isPercent" type="boolean">
  Whether `discountAmount` is a percentage. Optional.
</ResponseField>

<ResponseField name="maxDiscountAmount" type="number">
  Cap for percentage discounts. Optional.
</ResponseField>

<ResponseField name="includesModifiers" type="boolean">
  Whether product modifiers are included in the discount. Optional.
</ResponseField>

<ResponseField name="products" type="object">
  Which products the coupon applies to. Present on product-scoped coupons.

  <Expandable title="products fields">
    <ResponseField name="quantity" type="number">
      How many items the coupon covers.
    </ResponseField>

    <ResponseField name="productIds" type="string[]">
      Product opaque ids the coupon applies to.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="issued" type="object">
  Where the coupon was issued (`branch`, `user`). Optional.
</ResponseField>

<ResponseField name="issuedAt" type="string">
  When the coupon was issued (ISO 8601). Optional.
</ResponseField>

<ResponseField name="expiresAt" type="string">
  Expiry time (ISO 8601). Optional.
</ResponseField>

<ResponseField name="redeemed" type="object">
  Where the coupon was redeemed (`branch`, `user`). Present on redeemed coupons.
</ResponseField>

<ResponseField name="redeemedAt" type="string">
  When the coupon was redeemed (ISO 8601). Present on redeemed coupons.
</ResponseField>

<ResponseField name="status" type="string">
  One of `active`, `redeemed`, `disabled`.
</ResponseField>

<RequestExample>
  ```bash Request theme={null}
  curl --request GET \
    --url "$BASE_URL/v1/customers/3d8ec956-de2a-4d43-9c1e-74475b153362/coupons?card=41dd8263-288e-4b55-bf2e-6a82995a0441" \
    --header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  [
    {
      "id": "906550fd-dcf5-4aed-a80e-03e8939fc2b4",
      "coupon": { "name": "10% Discount" },
      "code": "500265",
      "type": "discount",
      "discountAmount": 10,
      "isPercent": true,
      "maxDiscountAmount": 25,
      "issuedAt": "2026-04-21T12:19:19.037Z",
      "expiresAt": "2026-09-09T12:14:08.511Z",
      "status": "active"
    },
    {
      "id": "499e8e25-47e3-409c-90cd-97ee2bffe66e",
      "coupon": { "name": "Free Coffee Coupon" },
      "code": "431825",
      "type": "product",
      "discountAmount": 100,
      "isPercent": true,
      "products": {
        "quantity": 1,
        "productIds": ["4221450", "4221453", "4221456"]
      },
      "issuedAt": "2026-04-21T12:19:19.037Z",
      "status": "active"
    }
  ]
  ```

  ```json 400 Bad Request theme={null}
  {
    "statuscode": 400,
    "errorcode": 400,
    "message": "_card_not_found",
    "description": "",
    "timestamp": 1754040000000,
    "path": "/v1/customers/.../coupons",
    "method": "GET"
  }
  ```
</ResponseExample>
