---
title: "Get liability rollforward"
method: GET
path: "/v1/reports/liability-rollforward"
tags: ["Reporting"]
---

# Get liability rollforward

`GET /v1/reports/liability-rollforward`

## Request

- Base URL: `https://api.scrip.dev`
- URL: `https://api.scrip.dev/v1/reports/liability-rollforward`
- Auth: HTTP bearer

Returns the period liability rollforward decomposed by action type; lines sum exactly to closing minus opening, with no residual plug.
This report does not accept created_after or created_before.

## Query parameters

- `period_start` string, date-time, required
- `period_end` string, date-time, required
- `program_id` string, uuid
- `asset_id` string, uuid

## Response `200`

Liability rollforward

- LiabilityRollforwardResponse: Period liability rollforward results. Every line is attributed to journal action types; lines sum exactly to closing − opening per row (no plug line).
  - `data` LiabilityRollforwardRowResponse[]: Rollforward rows, one for each asset and program pair with ledger activity at or before `period_end`
    - `adjustments_net` string: ADJUSTMENT entries: signed net effect. No API operation creates ADJUSTMENT entries, so this is 0.
    - `asset_id` string, uuid: Unique identifier for this asset
    - `asset_name` string: The name people see for the asset, such as `Points`.
    - `asset_symbol` string: Ticker or symbol for this asset (e.g., `POINTS`)
    - `bucket_movements_net` string: HOLD/RELEASE/MATURITY entries: signed net effect. These move value between buckets of the same account, so this is always 0.
    - `closing_balance` string: Outstanding liability for this cell at the end of the period (ledger time up to and including `to`). It can be negative for per-program cells of assets shared across programs. The per-cell identity still holds, and asset-level totals stay exact.
    - `debited` string: DEBIT entries: amount debited from participant/group accounts (manual API debits and rule-driven debits)
    - `expired` string: EXPIRATION entries: amount expired out of participant/group accounts during the period. Expiration entries carry no program, so this is zero on every row that has a `program_id`.
    - `forfeited` string: FORFEIT entries: amount forfeited from participant/group accounts during the period
    - `holds_voided` string: VOID_PENDING entries: provisionally held amounts voided back to the issuance source during the period
    - `issuance_returns` string: Amount returned to the issuance source during the period by credits that settled for less than the amount held.
    - `issued` string: CREDIT entries: amount issued into participant/group accounts from system or program supply during the period
    - `opening_balance` string: Outstanding liability for this cell immediately before the period (ledger time < from)
    - `program_id` string, uuid, nullable: Program this activity is attributed to, through each entry's program. It is null for activity that has no program, such as lot expirations and maturities.
    - `program_name` string, nullable: Display name of the attributed program (null when program_id is null)
    - `redeemed` string: Gross amount redeemed out of participant and group accounts during the period. It is attributed to the program the redemption was requested through, which for assets shared across programs is not always the program that issued the value.
    - `redemption_receipts` string: Amount received into participant and group accounts by redemptions whose target is a group ledger entity. The value stays inside the liability.
    - `redemption_reversals` string: REVERSAL entries: amount credited back to participant/group accounts by redemption reversals during the period
    - `reversal_clawbacks` string: REVERSAL entries: amount taken back from participant and group accounts during the period. It covers event award reversals (`POST /v1/events/{event_id}/reverse`) and reversals of redemptions that targeted a group ledger entity.
    - `scale` integer: Number of decimal places for this asset; every amount in this row is rendered with exactly this many decimals
    - `transfers_net` string: TRANSFER entries: signed net effect on this cell. Both sides of a transfer are participant or group accounts in the same program, so this is always 0.
  - `pagination` PaginationResponse: Cursor details for a list. `has_more` says whether another page exists, and `next_cursor` is the value to send to get it.
    - `has_more` boolean, required: Whether more results are available beyond this page
    - `next_cursor` string, nullable, required: Cursor to fetch the next page. Null on the last page
  - `period_end` string: Period end (inclusive, RFC 3339), echoed from the request
  - `period_start` string: Period start (inclusive, RFC 3339), echoed from the request

## Other responses

- `400`: Invalid query parameters (code: validation_error)
- `401`: The API key is missing or not valid. See [Authentication](https://docs.scrip.dev/authentication).
- `429`: Too many requests. Wait the number of seconds in the `Retry-After` header, then retry. See [Limits and durations](https://docs.scrip.dev/limits#rate-limits).
- `500`: Something failed on Scrip's side. Retry the request, and quote `request_id` if it keeps failing. [Errors](https://docs.scrip.dev/errors) lists every code, and the [API introduction](https://docs.scrip.dev/api-reference/introduction) describes the error format.

---

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