---
title: "Returns the latest known forecast and granted purchase points for each order."
method: GET
path: "/v1/pvt/Reports/ListPurchasePoints"
tags: ["Reports"]
---

# Returns the latest known forecast and granted purchase points for each order.

`GET /v1/pvt/Reports/ListPurchasePoints`

## Request

- Base URL: `https://api.bonifiq.com.br`
- URL: `https://api.bonifiq.com.br/v1/pvt/Reports/ListPurchasePoints`
- Auth: HTTP basic

## Data availability
            
Data comes from the latest completed daily snapshot, not a live calculation. Check HasPublishedSnapshot,
SnapshotStartedAt and SnapshotCompletedAt to identify its availability and age. Without a published
snapshot, Items is empty and HasPublishedSnapshot is false. The report must be enabled for the tenant.
            
## Date range
            
Both from and to filter OrderPlacementDate: the date and time the order was placed in the source platform.
They do not filter the point grant date, expected availability date, cancellation date or snapshot date.
Both boundaries are inclusive and converted to UTC before comparison. Times are preserved; the API does
not expand dates to the start or end of the day. Send ISO 8601 timestamps with Z or an explicit UTC offset.
For example, from=2026-09-01T00:00:00Z and to=2026-09-01T23:59:59.9999999Z cover September 1 in UTC.
A to value of 2026-09-01T00:00:00Z includes only midnight at that boundary, not the rest of September 1.
URL-encode a positive offset's plus sign as %2B.
            
## Forecast and granted values
            
- Pending items contain Forecast and no Grant.
- Granted items contain Grant and preserve Forecast when the order appeared as pending in an earlier snapshot.
- Historical grants may not have a Forecast.
- Grant keeps the original persisted granted values; NetPoints, NetCashback and Reversal reflect later reversals.
            
Grant.Points and Grant.Cashback are gross historical values. Grant.Base and Grant.Campaigns represent
remaining net contributions after reversals, relative to NetPoints. Historical attribution may be incomplete;
on full reversal Grant.Campaigns is empty. Base is null when historical details cannot establish the base
contribution. A winning advanced scenario has zero Base and its Campaigns contain the full contribution
of the winning rules. Cashback components are rounded independently and may not sum to the total.
            
## Combining filters and pagination
            
Supplied filters are combined with AND. Omitted optional filters do not restrict the result.
Campaign and attribution filters match Forecast allocations for Pending orders and Granted allocations for
Granted orders. Campaign and attribution criteria must match the same allocation.
Matching orders retain all their allocations and totals. Nonempty campaignKeys take precedence over campaignIds.
Summary and TotalItemCount cover all matching orders; Items contains only the requested page, ordered by
OrderPlacementDate descending, then internal order ID descending.

## Query parameters

- `from` string, date-time
- `to` string, date-time
- `state` 0 | 1: 0 = Granted 1 = Pending
- `isOrderReadyToGrant` boolean, nullable
- `isCancelledOrReversed` boolean, nullable
- `orderOriginalId` string, nullable
- `customerOriginalId` string, nullable
- `campaignIds` integer[], nullable
- `attributionSource` 0 | 1: 0 = Exact 1 = Inferred
- `pageNumber` integer
- `pageSize` integer
- `campaignKeys` object[], nullable
  - `CampaignId` integer
  - `CampaignSource` 0 | 1: 0 = Legacy 1 = AdvancedRule

## Response `200`

Snapshot metadata, a summary of all matching orders, and the requested page of orders with forecast, grant, reversal and campaign allocation details.

- ReportPurchasePointsResponse
  - `HasPublishedSnapshot` boolean
  - `SnapshotStartedAt` string, date-time, nullable
  - `SnapshotCompletedAt` string, date-time, nullable
  - `LatestRunStatus` string, nullable
  - `StatusMessage` string, nullable
  - `IsInitialLoadComplete` boolean
  - `HasPendingWork` boolean
  - `LastSuccessfulSyncAt` string, date-time, nullable
  - `Summary` ReportPurchasePointsSummary
    - `PendingPoints` integer
    - `PendingCashback` number
    - `PendingOrderCount` integer
    - `GrantedPoints` integer
    - `GrantedCashback` number
    - `GrantedOrderCount` integer
    - `CancelledOrReversedPoints` integer
    - `CancelledOrReversedCashback` number
    - `CancelledOrReversedOrderCount` integer
  - `Items` object[]
    - `State` string
    - `IsCancelledOrReversed` boolean
    - `OrderOriginalId` string, nullable
    - `OrderState` string
    - `OrderPlacementDate` string, date-time
    - `OrderCompletedDate` string, date-time, nullable
    - `OrderCancelledDate` string, date-time, nullable
    - `OrderTotal` number
    - `Customer` ReportPurchasePointCustomer
      - `OriginalId` string, nullable
      - `PublicId` string, nullable
      - `Name` string, nullable
      - `Email` string, nullable
      - `Document` string, nullable
      - `Phone` string, nullable
    - `Forecast` ReportPurchasePointForecast
      - `Base` ReportPurchasePointBase
        - `Points` integer
        - `Cashback` number
      - `CalculatedAt` string, date-time, nullable
      - `AvailableAt` string, date-time, nullable
      - `IsReadyToGrant` boolean
      - `Points` integer
      - `Cashback` number
      - `Campaigns` object[]
        - `CampaignSource` string
        - `CampaignId` integer
        - `CampaignName` string
        - `CampaignType` string, nullable
        - `BonusPoints` integer
        - `BonusCashback` number
        - `AttributionSource` string
    - `Grant` ReportPurchasePointGrant
      - `Base` ReportPurchasePointBase
        - `Points` integer
        - `Cashback` number
      - `PointId` integer
      - `GrantedAt` string, date-time, nullable
      - `Points` integer
      - `Cashback` number
      - `NetPoints` integer
      - `NetCashback` number
      - `IsCashbackEstimated` boolean
      - `Reversal` ReportPurchasePointReversal
        - `Points` integer
        - `Cashback` number
        - `IsFull` boolean
      - `Campaigns` object[]
        - `CampaignSource` string
        - `CampaignId` integer
        - `CampaignName` string
        - `CampaignType` string, nullable
        - `BonusPoints` integer
        - `BonusCashback` number
        - `AttributionSource` string
  - `TotalItemCount` integer
  - `PageSize` integer
  - `PageNumber` integer
  - `HasNextPage` boolean

## Changes

- **2026-09-16** `f4426a94af33`: 5 info
  - added the new optional `query` request parameter `campaignKeys`
  - added the optional property `Items/items/oneOf[#/components/schemas/ReportPurchasePointItem]/Forecast/oneOf[#/components/schemas/ReportPurchasePointForecast]/Base` to the response with the `200` status
  - added the optional property `Items/items/oneOf[#/components/schemas/ReportPurchasePointItem]/Forecast/oneOf[#/components/schemas/ReportPurchasePointForecast]/Campaigns/items/oneOf[#/components/schemas/ReportPurchasePointCampaignAllocation]/CampaignSource` to the response with the `200` status
  - added the optional property `Items/items/oneOf[#/components/schemas/ReportPurchasePointItem]/Grant/oneOf[#/components/schemas/ReportPurchasePointGrant]/Base` to the response with the `200` status
  - …1 more
- **2026-09-10** `7b78f045941d`: 4 info
  - added the optional property `HasPendingWork` to the response with the `200` status
  - added the optional property `IsInitialLoadComplete` to the response with the `200` status
  - added the optional property `LastSuccessfulSyncAt` to the response with the `200` status
  - added the optional property `StatusMessage` to the response with the `200` status
- **2026-09-03** `e93f66e2824a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/bonifiq/apis/bonifiq-private-apis/changes/v1/pvt/Reports/ListPurchasePoints/get.md)

---

[API](https://skmtc.dev/bonifiq/apis/bonifiq-private-apis.md) - [All operations](https://skmtc.dev/bonifiq/apis/bonifiq-private-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/bonifiq/apis/bonifiq-private-apis/revisions/bac0977b23d5?raw)
