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

# Get treasury cash forecast

> Projects future cash position from historical transfer rates (gross — a movement between two of your own accounts counts on both sides). expenses_by_category / revenue_by_category are deferred (always empty). See data_availability for missing provider/sync data.



## OpenAPI

````yaml /api-reference/platform-api.json get /v2/treasury/forecast
openapi: 3.0.0
info:
  title: Range Platform API
  description: >-
    The Range Platform API for workspace management, counterparties, and
    operational tooling.
  version: 1.7.31
  contact: {}
servers:
  - url: https://api.range.org
    description: Range API Server
security:
  - Authorization: []
  - Authorization: []
tags:
  - name: Address Information
    description: Get information about a crypto address.
  - name: Transfer Enrichments
    description: Attach workspace-scoped notes and categories to transfers.
  - name: Counterparties
    description: Manage external entities, their addresses, bank accounts, and documents.
  - name: Parties
    description: >-
      The workspace entity register: the firm itself, its clients, and its
      counterparties.
paths:
  /v2/treasury/forecast:
    get:
      tags:
        - Treasury
      summary: Get treasury cash forecast
      description: >-
        Projects future cash position from historical transfer rates (gross — a
        movement between two of your own accounts counts on both sides).
        expenses_by_category / revenue_by_category are deferred (always empty).
        See data_availability for missing provider/sync data.
      operationId: getForecast
      parameters:
        - name: group
          required: false
          in: query
          description: Filter accounts by group name (exact match, case-sensitive).
          schema:
            type: string
            example: Treasury
        - name: type
          required: false
          in: query
          schema:
            example: bank
            type: string
            enum:
              - eoa
              - multisig
              - contract
              - custodian
              - exchange
              - bank
              - defi
        - name: provider
          required: false
          in: query
          schema:
            example: utila
            type: string
            enum:
              - utila
              - kraken
              - binance
              - okx
              - bybit
              - bitget
              - gate
              - kucoin
              - plaid
              - squads
              - altitude
              - coinbase
              - realms
              - wise
              - safe
              - hyperliquid
              - cubist
              - privy
              - dfns
              - anchorage
              - revolut_business
              - turnkey
              - fordefi
              - coins_ph
              - fireblocks
              - pave_bank
              - copper
              - custom
        - name: network
          required: false
          in: query
          description: Filter by account network/chain.
          schema:
            type: string
            example: ethereum
        - name: denom
          required: false
          in: query
          description: Filter balances and transfer legs by asset symbol.
          schema:
            type: string
            example: USDC
        - name: months_forward
          required: false
          in: query
          description: How many months to project forward.
          schema:
            minimum: 1
            maximum: 36
            default: 12
            type: number
        - name: lookback_months
          required: false
          in: query
          description: How many months of history to average for rates.
          schema:
            minimum: 1
            maximum: 12
            default: 3
            type: number
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryForecastResponseDto'
components:
  schemas:
    TreasuryForecastResponseDto:
      type: object
      properties:
        starting_cash_usd:
          type: number
          example: 724819.43
        avg_monthly_inflow_usd:
          type: number
          example: 18000
        avg_monthly_outflow_usd:
          type: number
          example: 47200
        net_monthly_rate_usd:
          type: number
          example: -29200
        leg_counts:
          description: >-
            Leg-level counts (and settledness) for the lookback window behind
            avg_monthly_inflow_usd/avg_monthly_outflow_usd/net_monthly_rate_usd
            above — a named, window-scoped member (RNG-6745) rather than
            flattened at the response root, where it would sit ambiguously
            beside starting_cash_usd, a point-in-time balance rather than a
            figure over this window.
          allOf:
            - $ref: '#/components/schemas/TreasuryWindowLegCountsDto'
        coverage_months:
          type: number
          nullable: true
          example: 24.8
        expenses_by_category:
          description: >-
            Deferred this sprint (RNG-4135) — always []. Categorized spend
            returns later.
          type: array
          items:
            $ref: '#/components/schemas/TreasuryCategoryAverageDto'
        revenue_by_category:
          description: >-
            Deferred this sprint (RNG-4135) — always []. Categorized revenue
            returns later.
          type: array
          items:
            $ref: '#/components/schemas/TreasuryCategoryAverageDto'
        projection:
          type: array
          items:
            $ref: '#/components/schemas/TreasuryProjectionPointDto'
        data_availability:
          $ref: '#/components/schemas/TreasuryDataAvailabilityDto'
      required:
        - starting_cash_usd
        - avg_monthly_inflow_usd
        - avg_monthly_outflow_usd
        - net_monthly_rate_usd
        - leg_counts
        - expenses_by_category
        - revenue_by_category
        - projection
        - data_availability
    TreasuryWindowLegCountsDto:
      type: object
      properties:
        leg_count:
          type: number
          example: 4
          description: >-
            Matched legs (after the SELF and denom filters) behind the USD
            figures in this response — the denominator for unpriced_leg_count
            and spot_priced_leg_count below.
        unpriced_leg_count:
          type: number
          example: 0
          description: >-
            Matched legs (within leg_count) whose USD could not be resolved —
            either no provider supplied a price at all, or a published price
            existed but fell below the valuation floor.
        spot_priced_leg_count:
          type: number
          example: 0
          description: >-
            Matched legs (within leg_count) that this response valued via a spot
            lookup because their day had not settled yet, rather than a settled
            day's published price — the provisional part of the figures above.
            Counts only pricing decisions made while producing this response: a
            leg whose usd_amount arrived already set (stored at sync time,
            supplied by the provider, or persisted by an earlier request) is
            invisible to this count even if it was itself spot-derived, since
            nothing here re-prices it to find out. Not a signal that the window
            is fully settled — a window's own settled flag (where present)
            answers that instead.
        settled:
          type: boolean
          example: false
          description: >-
            True once every day covered by this window is expected to have a
            published settled price — the window's own end is past the
            publication cutoff for its last day. False almost always means the
            window extends to now (today is never settled). Derived purely from
            the window's own bounds and elapsed time, not from whether a price
            was actually published for that day — see spot_priced_leg_count and
            unpriced_leg_count above for what this response actually priced.
      required:
        - leg_count
        - unpriced_leg_count
        - spot_priced_leg_count
        - settled
    TreasuryCategoryAverageDto:
      type: object
      properties:
        category:
          type: string
          example: Payroll
        avg_monthly_usd:
          type: number
          example: 42000
      required:
        - category
        - avg_monthly_usd
    TreasuryProjectionPointDto:
      type: object
      properties:
        month:
          type: string
          example: 2026-06
        projected_balance_usd:
          type: number
          example: 695619.43
      required:
        - month
        - projected_balance_usd
    TreasuryDataAvailabilityDto:
      type: object
      properties:
        balances:
          type: string
          enum:
            - available
            - unavailable
            - partial
            - truncated
          example: available
          description: >-
            Whether current account balances could be summed. `partial` when
            some accounts lack priced balances.
        flows:
          type: string
          enum:
            - available
            - unavailable
            - partial
            - truncated
          example: available
          description: >-
            Whether connection-transaction flows could be aggregated.
            `unavailable` when no synced history exists; `truncated` when the
            lookback exceeded the page cap.
        historical_balances:
          type: string
          enum:
            - available
            - partial
            - unavailable
          example: available
          description: >-
            Whether a point-in-time balance snapshot ~30d ago was found, out of
            all matching accounts. `partial` when some but not all matching
            accounts have a trustworthy prior snapshot. This reports
            prior-snapshot coverage only, independent of whether those accounts
            also have a current balance — see comparison.accounts_compared for
            the actual like-for-like subset. `unavailable` when no matching
            account has a prior snapshot, in which case
            comparison.total_funds_usd and its dependent fields are null.
        unpriced_asset_count:
          type: number
          example: 0
          description: >-
            Count of asset lines with usd=null that were excluded from totals
            (not silently dropped from account_count).
        notes:
          example: []
          description: Human-readable notes about missing or incomplete data.
          type: array
          items:
            type: string
      required:
        - balances
        - flows
        - historical_balances
        - unpriced_asset_count
        - notes
  securitySchemes:
    Authorization:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Authorization method required to allow user to access the api endpoints.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.