> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fynn.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Frozen MRR figures of a snapshot

> The MRR figures of the snapshot month and of the eleven months before it, each month as its snapshot stood when this version was taken: key figures, bridge, cohorts, account movements, retention, concentration, churn by reason and committed MRR. The restatements the latest calculation found against this version are listed with their causes.

Required permission: `analytics:read`.



## OpenAPI

````yaml assets/openapi-v2-finance.json get /api/analytics/finance/snapshots/{month}/{version}
openapi: 3.0.3
info:
  title: Fynn Finanzberichte API
  version: 2026-09
  description: >-
    The finance reporting API returns the same figures as the finance pages of
    the app: MRR and its movements, Accounted MRR, cash, receivables, revenue,
    the customer base, month-end snapshots with their restatements and the Excel
    books. Every amount is an exact decimal string in one currency, never
    converted and never a float. Months are `YYYY-MM` in the time zone of the
    organisation.


    Authenticate every request with an API token of your organisation
    (`Authorization: Bearer api_...`). Reading needs `analytics:read`, taking a
    snapshot and changing the settings `analytics:write`. Every route also needs
    the finance reports to be enabled for the organisation (feature flag
    `analytics.advanced`); otherwise it answers 403 `feature-not-available`.
servers:
  - url: https://coreapi.io
    description: Production
  - url: https://preview.coreapi.io
    description: Sandbox
security:
  - ApiToken: []
tags:
  - name: Datensätze
    description: Page datasets and the MRR table.
  - name: Drill-downs und Hinweise
    description: Lines behind a cell and data-quality findings.
  - name: Snapshots
    description: Month-end snapshots and their versions.
  - name: Excel-Exporte
    description: Excel books of the finance pages.
  - name: Definitionen
    description: The versioned definitions catalogue with its changelog.
  - name: Einstellungen
    description: Organisation-wide settings of the finance figures.
paths:
  /api/analytics/finance/snapshots/{month}/{version}:
    get:
      tags:
        - Snapshots
      summary: Frozen MRR figures of a snapshot
      description: >-
        The MRR figures of the snapshot month and of the eleven months before
        it, each month as its snapshot stood when this version was taken: key
        figures, bridge, cohorts, account movements, retention, concentration,
        churn by reason and committed MRR. The restatements the latest
        calculation found against this version are listed with their causes.


        Required permission: `analytics:read`.
      operationId: getSnapshot
      parameters:
        - name: month
          in: path
          description: Month (YYYY-MM).
          required: true
          schema:
            type: string
            pattern: (19|20)\d{2}-(0[1-9]|1[0-2])
            example: 2026-08
        - name: version
          in: path
          description: Snapshot version.
          required: true
          schema:
            type: integer
            minimum: 1
            pattern: \d{1,6}
        - name: currency
          in: query
          description: 'ISO-4217 code. Default: the default currency.'
          required: false
          schema:
            type: string
        - name: scope
          in: query
          description: 'Movement scope. Default: the organisation setting.'
          required: false
          schema:
            type: string
            enum:
              - subscription
              - invoice_address
              - customer
              - organisation
      responses:
        '200':
          description: The frozen figures.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SnapshotDatasetView'
        '401':
          description: Missing or invalid authentication.
        '403':
          description: >-
            Missing permission `analytics:read` (`FRAMEWORK__ACCESS_DENIED`), or
            the finance reports are not enabled for the organisation (feature
            flag `analytics.advanced`, `type`
            https://fynn.dev/problems/feature-not-available).
          content:
            application/problem+json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Problem'
                  - $ref: '#/components/schemas/FeatureNotAvailableProblem'
        '404':
          description: >-
            No snapshot of this month and version (also for a month that is not
            in the format YYYY-MM).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: >-
            Invalid `currency` or `scope`. The body lists them in `violations`
            (`propertyPath`, `message`, `code`).
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
      security:
        - ApiToken: []
components:
  schemas:
    SnapshotDatasetView:
      description: >-
        The MRR figures of a month-end snapshot and of the snapshots of the
        eleven months before it, in the shapes of the live datasets. A month
        without any snapshot shows the current calculation and is marked in
        `frozen`; besides those months only `restatements` are read from the
        live calculation.
      properties:
        snapshot:
          description: The snapshot.
          allOf:
            - $ref: '#/components/schemas/SnapshotView'
        tenantName:
          description: Name of the organisation.
          type: string
        currency:
          description: Currency (ISO-4217).
          type: string
        scope:
          description: Movement scope.
          type: string
          enum:
            - subscription
            - invoice_address
            - customer
            - organisation
        months:
          description: The twelve months ending with the snapshot month (YYYY-MM).
          type: array
          items:
            type: string
        versions:
          description: >-
            Snapshot version used per month (the latest one taken until the
            snapshot); null when the month has none.
          type: array
          items:
            type: integer
            nullable: true
        kpis:
          description: MRR, ARR, net new MRR, quick ratio, NRR, GRR, active accounts, ARPA.
          type: array
          items:
            $ref: '#/components/schemas/KpiTileView'
        movementMonths:
          description: Bridge per month (every month with figures; see `frozen`).
          type: array
          items:
            $ref: '#/components/schemas/MovementMonthView'
        cohorts:
          description: Cohort triangle of the twelve months.
          type: array
          items:
            $ref: '#/components/schemas/CohortRowView'
        logos:
          description: >-
            Account movements per month (every month with figures; see
            `frozen`).
          type: array
          items:
            $ref: '#/components/schemas/LogoMonthView'
        retention:
          description: NRR and GRR per month (every month with figures; see `frozen`).
          type: array
          items:
            $ref: '#/components/schemas/RetentionPointView'
        concentration:
          description: Concentration at the snapshot month end.
          allOf:
            - $ref: '#/components/schemas/ConcentrationView'
        churnReasons:
          description: Lost MRR of the snapshot month by cancellation reason.
          allOf:
            - $ref: '#/components/schemas/ChurnReasonsView'
        backlog:
          description: >-
            Committed MRR at the snapshot month end. `forward` holds that month
            only and `events` is empty: forward events are not snapshotted.
          allOf:
            - $ref: '#/components/schemas/BacklogView'
        restatements:
          description: >-
            Changes found since the snapshot (latest calculation against the
            latest version of the month).
          type: array
          items:
            $ref: '#/components/schemas/RestatementRowView'
        mrrRows:
          description: >-
            MRR table rows of the snapshot, aligned with `months` (null: the
            month has no snapshot): `mrr_bop`, `mrr_eop`, `new`, `expansion`,
            `contraction`, `lost`, `resurrecting` as money, `arr_eop` (MRR × 12)
            as money, `revenue_churn_rate` and `mom_growth` as exact rates at
            scale 6, derived from the snapshot with the formulas of the live
            table.
          type: object
          additionalProperties:
            type: array
            items:
              nullable: true
              oneOf:
                - $ref: '#/components/schemas/MoneyView'
                - type: string
                  example: '0.050000'
        notSnapshotted:
          description: >-
            MRR table rows a snapshot does not hold (invoice, cash and forecast
            figures); a snapshot view shows their current values.
          type: array
          items:
            type: string
        frozen:
          description: >-
            Per month of `months`: true when the month's MRR figures come from a
            snapshot, false when the month has no snapshot at all and shows the
            current calculation ("nicht eingefroren").
          type: array
          items:
            type: boolean
        moneyFrozen:
          description: >-
            Per month of `months`: true when the month's money figures (cash in
            and out, receivables, DSO) are frozen with its snapshot (snapshots
            taken since 28.09.2026); false: the month shows the current
            calculation for these figures.
          type: array
          items:
            type: boolean
        money:
          description: >-
            Per month of `months`: the money figures frozen with the month's
            snapshot; null where `moneyFrozen` is false.
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/SnapshotMoneyMonthView'
            nullable: true
        accountingClosed:
          description: >-
            Per month of `months`: whether the month was closed in accounting
            when its snapshot was taken; null where the month has no snapshot or
            its snapshot predates 28.09.2026.
          type: array
          items:
            type: boolean
            nullable: true
        findings:
          description: >-
            Finding counts of the calculation the snapshot was taken from; null
            for a snapshot taken before 28.09.2026.
          type: array
          items:
            $ref: '#/components/schemas/FindingSummaryEntryView'
          nullable: true
      type: object
    Problem:
      type: object
      description: >-
        Error body (problem+json). `type` is the error key, e.g.
        `ANALYTICS_MRR_FINANCIALS__SNAPSHOT_MONTH_NOT_ENDED`; further keys carry
        the parameters of the error.
      properties:
        status:
          type: integer
          example: 409
        type:
          type: string
          example: ANALYTICS_MRR_FINANCIALS__SNAPSHOT_MONTH_NOT_ENDED
        title:
          type: string
          example: An error occurred
        detail:
          type: string
          description: German sentence that can be shown to the user.
      required:
        - status
        - type
        - title
        - detail
      additionalProperties: true
    FeatureNotAvailableProblem:
      type: object
      description: >-
        403 body when the finance reports are not enabled for the organisation
        (feature flag `analytics.advanced`).
      properties:
        type:
          type: string
          enum:
            - https://fynn.dev/problems/feature-not-available
        title:
          type: string
          example: Feature not available
        detail:
          type: string
          example: >-
            The requested feature is not available. Please contact customer
            support.
        featureFlags:
          type: array
          items:
            type: string
          example:
            - analytics.advanced
      required:
        - type
        - title
        - detail
        - featureFlags
      additionalProperties: true
    ValidationProblem:
      type: object
      description: '422 body: one entry per rejected field in `violations`.'
      properties:
        status:
          type: integer
          example: 422
        type:
          type: string
          example: https://tools.ietf.org/html/rfc2616#section-10
        title:
          type: string
          example: Validation Failed
        detail:
          type: string
        violations:
          type: array
          items:
            $ref: '#/components/schemas/Violation'
      required:
        - status
        - type
        - violations
      additionalProperties: true
    SnapshotView:
      description: One version of a month-end MRR snapshot.
      properties:
        id:
          description: Id.
          type: string
        month:
          description: Month (YYYY-MM).
          type: string
          example: 2026-08
        version:
          description: >-
            Version (1 = the automatic snapshot on the 1st of the following
            month).
          type: integer
          example: 1
        takenAt:
          description: When it was taken.
          type: string
          format: date-time
        takenBy:
          description: Name of the user who took it; null for the automatic snapshot.
          type: string
          nullable: true
        reason:
          description: Reason of an explicit re-snapshot.
          type: string
          nullable: true
        checksum:
          description: SHA-256 over the copied rows.
          type: string
        builtAt:
          description: Calculation the snapshot was copied from.
          type: string
          format: date-time
        alertedAt:
          description: When its restatements first exceeded the alert share.
          type: string
          format: date-time
          nullable: true
        latest:
          description: Whether this is the newest version of the month.
          type: boolean
        definitionsVersion:
          description: >-
            Version of the definitions catalogue the snapshot was taken under
            (`v1` for snapshots taken before 28.09.2026).
          type: string
          example: v2
      type: object
    KpiTileView:
      description: >-
        One key figure tile: value of `asOfMonth`, change to the previous month
        and up to twelve points of history.
      properties:
        id:
          description: >-
            Stable id of the figure (`mrr`, `arr`, `accounted_mrr`, `net_new`,
            `quick_ratio`, `active`, `arpa`, `nrr`, `grr`, `net_cash`,
            `outstanding`, `overdue`, `dso`, `dso_12m`).
          type: string
          example: mrr
        title:
          description: German title.
          type: string
          example: MRR
        valueKind:
          description: >-
            How to format the value and the change: `money`, `rate` (0.125000 =
            12.5 %), `ratio`, `count`, `days`.
          type: string
          enum:
            - money
            - rate
            - ratio
            - count
            - days
        value:
          description: >-
            The value as an exact decimal string; null when it cannot be
            computed.
          type: string
          example: '12500.00'
          nullable: true
        delta:
          description: >-
            Change to the previous month in the same unit (for rates: the
            difference of the rates); null without a comparison.
          type: string
          example: '250.00'
          nullable: true
        better:
          description: Which direction is favourable.
          type: string
          enum:
            - up
            - down
        sparkline:
          description: Up to twelve values, oldest first, ending with the value.
          type: array
          items:
            type: string
            nullable: true
        caption:
          description: >-
            Reference shown under the value (`im Zeitraum`, `heute`); null when
            the value is the month at the end of the range.
          type: string
          nullable: true
        asOfMonth:
          description: >-
            Month the value belongs to (YYYY-MM): the month at the end of its
            series; for `heute` tiles the running month. On the recurring page
            the tiles show the last COMPLETE month by default and carry the
            running month in `current`.
          type: string
          example: 2026-08
          nullable: true
        monthComplete:
          description: >-
            False when `asOfMonth` is the running month (or later): the value is
            not final ("laufend"). True for an ended month.
          type: boolean
          example: true
          nullable: true
        current:
          description: >-
            The running month next to a tile that shows the last complete month
            (recurring page); null otherwise.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/KpiCurrentView'
      type: object
    MovementMonthView:
      description: MRR bridge of one month with its reasons.
      properties:
        month:
          description: Month (YYYY-MM).
          type: string
          example: 2026-08
        bop:
          description: MRR at the start of the month.
          type: string
          example: '12000.00'
        eop:
          description: MRR at the end of the month.
          type: string
          example: '12500.00'
        steps:
          description: The five movements in bridge order.
          type: array
          items:
            $ref: '#/components/schemas/BridgeStepView'
        reasons:
          description: Reason split of the movements (non-zero entries only).
          type: array
          items:
            $ref: '#/components/schemas/ReasonEntryView'
        snapshotBop:
          description: >-
            MRR at the end of the previous month as its month-end snapshot
            reported it; null when that month has no snapshot or nothing changed
            since. Then `snapshotBop` + Σ `corrections` = `bop`.
          type: string
          example: '12100.00'
          nullable: true
        corrections:
          description: >-
            Changes to the previous month found after its snapshot, per cause (a
            subscription voided after the snapshot is `voided`, "Annulliert"):
            the bridge runs `snapshotBop` + corrections = `bop`, + steps =
            `eop`. Empty without a snapshot or change.
          type: array
          items:
            $ref: '#/components/schemas/BridgeCorrectionView'
      type: object
    CohortRowView:
      description: >-
        One cohort: the accounts whose first paying month is the cohort month
        (or quarter).
      properties:
        cohort:
          description: First month of the cohort (YYYY-MM).
          type: string
        accounts:
          description: Accounts of the cohort.
          type: integer
        startMrr:
          description: MRR at age 0.
          type: string
        cells:
          description: Cells by age.
          type: array
          items:
            $ref: '#/components/schemas/CohortCellView'
      type: object
    LogoMonthView:
      description: Account movements of one month.
      properties:
        month:
          description: Month (YYYY-MM).
          type: string
        new:
          description: New accounts.
          type: integer
        resurrecting:
          description: Resurrected accounts.
          type: integer
        lost:
          description: Lost accounts.
          type: integer
        net:
          description: New + resurrected − lost.
          type: integer
        activeEop:
          description: Paying accounts at month end.
          type: integer
      type: object
    RetentionPointView:
      description: Net and gross revenue retention over twelve months.
      properties:
        month:
          description: Month (YYYY-MM).
          type: string
        nrr:
          description: >-
            NRR as rate (1.050000 = 105 %); null without a base twelve months
            earlier.
          type: string
          nullable: true
        grr:
          description: GRR as rate; null without a base.
          type: string
          nullable: true
        cohortAccounts:
          description: Accounts paying twelve months earlier.
          type: integer
        cohortMrr:
          description: Their MRR then; null without a base.
          type: string
          nullable: true
      type: object
    ConcentrationView:
      description: Customer concentration at the end of a month.
      properties:
        month:
          description: Month (YYYY-MM).
          type: string
        total:
          description: Total MRR.
          type: string
        segments:
          description: Rank groups.
          type: array
          items:
            $ref: '#/components/schemas/ConcentrationSegmentView'
        top1Share:
          description: Share of the largest account.
          type: string
        top5Share:
          description: Share of the five largest accounts.
          type: string
        top10Share:
          description: Share of the ten largest accounts.
          type: string
        above5Count:
          description: Accounts with more than 5 % of the MRR.
          type: integer
        top:
          description: The ten largest accounts.
          type: array
          items:
            $ref: '#/components/schemas/ConcentrationEntryView'
      type: object
    ChurnReasonsView:
      description: >-
        Lost MRR of the range by cancellation reason; reconciles to the lost
        movement.
      properties:
        total:
          description: Lost MRR of the range.
          type: string
        accounts:
          description: Lost accounts (per month).
          type: integer
        entries:
          description: Entries, largest first.
          type: array
          items:
            $ref: '#/components/schemas/ChurnReasonEntryView'
      type: object
    BacklogView:
      description: >-
        Contractually committed MRR as of the current month and the known MRR of
        the next twelve months.
      properties:
        asOfMonth:
          description: The month the figures refer to (YYYY-MM).
          type: string
          example: 2026-09
        committed:
          description: Σ MRR × remaining fixed contract months.
          type: string
          example: '54000.00'
        averageRemainingMonths:
          description: >-
            Average remaining fixed term in months, weighted with MRR (one
            decimal).
          type: string
          example: '4.3'
        accounts:
          description: Paying accounts with a fixed remaining term.
          type: integer
          example: 42
        buckets:
          description: Committed amount by remaining term.
          type: array
          items:
            $ref: '#/components/schemas/BacklogBucketView'
        forward:
          description: >-
            First point: MRR at the end of `asOfMonth`; then the twelve
            following months.
          type: array
          items:
            $ref: '#/components/schemas/ForwardPointView'
        events:
          description: Known changes of the following months.
          type: array
          items:
            $ref: '#/components/schemas/BacklogEventView'
      type: object
    RestatementRowView:
      description: A change of a snapshotted figure found by the latest calculation.
      properties:
        month:
          description: Month (YYYY-MM).
          type: string
        level:
          description: '`cell` (figure of the table) or `account`.'
          type: string
          enum:
            - cell
            - account
        subject:
          description: >-
            Figure (`mrr_eop`, `lost_mrr`, `reasons.<type>.<reason>`, …) or
            account key.
          type: string
        customer:
          description: Customer of an account line.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/RefView'
        snapshotValue:
          description: Value in the snapshot.
          type: string
        currentValue:
          description: Value now.
          type: string
        delta:
          description: Now − snapshot.
          type: string
        cause:
          description: >-
            Cause: `voided`, `pause_changed`, `segment_added`,
            `segment_removed`, `contract_end_changed`, `price_history_changed`,
            `quantity_changed`, `discount_changed`, `source_repair`.
          type: string
          nullable: true
        causeLabel:
          description: German label of `cause`.
          type: string
          example: Vertragsende geändert
          nullable: true
        changedAt:
          description: When the change was recorded, when known.
          type: string
          format: date-time
          nullable: true
      type: object
    MoneyView:
      description: >-
        A money amount. `amount` is an exact decimal string with two decimal
        places (net, excluding VAT, unless stated otherwise); `currency` is the
        ISO-4217 code.
      properties:
        amount:
          description: >-
            Exact decimal amount with two decimal places, dot as separator.
            Negative amounts carry a leading minus.
          type: string
          example: '1234.56'
        currency:
          description: ISO-4217 currency code.
          type: string
          example: EUR
      type: object
    SnapshotMoneyMonthView:
      description: >-
        The money figures of one month as frozen with its snapshot: cash in and
        out, net cash, receivables at the month end (decimal amounts in the
        dataset currency) and DSO (days).
      properties:
        month:
          description: Month (YYYY-MM).
          type: string
          example: 2026-08
        collected:
          description: Cash collected in the month ("Zahlungseingang").
          type: string
          example: '1250.00'
        refunded:
          description: >-
            Money out in the month ("Zahlungsausgang": refunds, chargebacks,
            payouts).
          type: string
          example: '0.00'
        net:
          description: Collected − money out.
          type: string
          example: '1250.00'
        receivables:
          description: Open receivables at the month end.
          type: string
          example: '4042.61'
        dso3m:
          description: DSO over three months (days); null without invoices.
          type: string
          example: '29.8'
          nullable: true
        dso12m:
          description: DSO over twelve months (days); null without invoices.
          type: string
          example: '31.2'
          nullable: true
      type: object
    FindingSummaryEntryView:
      description: Number of data quality findings of one code.
      properties:
        code:
          description: Finding code.
          type: string
        label:
          description: >-
            German name of the code (the one catalog; the code itself for an
            unknown code).
          type: string
        severity:
          description: Severity.
          type: string
          enum:
            - error
            - warning
            - info
        count:
          description: Findings.
          type: integer
      type: object
    Violation:
      type: object
      properties:
        propertyPath:
          type: string
          example: to
        message:
          type: string
          example: Der Zeitraum darf höchstens 36 Monate umfassen.
        code:
          type: string
          example: analytics.mrr_financials.range_too_long
      required:
        - propertyPath
        - message
        - code
    KpiCurrentView:
      description: >-
        The running month of a key figure tile whose value shows the last
        complete month: the value so far and its change to the previous month.
      properties:
        asOfMonth:
          description: Month of the value (YYYY-MM), the running month.
          type: string
          example: 2026-09
        value:
          description: >-
            The value so far as an exact decimal string (unit as the tile); null
            when it cannot be computed.
          type: string
          example: '5279.33'
          nullable: true
        delta:
          description: >-
            Change to the previous month in the tile's unit; null where the tile
            compares complete months only (Accounted MRR) or without a
            comparison.
          type: string
          example: '1916.00'
          nullable: true
        monthComplete:
          description: 'Always false: the month has not ended.'
          type: boolean
          example: false
      type: object
    BridgeStepView:
      description: One step of the MRR bridge of a month.
      properties:
        key:
          description: 'Movement: `new`, `expansion`, `resurrecting`, `contraction`, `lost`.'
          type: string
          enum:
            - new
            - expansion
            - resurrecting
            - contraction
            - lost
        value:
          description: 'Amount with display sign: contraction and lost are negative.'
          type: string
          example: '-120.00'
        accounts:
          description: Accounts with this movement.
          type: integer
          example: 3
      type: object
    ReasonEntryView:
      description: Amount of one movement reason in a month.
      properties:
        movement:
          description: Movement the reason belongs to.
          type: string
          enum:
            - new
            - expansion
            - resurrecting
            - contraction
            - lost
        reason:
          description: >-
            Reason (`contract_start`, `price_change`, `quantity_change`,
            `discount_start`, `pause`, `contract_end`, `voided`, …).
          type: string
          example: price_change
        amount:
          description: Signed amount (decreases negative).
          type: string
          example: '45.00'
        accounts:
          description: Accounts of the movement whose change carries this reason.
          type: integer
          example: 2
        label:
          description: >-
            German name of the reason, the same as in the MRR table's "davon"
            rows (`reasonLabels`).
          type: string
          example: Preisänderung
      type: object
    BridgeCorrectionView:
      description: >-
        A correction of the bridge: a change to the previous month found after
        its month-end snapshot, per cause (e.g. `voided`, "Annulliert").
      properties:
        key:
          description: Restatement cause.
          type: string
          enum:
            - voided
            - pause_changed
            - segment_added
            - segment_removed
            - contract_end_changed
            - price_history_changed
            - quantity_changed
            - discount_changed
            - source_repair
        label:
          description: German name of the cause, the same as on the restatement rows.
          type: string
          example: Annulliert
        value:
          description: >-
            Signed amount: the change of the previous month's MRR at its end
            since the snapshot.
          type: string
          example: '-100.00'
      type: object
    CohortCellView:
      description: One cell of the cohort triangle.
      properties:
        age:
          description: Months since the cohort month (0 = start).
          type: integer
        month:
          description: Month of the cell (YYYY-MM).
          type: string
        mrr:
          description: MRR of the cohort in that month.
          type: string
        retention:
          description: MRR / MRR at age 0 as rate.
          type: string
          nullable: true
      type: object
    ConcentrationSegmentView:
      description: Share of one rank group in the MRR.
      properties:
        key:
          description: 'Group: `top1`, `top2_5`, `top6_10`, `rest`.'
          type: string
          enum:
            - top1
            - top2_5
            - top6_10
            - rest
        label:
          description: German label.
          type: string
        amount:
          description: MRR of the group.
          type: string
        share:
          description: Share as rate; the four shares add up to exactly 1.
          type: string
        accounts:
          description: Accounts in the group.
          type: integer
      type: object
    ConcentrationEntryView:
      description: One of the ten largest accounts.
      properties:
        rank:
          description: Rank (1 = largest).
          type: integer
        customer:
          description: Customer of the account.
          allOf:
            - $ref: '#/components/schemas/RefView'
        mrr:
          description: MRR at month end.
          type: string
        share:
          description: Share of the total MRR as rate.
          type: string
        change:
          description: Change compared with three months earlier.
          type: string
      type: object
    ChurnReasonEntryView:
      description: Lost MRR of one cancellation reason.
      properties:
        code:
          description: >-
            Cancellation reason code; `pause` = paused, `voided` = voided
            subscription, null = no reason given.
          type: string
          nullable: true
        label:
          description: >-
            German label (the reason name of the organisation, `Pausiert`,
            `Annulliert`, `Ohne Angabe`).
          type: string
        amount:
          description: Lost MRR (positive).
          type: string
        accounts:
          description: Lost accounts (per month).
          type: integer
        share:
          description: Share of the lost MRR as rate; all shares add up to exactly 1.
          type: string
      type: object
    BacklogBucketView:
      description: Committed MRR of the accounts in one band of remaining fixed term.
      properties:
        key:
          description: 'Band: `lt3` (under 3 months), `3to6`, `6to12` (up to 12), `gt12`.'
          type: string
          enum:
            - lt3
            - 3to6
            - 6to12
            - gt12
        amount:
          description: Committed amount (MRR × remaining months).
          type: string
          example: '4500.00'
      type: object
    ForwardPointView:
      description: Known MRR at the end of one month.
      properties:
        month:
          description: Month (YYYY-MM).
          type: string
          example: 2026-10
        mrr:
          description: MRR at the end of the month from the contract data known today.
          type: string
          example: '12400.00'
      type: object
    BacklogEventView:
      description: A known future change of MRR.
      properties:
        id:
          description: Stable id of the event line.
          type: string
          example: end:2026-11:0199c0de-0000-7000-8000-000000000001
        month:
          description: Month of the change (YYYY-MM).
          type: string
          example: 2026-11
        kind:
          description: >-
            `end` (contract end), `price` (price change, summed per month and
            product), `discount_end`, `ramp` (planned contract change),
            `trial_end`, `start` (planned start), `other`.
          type: string
          enum:
            - end
            - price
            - discount_end
            - ramp
            - trial_end
            - start
            - other
        customer:
          description: Customer of the account; null for summed price changes.
          nullable: true
          allOf:
            - $ref: '#/components/schemas/RefView'
        accounts:
          description: Affected accounts.
          type: integer
          example: 1
        product:
          description: Product of a price change; null otherwise.
          type: string
          nullable: true
        amount:
          description: Effect on MRR, signed.
          type: string
          example: '-99.00'
        cancellationReason:
          description: >-
            Cancellation reason code of a contract end; null otherwise or
            without a reason.
          type: string
          nullable: true
      type: object
    RefView:
      description: >-
        Reference to a customer, subscription, product or invoice: id, number
        and display name where they exist.
      properties:
        id:
          description: Id (UUID).
          type: string
          nullable: true
        number:
          description: >-
            Human-readable number (customer number, subscription number, invoice
            number).
          type: string
          nullable: true
        name:
          description: Display name.
          type: string
          nullable: true
      type: object
  securitySchemes:
    ApiToken:
      type: http
      scheme: bearer
      description: >-
        API token of the organisation. Send it as Authorization: Bearer api_...
        The token is bound to exactly one organisation.

````