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

# Get subscription growth (non-financial)

> Variant of the business dashboard with an explicit money-free allowlist. Accessible to any authenticated user with the dashboard module. Scope is taken from the resolved tenant (subdomain or x-tenant-slug header); the optional clientId is just a customer filter, not a tenant override.



## OpenAPI

````yaml /generated/specs/finance.json get /api/v1/analytics/subscription-growth
openapi: 3.0.0
info:
  title: Raul API - Finanzas
  description: >-
    Facturas, boletas, ejecuciones de billing, cuentas por pagar y medios de
    pago.
  version: 2.0.0
  contact: {}
servers:
  - url: https://api.raul.ugps.io
    description: Production
security: []
tags: []
paths:
  /api/v1/analytics/subscription-growth:
    get:
      tags:
        - Analytics - Dashboard
      summary: Get subscription growth (non-financial)
      description: >-
        Variant of the business dashboard with an explicit money-free allowlist.
        Accessible to any authenticated user with the dashboard module. Scope is
        taken from the resolved tenant (subdomain or x-tenant-slug header); the
        optional clientId is just a customer filter, not a tenant override.
      operationId: BusinessDashboardController_getSubscriptionGrowth
      parameters:
        - name: start
          required: true
          in: query
          description: Start date (inclusive) YYYY-MM-DD
          schema:
            type: string
            example: '2026-01-01'
        - name: end
          required: true
          in: query
          description: End date (inclusive day, exclusivo en cómputo) YYYY-MM-DD
          schema:
            example: '2026-12-31'
            type: string
        - name: granularity
          required: false
          in: query
          description: Granularidad de la serie
          schema:
            default: month
            type: string
            enum:
              - month
              - quarter
              - year
        - name: compare
          required: false
          in: query
          description: Comparación explícita (yoy = mismo período año anterior)
          schema:
            default: none
            type: string
            enum:
              - none
              - yoy
        - name: timezone
          required: false
          in: query
          description: Zona horaria para los cortes de período
          schema:
            default: America/Santiago
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionGrowthResponseDto'
        '400':
          description: Invalid date range
        '403':
          description: Missing resolved tenant (fail-closed)
      security:
        - bearerAuth: []
components:
  schemas:
    SubscriptionGrowthResponseDto:
      type: object
      properties:
        meta:
          $ref: '#/components/schemas/SubscriptionGrowthMetaDto'
        kpis:
          $ref: '#/components/schemas/SubscriptionGrowthKpisDto'
        series:
          type: array
          items:
            $ref: '#/components/schemas/SafeSeriesDataPointDto'
        compareSeries:
          type: array
          items:
            $ref: '#/components/schemas/SafeSeriesDataPointDto'
      required:
        - meta
        - kpis
        - series
    SubscriptionGrowthMetaDto:
      type: object
      properties:
        granularity:
          type: string
          enum:
            - month
            - quarter
            - year
        period:
          $ref: '#/components/schemas/GrowthPeriodInfoDto'
        compare:
          type: string
          enum:
            - none
            - yoy
        comparePeriod:
          $ref: '#/components/schemas/GrowthPeriodInfoDto'
        isPartialPeriod:
          type: boolean
        daysElapsed:
          type: number
        daysTotal:
          type: number
        timezone:
          type: string
      required:
        - granularity
        - period
        - compare
        - isPartialPeriod
        - timezone
    SubscriptionGrowthKpisDto:
      type: object
      properties:
        activeSubsEom:
          $ref: '#/components/schemas/SafeMetricValueDto'
        newSubs:
          $ref: '#/components/schemas/SafeMetricValueDto'
        canceledSubs:
          $ref: '#/components/schemas/SafeMetricValueDto'
        netGrowth:
          $ref: '#/components/schemas/SafeMetricValueDto'
        churnedCustomers:
          $ref: '#/components/schemas/SafeMetricValueDto'
        newCustomers:
          $ref: '#/components/schemas/SafeMetricValueDto'
      required:
        - activeSubsEom
        - newSubs
        - canceledSubs
        - netGrowth
        - churnedCustomers
        - newCustomers
    SafeSeriesDataPointDto:
      type: object
      properties:
        period:
          type: string
        activeSubsEom:
          type: number
          nullable: true
        newSubs:
          type: number
          nullable: true
        canceledSubs:
          type: number
          nullable: true
        netGrowth:
          type: number
          nullable: true
        churnedCustomers:
          type: number
          nullable: true
      required:
        - period
        - activeSubsEom
        - newSubs
        - canceledSubs
        - netGrowth
        - churnedCustomers
    GrowthPeriodInfoDto:
      type: object
      properties:
        start:
          type: string
        end:
          type: string
      required:
        - start
        - end
    SafeMetricValueDto:
      type: object
      properties:
        value:
          type: number
          nullable: true
        delta:
          type: number
          nullable: true
        deltaPct:
          type: number
          nullable: true
      required:
        - value
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Token de sesión Better Auth para rutas de backoffice; las rutas de
        portal usan su token propio.

````

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