---
title: "Get revenue rollforward"
method: POST
path: "/revenue_reports/rollforward"
tags: ["Revenue Reports"]
---

# Get revenue rollforward

`POST /revenue_reports/rollforward`

## Request

- Base URL: `https://us.api.flexprice.io/v1`
- URL: `https://us.api.flexprice.io/v1/revenue_reports/rollforward`
- Auth: API key in header `x-api-key`

Use when explaining how deferred revenue, unbilled receivable or another ledger account moved in ended months: opening balance, movements by category (invoiced, earned, adjustments, payments, refunds) and closing balance, optionally per customer, contract or performance obligation.

## Request body

- RollforwardRequest
  - `accounts` TypesLedgerAccountKey[]: defaults to [deferred_revenue]
  - `contract_ids` string[]
  - `currency` string, required
  - `customer_ids` string[]
  - `group_by` TypesRevenueReportGroupBy[]
  - `limit` integer: item rows per page; totals are never paged
  - `offset` integer
  - `period_end` string, date-time: YYYY-MM, an ended month; defaults to period_start
  - `period_start` string, date-time, required: YYYY-MM
  - `pob_ids` string[]
  - `posted_by` string: only entries posted at or before it: the books as they were then

## Response `200`

OK

- RollforwardResponse
  - `items` RollforwardRow[]: per period, account and group; empty without group_by
    - `account` 'cash' | 'accounts_receivable' | 'unbilled_receivable' | 'deferred_revenue' | 'customer_credit' | 'tax_payable' | 'revenue' | 'contra_revenue'
    - `closing` string
    - `contract_id` string
    - `customer_id` string
    - `movements` object: a missing category is 0
    - `opening` string
    - `period` string: YYYY-MM
    - `pob_id` string
  - `pagination` TypesPaginationResponse
    - `limit` integer
    - `offset` integer
    - `total` integer
  - `totals` RollforwardRow[]: per period and account, all groups
    - `account` 'cash' | 'accounts_receivable' | 'unbilled_receivable' | 'deferred_revenue' | 'customer_credit' | 'tax_payable' | 'revenue' | 'contra_revenue'
    - `closing` string
    - `contract_id` string
    - `customer_id` string
    - `movements` object: a missing category is 0
    - `opening` string
    - `period` string: YYYY-MM
    - `pob_id` string

## Other responses

- `400`: Invalid request
- `500`: Server error

## Changes

- **2026-10-29** `d3bef0889eec`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/flexprice/apis/flexprice-api/changes/revenue_reports/rollforward/post.md)

---

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