Get group points ledger

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Retrieve group point redemption and reversal events for the caller's user group. The response includes a real-time group balance snapshot, per-member balances, and a paginated list of events. Use scope=user for a member's personal view (entries where they transacted or had points drawn), or scope=group for the full group history (CSR/admin use).

What this API supports

  • Two views controlled by scope: a personal member view (user) and a full group history (group).
  • Filter by event type (CROSS_MEMBER_REDEMPTION, CROSS_MEMBER_REDEMPTION_REVERSAL), date range, or a specific transactionRef.
  • Per-entry breakdown showing exactly which member's wallet was affected and by how much.
  • userRole on each entry when scope=user: TRANSACTING (caller initiated the redemption), SOURCE (caller's points were drawn by another member's transaction), or BOTH (caller both initiated and had points drawn from their own wallet).
  • Group balance and individual member balances at query time.

Example request

curl -X GET 'https://{host}/v2/customers/1003/crossMemberLedger?scope=user&pageNumber=1&pageSize=20' \
  -u USERNAME:{password} \
  -H 'Accept: application/json'
curl -X GET 'https://{host}/v2/customers/1003/crossMemberLedger?scope=group&startDate=2026-03-01T00:00:00Z&endDate=2026-04-01T00:00:00Z' \
  -u USERNAME:{password} \
  -H 'Accept: application/json'

API Quick Reference

GET /v2/customers/{id}/crossMemberLedger

Response
   └─ entity (object)
       ├─ groupDetails (object)
       │   ├─ groupId (number)
       │   ├─ groupBalance (number)
       │   ├─ memberCount (number)
       │   └─ members [] (array)
       │       ├─ customerId (number)
       │       └─ balance (number)
       ├─ pageDetails (object)
       │   ├─ pageNumber (number)
       │   ├─ pageSize (number)
       │   ├─ totalEntries (number)
       │   └─ pageCount (number)
       └─ entries [] (array)
           ├─ eventLogId (number)
           ├─ eventName (string)
           ├─ transactingCustomerId (number)
           ├─ transactionRef (string)
           ├─ createdDate (string)
           ├─ createdDateISO (string)
           ├─ netPointsOnEvent (string)
           ├─ status (string — only on CROSS_MEMBER_REDEMPTION rows)
           ├─ userRole (string — only when scope=user)
           └─ entryDetails [] (array)
               ├─ customerId (number)
               ├─ points (string)
               ├─ reversedAmount (string — only on CROSS_MEMBER_REDEMPTION rows)
               ├─ expiryBatchDate (string — ISO-8601)
               └─ status (string — only on CROSS_MEMBER_REDEMPTION rows)

Prerequisites

  • Basic authentication. Credentials must be authorised for the org that owns the customer.
  • The org must have ENABLE_CROSS_MEMBER_REDEMPTION enabled.
  • The customer must be an active member of a user group.

Resource information

Pagination supportYes (pageNumber / pageSize)
Batch supportNo

Path parameters

FieldTypeRequiredDescription
idLongYesCustomer ID of any active group member. The API resolves the caller's group from their UserGroup2 membership.

Query parameters

FieldTypeRequiredDescription
scopeEnumOptionalScope of the results. user: returns only entries where the customer was the transacting member or had points drawn from their wallet. group: returns all redemption and reversal events for the entire group. Supported values: user, group. Defaults to user.
eventNameString (CSV)OptionalFilter by event type. Supported values: CROSS_MEMBER_REDEMPTION, CROSS_MEMBER_REDEMPTION_REVERSAL. Pass multiple values as a comma-separated list. Defaults to all event types.
transactionRefStringOptionalFilter by transaction reference. Returns entries matching the given reference, including the original redemption and any associated reversal. Corresponds to the externalReferenceNumber passed at redemption time.
startDateStringOptionalStart date and time for filtering events. Date and time in ISO 8601 format. Example: 2026-03-25T11:00:00+05:30. Defaults to 30 days before the request time.
endDateStringOptionalEnd date and time for filtering events. Date and time in ISO 8601 format. Example: 2026-04-25T11:00:00+05:30. Must be after startDate. Defaults to the current time.
pageNumberIntegerOptionalPage number to retrieve. To view the first page, set the value to 1. Defaults to 1.
pageSizeIntegerOptionalNumber of ledger records to display per page. For example, if the total records are 15 and the limit is 5, the first page will display the first 5 records. The maximum supported limit is 100.
sortStringOptionalSort order for results. Supported values: createdDate:desc (newest first, default), createdDate:asc (oldest first).

Example response

{
  "groupDetails": {
    "groupId": 12345,
    "groupBalance": 1250.000,
    "memberCount": 4,
    "members": [
      { "customerId": 1001, "balance": 400.000 },
      { "customerId": 1002, "balance": 260.000 },
      { "customerId": 1003, "balance": 500.000 },
      { "customerId": 1004, "balance": 90.000 }
    ]
  },
  "pageDetails": {
    "pageNumber": 1,
    "pageSize": 20,
    "totalEntries": 1,
    "pageCount": 1
  },
  "entries": [
    {
      "eventLogId": 999821,
      "eventName": "CROSS_MEMBER_REDEMPTION",
      "transactingCustomerId": 1003,
      "transactionRef": "TXN-882291",
      "createdDate": "2026-04-01 10:30:00",
      "createdDateISO": "2026-04-01T10:30:00Z",
      "netPointsOnEvent": "-350.000",
      "status": "PARTIALLY_REVERSED",
      "entryDetails": [
        { "customerId": 1004, "points": "-10.000",  "reversedAmount": "0.000",   "expiryBatchDate": "2026-04-02T00:00:00Z", "status": "ACTIVE" },
        { "customerId": 1001, "points": "-100.000", "reversedAmount": "0.000",   "expiryBatchDate": "2026-04-05T00:00:00Z", "status": "ACTIVE" },
        { "customerId": 1002, "points": "-240.000", "reversedAmount": "150.000", "expiryBatchDate": "2026-04-10T00:00:00Z", "status": "PARTIALLY_REVERSED" }
      ]
    }
  ],
  "warnings": []
}
{
  "groupDetails": {
    "groupId": 12345,
    "groupBalance": 1250.000,
    "memberCount": 4,
    "members": [
      { "customerId": 1001, "balance": 400.000 },
      { "customerId": 1002, "balance": 260.000 },
      { "customerId": 1003, "balance": 500.000 },
      { "customerId": 1004, "balance": 90.000 }
    ]
  },
  "pageDetails": { "pageNumber": 1, "pageSize": 20, "totalEntries": 1, "pageCount": 1 },
  "entries": [
    {
      "eventLogId": 999821,
      "eventName": "CROSS_MEMBER_REDEMPTION",
      "transactingCustomerId": 1003,
      "transactionRef": "TXN-882291",
      "createdDate": "2026-04-01 10:30:00",
      "createdDateISO": "2026-04-01T10:30:00Z",
      "netPointsOnEvent": "-350.000",
      "status": "PARTIALLY_REVERSED",
      "userRole": "TRANSACTING",
      "entryDetails": [
        { "customerId": 1004, "points": "-10.000",  "reversedAmount": "0.000",   "expiryBatchDate": "2026-04-02T00:00:00Z", "status": "ACTIVE" },
        { "customerId": 1001, "points": "-100.000", "reversedAmount": "0.000",   "expiryBatchDate": "2026-04-05T00:00:00Z", "status": "ACTIVE" },
        { "customerId": 1002, "points": "-240.000", "reversedAmount": "150.000", "expiryBatchDate": "2026-04-10T00:00:00Z", "status": "PARTIALLY_REVERSED" }
      ]
    }
  ],
  "warnings": []
}

Response parameters

FieldTypeDescription
groupDetailsObjectReal-time group balance snapshot at query time.
.groupIdLongUnique identifier of the group.
.groupBalanceNumberSum of all active group members' current redeemable balances at query time.
.memberCountIntegerCount of active group members.
.membersArrayPer-member balance list.
..customerIdLongCustomer ID of the group member.
..balanceNumberCurrent individual redeemable balance for this member.
pageDetailsObjectPagination metadata for the current response.
.pageNumberIntegerCurrent page number (1-based).
.pageSizeIntegerNumber of entries on this page.
.totalEntriesIntegerTotal entries across all pages. Reflects the date-range and scope filters but may not account for the eventName filter — treat it as an upper bound when filtering by event type.
.pageCountIntegerTotal pages: ceil(totalEntries / pageSize).
entriesArrayPaginated list of redemption and reversal events.
.eventLogIdLongShared event log ID across all source-member rows of a single redemption.
.eventNameEnumType of event. Supported values: CROSS_MEMBER_REDEMPTION, CROSS_MEMBER_REDEMPTION_REVERSAL.
.transactingCustomerIdLongCustomer ID of the member who initiated the redemption.
.transactionRefStringTransaction reference. The same value appears on the original redemption and on any reversal. Corresponds to the externalReferenceNumber passed at redemption time.
.createdDateStringEvent timestamp in yyyy-MM-dd HH:mm:ss format (org timezone).
.createdDateISOStringSame timestamp in ISO 8601 format (UTC).
.netPointsOnEventStringSigned net change across the group for this event. Negative on redemption rows, positive on reversal rows.
.statusEnumAggregate status of the redemption. Only present on CROSS_MEMBER_REDEMPTION rows. Supported values: ACTIVE, REVERSED, PARTIALLY_REVERSED.
.userRoleEnumRole of the caller in this event. Only present when scope=user. Supported values: TRANSACTING (caller initiated the redemption), SOURCE (caller's points were drawn but caller did not transact), BOTH (caller initiated and also had points drawn from their own wallet).
.entryDetailsArrayPer-source-member breakdown for this event.
..customerIdLongCustomer ID of the source member whose wallet was affected.
..pointsStringSigned point change on this member's wallet. Negative on redemption rows, positive on reversal rows.
..reversedAmountStringCumulative points reversed from this member's contribution to date. Only present on CROSS_MEMBER_REDEMPTION rows.
..expiryBatchDateStringExpiry date of the points batch drawn from or restored to this member. Date and time in ISO 8601 format.
..statusEnumPer-row status. Only present on CROSS_MEMBER_REDEMPTION rows. Supported values: ACTIVE, REVERSED, PARTIALLY_REVERSED.

Error and warning codes

CodeTypeDescription
1001ErrorInvalid date format. Use ISO 8601 (e.g. 2026-03-25T11:00:00+05:30).
1002ErrorendDate is before startDate.
1003ErrorpageSize is outside the allowed range (1–100), or pageNumber is less than 1.
1004ErrorInvalid value for scope (allowed: user, group) or eventName (allowed: CROSS_MEMBER_REDEMPTION, CROSS_MEMBER_REDEMPTION_REVERSAL).
3301ErrorThe customer is not enrolled in a cross-member-eligible group.
3401ErrorThe customer does not belong to this org.
500ErrorInternal server error. Retry the request after a short delay.
Path Params
integer
required
Query Params
string
string
string
string
string
integer
integer
string
Headers
string
string
Responses

401

Unauthorized — invalid or missing credentials

Language
Credentials
Basic
base64
:
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json