---
title: "Get Kpi Report"
method: GET
path: "/companies/{company_id}/kpi-report"
tags: ["reporting"]
---

# Get Kpi Report

`GET /companies/{company_id}/kpi-report`

## Request

- Base URL: `https://app.zeno-works.ch` (the document declares no server; this is the origin it was published from)
- URL: `https://app.zeno-works.ch/companies/{company_id}/kpi-report`
- Auth: none declared

Snapshot KPIs + 13-week liquidity forecast, from the GL (CompanyMember).

Cash/liability balances aggregate the FY window of posted/reversed journal lines;
aging + forecast read ``gl_open_item``, pending salary batches and unpaid VAT
periods. Read-only. Explicit non-member ``company_id`` → 403.

``fiscal_year`` optional → latest FY with journal data; FY figures as of that
year's end once past. Aging and forecast anchor to today.

## Path parameters

- `company_id` string, required

## Query parameters

- `fiscal_year` integer, nullable

## Headers

- `authorization` string, nullable

## Cookies

- `access_token` string, nullable

## Response `200`

Successful Response

- KpiReportOut: Snapshot KPIs + liquidity forecast for a company, as of ``as_of``. ``current_liabilities_cents`` / the ratios are ``None`` when the chart doesn't let them be identified (a problem row explains); ``months`` is zero-filled from the FY start month through the current (partial) month.
  - `company_id` string, required
  - `as_of` string, required
  - `currency` string, required
  - `fiscal_year` integer, required
  - `fiscal_year_start` string, required
  - `fiscal_year_end` string, required
  - `cash_accounts` KpiCashAccountOut[], required
    - `account_number` string, required
    - `account_name` string, nullable
    - `balance_cents` integer, required
  - `cash_total_cents` integer, required
  - `current_liabilities_cents` integer, nullable
  - `liquidity_1` number, nullable
  - `liquidity_2` number, nullable
  - `receivables_cents` integer, required
  - `ar` KpiAgingOut, required: Open-item totals per aging bucket for one direction (AR or AP). A NULL ``due_date`` lands in ``current`` (it cannot be overdue) and is additionally memoed in ``no_due_date_cents`` — the same items form the forecast's ``unscheduled`` bucket, so the two views reconcile.
    - `current_cents` integer, required
    - `d1_30_cents` integer, required
    - `d31_60_cents` integer, required
    - `d61_90_cents` integer, required
    - `d90_plus_cents` integer, required
    - `total_cents` integer, required
    - `overdue_cents` integer, required
    - `no_due_date_cents` integer, required
  - `ap` KpiAgingOut, required: Open-item totals per aging bucket for one direction (AR or AP). A NULL ``due_date`` lands in ``current`` (it cannot be overdue) and is additionally memoed in ``no_due_date_cents`` — the same items form the forecast's ``unscheduled`` bucket, so the two views reconcile.
    - `current_cents` integer, required
    - `d1_30_cents` integer, required
    - `d31_60_cents` integer, required
    - `d61_90_cents` integer, required
    - `d90_plus_cents` integer, required
    - `total_cents` integer, required
    - `overdue_cents` integer, required
    - `no_due_date_cents` integer, required
  - `months` KpiMonthOut[], required
    - `month` string, required
    - `income_cents` integer, required
    - `expense_cents` integer, required
    - `result_cents` integer, required
  - `ytd_result_cents` integer, required
  - `vat_position` KpiVatPositionOut: The latest open/prepared VAT period's live net (negative = refund due).
    - `period_id` string, required
    - `date_from` string, required
    - `date_to` string, required
    - `status` string, required
    - `net_owed_cents` integer, required
  - `forecast` LiquidityForecastOut, required: The 13-week liquidity projection. ``unscheduled`` (NULL due dates) and ``beyond_horizon`` (dated past the last week) are excluded from the cumulative balance and surfaced as explicit pseudo-rows — nothing is silently dropped.
    - `starting_cash_cents` integer, required
    - `weeks` ForecastWeekOut[], required
      - `ar_in_cents` integer, required
      - `ap_out_cents` integer, required
      - `payroll_out_cents` integer, required
      - `vat_out_cents` integer, required
      - `net_cents` integer, required
      - `index` integer, required
      - `week_start` string, required
      - `week_end` string, required
      - `cumulative_cents` integer, required
    - `unscheduled` ForecastBucketOut, required: One flow bucket — the ``unscheduled`` / ``beyond_horizon`` pseudo-rows. ``vat_out_cents`` is signed: a refund period reduces the bucket's outflow. ``net = ar_in − ap_out − payroll_out − vat_out``.
      - `ar_in_cents` integer, required
      - `ap_out_cents` integer, required
      - `payroll_out_cents` integer, required
      - `vat_out_cents` integer, required
      - `net_cents` integer, required
    - `beyond_horizon` ForecastBucketOut, required: One flow bucket — the ``unscheduled`` / ``beyond_horizon`` pseudo-rows. ``vat_out_cents`` is signed: a refund period reduces the bucket's outflow. ``net = ar_in − ap_out − payroll_out − vat_out``.
      - `ar_in_cents` integer, required
      - `ap_out_cents` integer, required
      - `payroll_out_cents` integer, required
      - `vat_out_cents` integer, required
      - `net_cents` integer, required
  - `problems` FinancialStatementProblem[], required
    - `severity` string, required
    - `code` string, required
    - `message` string, required
    - `account_number` string, nullable

## Other responses

- `422`: Validation Error

---

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