---
title: "The portfolio in figures: per building, over time, and in total"
method: GET
path: "/api/v1/statistics"
tags: ["Money"]
---

# The portfolio in figures: per building, over time, and in total

`GET /api/v1/statistics`

## Request

- Base URL: `http://localhost:5180`
- URL: `http://localhost:5180/api/v1/statistics`
- Auth: API key in cookie `better-auth.session_token`

Occupancy, rent roll, arrears, value and equity, broken down per building and rolled up across the portfolio, with a twelve-month cashflow beside them. Cashflow is money that actually moved, not money that was billed. Every amount is integer cents.

## Response `200`

Building rollups, cashflow and portfolio totals.

- object
  - `ok` unknown, required
  - `data` object, required
    - `rollups` object[], required: One row per building, worst arrears first.
      - `buildingId` string, required: Stable record id, e.g. `lse_012`.
      - `units` number, required
      - `lettable` number, required
      - `letUnits` number, required
      - `occupancy` number, required: 0 when nothing is lettable, never NaN.
      - `rentRoll` integer, required: Monthly, normalised across rent frequencies.
      - `notEarning` integer, required: What the empty units would earn at their market rate.
      - `unpriced` number, required: Empty units carrying no market rent, so notEarning cannot count them.
      - `emptyUnitIds` string[], required
      - `leavingUnitIds` string[], required
      - `arrearsTotal` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `arrearsCases` number, required
      - `value` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `mortgageOutstanding` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `equity` integer, required: Money, always in integer cents. €1,250.00 is 125000.
    - `cashflow` object, required: The trailing twelve months of money actually received and actually spent.
      - `labels` string[], required: One label per month, oldest first. The other three arrays line up with it.
      - `income` integer[], required
      - `expenses` integer[], required
      - `net` integer[], required
    - `stats` object, required: The portfolio in total.
      - `buildings` number, required
      - `units` number, required
      - `lettableUnits` number, required
      - `occupiedUnits` number, required
      - `vacantUnits` number, required
      - `shortStayUnits` number, required
      - `occupancyRate` number, required: 0–1.
      - `monthlyRentRoll` integer, required: Contracted monthly rent across active long-term leases.
      - `monthlyIncomeEstimate` integer, required: Rent roll plus a trailing-12-month monthly average of short-stay net revenue.
      - `arrearsTotal` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `arrearsCases` number, required
      - `portfolioValue` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `mortgageOutstanding` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `equity` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `ltv` number, required: Mortgage outstanding ÷ portfolio value, 0–1.
      - `grossYield` number, required: Annualised: (rent roll × 12) ÷ portfolio value.
  - `meta` object, required
    - `requestId` string, required: Echoed in the x-request-id header. Quote it in a bug report.

---

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