# List customer reward ledger entries

Lists reward ledger entries for a customer. Each entry is a single movement — a reward earned (`type: REWARD`), a redemption against a reward (`type: REDEMPTION`), an unused reward swept at its expiry date (`type: REWARD_EXPIRATION`), a reward taken back after the earning capture was refunded or charged back (`type: REWARD_REVERSAL`), or a redemption given back as fresh credit after a refund or chargeback (`type: REWARD_RESTORATION`). Supports filtering by account, type, expiry date, and creation date. Results are sorted by creation date descending (newest first). See the [Rewards & Redemptions guide](/docs/guides/rewards-and-redemptions) for the full flow.
**Required scope:** customer:read

Endpoint: GET /customer/{id}/rewards
Version: 2.0
Security: accountId, apiKey

## Security:

  - `accountId` (unknown)
    apiKey in header AccountId

  - `apiKey` (unknown)
    apiKey in header ApiKey

## Path parameters:

  - `id` (string, required)
    Resource Identification

## Query parameters:

  - `cursor` (string)
    The cursor parameter is used for pagination. It specifies the pointer to the start of the next set of results in a sequence of paginated data. Typically, this is a unique identifier of the last item from the previous response. If not provided, the API fetches the first page of results.

  - `limit` (number)
    The limit parameter is used for pagination. It specifies the maximum number of entries to return in a single page of results. Max 100.

  - `account_id[]` (string)
    Filter by reward account identifier. Repeat the parameter to filter by multiple accounts.

  - `type[]` (string)
    Filter by ledger entry type. Repeat the parameter to filter by multiple types. Note that `REWARD` only matches earned rewards — credits given back after a refund or chargeback are matched by `REWARD_RESTORATION`.

  - `expiration_date` (string)
    Filter by expiry date. Accepts a single date `YYYY-MM-DD` (matches that whole day) or an interval `interval(YYYY-MM-DD,YYYY-MM-DD)`. Maximum interval span is 1 year.

  - `created_at` (string)
    Filter by creation datetime in UTC. Accepts a single datetime `YYYY-MM-DD HH:MM` (matches that whole minute) or an interval `interval(YYYY-MM-DD HH:MM,YYYY-MM-DD HH:MM)`. Maximum interval span is 1 year.

## Response 200:

  - `200` (unknown)
    OK

## Response 200 fields (application/json):

  - `metadata` (object, required)
    An object containing additional information about the response. It includes details that help manage and navigate the retrieved data.

  - `metadata.next_cursor` (string, required)
    Provides the cursor for the next set of records. This value should be used as the cursor parameter in subsequent requests to continue paginating through the data. If the cursor is an empty string or null, it indicates that there are no more results. To retrieve all available results, continue making subsequent requests until next_cursor is empty or null.
    Example: lL_j7ilk7rc

  - `metadata.count` (number, required)
    The total number of records in the current response. This field indicates the number of items returned in the current set of results.
    Example: 10

  - `data` (array, required)

  - `data.id` (string, required)
    Unique identifier for the ledger entry.
    Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890

  - `data.account_id` (string, required)
    The reward account this entry belongs to.
    Example: 458b2fc4-3092-4de3-abd4-fe1600c09420

  - `data.type` (string, required)
    The kind of movement. `REWARD` for credits earned; `REDEMPTION` for credits consumed; `REWARD_EXPIRATION` for unused credits removed from the balance at their expiry date; `REWARD_REVERSAL` for credits taken back when the capture that earned them was refunded or charged back; `REWARD_RESTORATION` for credits given back when a redemption is undone — either by a refund created with `revert.reward_redemption_reversal` or by a chargeback on the capture that redeemed them.
    Enum: "REWARD", "REDEMPTION", "REWARD_EXPIRATION", "REWARD_REVERSAL", "REWARD_RESTORATION"

  - `data.amount` (number, required)
    The absolute value of the movement. Always positive; `type` signals direction.
    Example: 10

  - `data.expiration_date` (string)
    The date after which the reward expires. Present when `type` is `REWARD`, `REWARD_EXPIRATION` or `REWARD_RESTORATION`.
    Example: 2027-01-15

  - `data.capture` (object)
    The capture associated with this entry — the capture that granted the credit (`type: REWARD`, `type: REWARD_EXPIRATION` and `type: REWARD_REVERSAL`) or the capture that consumed it (`type: REDEMPTION` and `type: REWARD_RESTORATION`). Omitted when the entry is not linked to a capture (e.g. orphaned splits).

  - `data.capture.id` (string, required)
    Unique identifier of the capture.
    Example: c6056234-a3f9-42de-b944-3ed793fcb6bb

  - `data.created_at` (string, required)
    The date and time when the movement occurred.
    Example: 2026-01-15T10:30:00Z

## Response 400:

  - `400` (unknown)
    Bad Request

## Response 400 fields (application/json):

  - `status` (string, required)

  - `message` (array, required)
    An array of human-readable messages included in the response. These messages provide detailed information about the success of the operation or explain the reasons for any failure. This field is always present in the response to ensure clarity and transparency regarding the outcome of the API request.

## Response 401:

  - `401` (unknown)
    Unauthorized

## Response 401 fields (application/json):

  - `status` (string, required)

  - `message` (array, required)
    An array of human-readable messages included in the response. These messages provide detailed information about the success of the operation or explain the reasons for any failure. This field is always present in the response to ensure clarity and transparency regarding the outcome of the API request.

## Response 403:

  - `403` (unknown)
    Forbidden

## Response 403 fields (application/json):

  - `status` (string, required)

  - `message` (array, required)
    An array of human-readable messages included in the response. These messages provide detailed information about the success of the operation or explain the reasons for any failure. This field is always present in the response to ensure clarity and transparency regarding the outcome of the API request.

## Response 403 fields (application/xml):

  - `message` (array)

## Response 404:

  - `404` (unknown)
    Not Found

## Response 404 fields (application/json):

  - `status` (string, required)

  - `message` (array, required)
    An array of human-readable messages included in the response. These messages provide detailed information about the success of the operation or explain the reasons for any failure. This field is always present in the response to ensure clarity and transparency regarding the outcome of the API request.

## Response 429:

  - `429` (unknown)
    Too Many Requests

## Response 429 fields (application/json):

  - `status` (string, required)

  - `message` (array, required)
    An array of human-readable messages included in the response. These messages provide detailed information about the success of the operation or explain the reasons for any failure. This field is always present in the response to ensure clarity and transparency regarding the outcome of the API request.

## Response 500:

  - `500` (unknown)
    Internal Server Error

## Response 500 fields (application/json):

  - `status` (string, required)

  - `message` (array, required)
    An array of human-readable messages included in the response. These messages provide detailed information about the success of the operation or explain the reasons for any failure. This field is always present in the response to ensure clarity and transparency regarding the outcome of the API request.

## Response 200 examples:

  - `Success` (unknown)
    Success

## Response 401 examples:

  - `Wrong credentials provided` (unknown)

## Response 403 examples:

  - `Wrong credentials provided` (unknown)

## Response 404 examples:

  - `Resource not found` (unknown)

## Response 429 examples:

  - `Rate limit exceeded` (unknown)

## Response 500 examples:

  - `Internal error` (unknown)

