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

# Get portfolio dashboard

> Returns portfolio-level risk, delinquency, and freshness metrics for the requested business date. A business date the snapshot producer has not measured is refused with 503, never answered with a zeroed page: the caller should retry, not conclude the book is empty.



## OpenAPI

````yaml /es/openapi/v3-current/lender.yaml get /api/v1/dashboard/portfolio
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    Code-first OpenAPI 3.1 surface for the Lender service. Routes that move
    money are at-most-once per X-Idempotency: when one answers 5xx, the
    X-Idempotency-Fenced response header says whether that key is now refusing
    resends (true) or free to retry (false or absent). See
    docs/contracts/money-route-idempotency.md.
  license:
    name: Lerian Studio General License
  title: Lender API
  version: 1.0.0
servers:
  - url: https://lender.sandbox.lerian.net
security:
  - BearerAuth: []
tags:
  - description: >-
      Caller session projection: validated subject and effective permissions for
      the presented token.
    name: Session
  - description: >-
      Ledger accounting operations: journal entries and accrual postings for
      loan accounts.
    name: Accounting
  - description: >-
      Loan application intake and lifecycle: submission, decisioning, and
      status.
    name: LoanApplications
  - description: >-
      Loan product catalog: definition, versioning, and activation of lending
      products.
    name: LoanProducts
  - description: >-
      Loan account servicing operations: balances, schedules, and account-level
      actions.
    name: Loan Accounts
  - description: >-
      Portfolio dashboard read operations: aggregated portfolio and performance
      views.
    name: Dashboard
  - description: >-
      Jurisdiction registry: supported jurisdiction profiles and their
      capabilities.
    name: Jurisdictions
  - description: >-
      Jurisdiction-specific loan application operations (Brazil origination
      surface).
    name: Loan Applications
  - description: >-
      Tax computation operations for jurisdiction-specific lending (e.g. Brazil
      IOF).
    name: Tax
  - description: >-
      Brazil consignado privado operations: contract lifecycle, exclusion
      repair, and compensating adjustments.
    name: Consignado
  - description: >-
      Credit-instrument document template registry: versioned drafting and
      publication of CCB clausulado.
    name: DocumentTemplates
paths:
  /api/v1/dashboard/portfolio:
    get:
      tags:
        - Dashboard
      summary: Get portfolio dashboard
      description: >-
        Returns portfolio-level risk, delinquency, and freshness metrics for the
        requested business date. A business date the snapshot producer has not
        measured is refused with 503, never answered with a zeroed page: the
        caller should retry, not conclude the book is empty.
      operationId: getPortfolioDashboard
      parameters:
        - description: >-
            Business date (YYYY-MM-DD); defaults to the current business day in
            Brazil (UTC-3).
          explode: false
          in: query
          name: asOf
          schema:
            description: >-
              Business date (YYYY-MM-DD); defaults to the current business day
              in Brazil (UTC-3).
            examples:
              - '2026-06-14'
            format: date
            type: string
        - description: Filter by loan product identifiers (repeat to pass multiple).
          explode: true
          in: query
          name: productIds
          schema:
            description: Filter by loan product identifiers (repeat to pass multiple).
            examples:
              - - 550e8400-e29b-41d4-a716-446655440001
            items:
              format: uuid
              type: string
            maxItems: 100
            type:
              - array
              - 'null'
        - description: >-
            Filter by loan product version identifiers (repeat to pass
            multiple).
          explode: true
          in: query
          name: productVersionIds
          schema:
            description: >-
              Filter by loan product version identifiers (repeat to pass
              multiple).
            examples:
              - - 550e8400-e29b-41d4-a716-446655440002
            items:
              format: uuid
              type: string
            maxItems: 100
            type:
              - array
              - 'null'
        - description: Delinquency bucket code.
          explode: false
          in: query
          name: bucketCode
          schema:
            description: Delinquency bucket code.
            enum:
              - current
              - 1_30
              - 31_60
              - 61_90
              - 91_plus
              - par30
              - par60
              - par90
            examples:
              - par30
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioDashboardHumaBody'
          description: OK
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unprocessable Entity
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Internal Server Error
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Service Unavailable
components:
  schemas:
    PortfolioDashboardHumaBody:
      additionalProperties: false
      properties:
        asOfDate:
          description: Business date the metrics were computed for (RFC3339, UTC midnight).
          examples:
            - '2026-06-14T12:00:00Z'
          format: date-time
          type: string
        delinquencyDistribution:
          description: Loan count and exposure broken down by delinquency bucket.
          items:
            $ref: '#/components/schemas/DashboardBucketHumaBody'
          type:
            - array
            - 'null'
        drillDown:
          description: >-
            Per-loan delinquency rows for the requested bucket (empty when
            none).
          items:
            $ref: '#/components/schemas/DashboardDrillDownRow'
          type:
            - array
            - 'null'
        freshness:
          $ref: '#/components/schemas/DashboardFreshnessHuma'
          description: >-
            Provenance of the metrics: snapshot identity, staleness, and
            freshness policy.
        summary:
          $ref: '#/components/schemas/DashboardSummaryHumaBody'
          description: >-
            Portfolio-level exposure, volume, and PAR roll-up for the business
            date.
        trend:
          description: Month-by-month historical series leading up to the business date.
          items:
            $ref: '#/components/schemas/DashboardTrendPointHuma'
          type:
            - array
            - 'null'
      required:
        - asOfDate
        - summary
        - delinquencyDistribution
        - drillDown
        - freshness
        - trend
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upstream:
          $ref: '#/components/schemas/Upstream'
          description: >-
            RFC 9457 extension member: the error a proxied third-party provider
            reported. Absent unless the emitting service explicitly surfaced
            one.
      type: object
    DashboardBucketHumaBody:
      additionalProperties: false
      properties:
        bucketCode:
          description: >-
            Delinquency bucket code (one of current, 1_30, 31_60, 61_90,
            91_plus, par30, par60, par90).
          examples:
            - 1_30
          type: string
        bucketLabel:
          description: Human-readable label for the bucket (e.g. "1-30 days").
          type: string
        exposureAmount:
          description: >-
            Outstanding exposure aggregated for this bucket (decimal string,
            two-decimal scale).
          examples:
            - '75000.00'
          type: string
        loanCount:
          description: Number of active loans falling into this bucket.
          examples:
            - 42
          format: int64
          type: integer
      required:
        - bucketCode
        - bucketLabel
        - loanCount
        - exposureAmount
      type: object
    DashboardDrillDownRow:
      additionalProperties: false
      properties:
        assignedOfficerId:
          description: >-
            Authenticated subject of the loan officer assigned to the loan, or
            empty on a system-originated contract, which has no human officer.
            Whatever the identity provider issues as the subject: not
            necessarily a UUID.
          examples:
            - officer-xyz
          type: string
        assignedOfficerName:
          description: Display name of the assigned loan officer.
          type: string
        borrowerId:
          description: Borrower identifier (UUID) who holds the loan.
          examples:
            - 550e8400-e29b-41d4-a716-446655440011
          format: uuid
          type: string
        bucketCode:
          description: >-
            Delinquency bucket the loan falls into (one of current, 1_30, 31_60,
            61_90, 91_plus, par30, par60, par90).
          examples:
            - 31_60
          type: string
        daysOverdue:
          description: >-
            Number of days past the earliest unpaid due date as of the business
            date.
          examples:
            - 45
          format: int64
          type: integer
        earliestUnpaidDueDate:
          description: >-
            Due date of the oldest unpaid installment driving the delinquency
            (RFC3339, UTC).
          examples:
            - '2026-06-14T12:00:00Z'
          format: date-time
          type: string
        exposureAmount:
          description: >-
            Outstanding exposure on this loan (decimal string, two-decimal
            scale).
          examples:
            - '12500.00'
          type: string
        loanId:
          description: Loan account identifier (UUID) for this delinquent row.
          examples:
            - 550e8400-e29b-41d4-a716-446655440010
          type: string
        productId:
          description: Loan product identifier (UUID) the loan was originated under.
          examples:
            - 550e8400-e29b-41d4-a716-446655440013
          type: string
        productVersionId:
          description: Loan product version identifier (UUID) governing this loan's terms.
          examples:
            - 550e8400-e29b-41d4-a716-446655440014
          type: string
      required:
        - loanId
        - borrowerId
        - assignedOfficerId
        - assignedOfficerName
        - productId
        - productVersionId
        - bucketCode
        - daysOverdue
        - earliestUnpaidDueDate
        - exposureAmount
      type: object
    DashboardFreshnessHuma:
      additionalProperties: false
      properties:
        generatedAt:
          description: Timestamp when the snapshot was generated (RFC3339, UTC).
          examples:
            - '2026-06-14T12:00:00Z'
          format: date-time
          type: string
        isStale:
          description: True when the snapshot is older than the freshness policy allows.
          type: boolean
        policyCode:
          description: Code of the freshness policy applied to evaluate staleness.
          type: string
        policyPersistedAt:
          description: >-
            Timestamp when the active freshness policy was last persisted
            (RFC3339, UTC).
          examples:
            - '2026-06-14T12:00:00Z'
          format: date-time
          type: string
        snapshotAsOfDate:
          description: Business date the source snapshot was computed for (RFC3339, UTC).
          examples:
            - '2026-06-14T12:00:00Z'
          format: date-time
          type: string
        snapshotId:
          description: Identifier (UUID) of the snapshot the metrics were read from.
          examples:
            - 550e8400-e29b-41d4-a716-446655440020
          type: string
        source:
          description: >-
            Origin of the metrics; always "snapshot", because a business date
            the producer has not measured is refused with 503 rather than
            answered with zeros.
          type: string
        stalenessReason:
          description: Explanation of why the data is considered stale; omitted when fresh.
          type: string
      required:
        - snapshotId
        - snapshotAsOfDate
        - generatedAt
        - source
        - isStale
        - policyCode
        - policyPersistedAt
      type: object
    DashboardSummaryHumaBody:
      additionalProperties: false
      properties:
        activeLoanCount:
          description: Number of active (non-closed) loans in the portfolio.
          examples:
            - 1240
          format: int64
          type: integer
        currentExposure:
          description: >-
            Outstanding exposure on non-delinquent (current) loans (decimal
            string, two-decimal scale).
          examples:
            - '1100000.00'
          type: string
        delinquentExposure:
          description: >-
            Outstanding exposure on delinquent loans (decimal string,
            two-decimal scale).
          examples:
            - '134567.89'
          type: string
        delinquentLoanCount:
          description: Number of active loans currently in a delinquent bucket.
          examples:
            - 86
          format: int64
          type: integer
        disbursementVolume:
          description: >-
            Principal disbursed over the period (decimal string, two-decimal
            scale).
          examples:
            - '250000.00'
          type: string
        outstandingExposure:
          description: >-
            Total outstanding principal balance across active loans (decimal
            string, two-decimal scale).
          examples:
            - '1234567.89'
          type: string
        par30:
          description: >-
            Portfolio-at-risk ratio for 30+ days overdue, as a decimal fraction
            string (e.g. 0.05 = 5%, two-decimal scale).
          examples:
            - '0.05'
          type: string
        par60:
          description: >-
            Portfolio-at-risk ratio for 60+ days overdue, as a decimal fraction
            string (e.g. 0.05 = 5%, two-decimal scale).
          examples:
            - '0.03'
          type: string
        par90:
          description: >-
            Portfolio-at-risk ratio for 90+ days overdue, as a decimal fraction
            string (e.g. 0.05 = 5%, two-decimal scale).
          examples:
            - '0.02'
          type: string
        repaymentVolume:
          description: >-
            Principal repaid over the period (decimal string, two-decimal
            scale).
          examples:
            - '180000.00'
          type: string
      required:
        - outstandingExposure
        - currentExposure
        - delinquentExposure
        - disbursementVolume
        - repaymentVolume
        - par30
        - par60
        - par90
        - activeLoanCount
        - delinquentLoanCount
      type: object
    DashboardTrendPointHuma:
      additionalProperties: false
      properties:
        asOfDate:
          description: >-
            Business date the trend point was computed for (RFC3339, UTC
            midnight).
          examples:
            - '2026-06-14T12:00:00Z'
          format: date-time
          type: string
        delinquentExposure:
          description: >-
            Outstanding exposure on delinquent loans for the month (decimal
            string, two-decimal scale).
          examples:
            - '134567.89'
          type: string
        delinquentLoanCount:
          description: Number of active loans in a delinquent bucket during the month.
          examples:
            - 86
          format: int64
          type: integer
        disbursementVolume:
          description: >-
            Principal disbursed during the month (decimal string, two-decimal
            scale).
          examples:
            - '250000.00'
          type: string
        month:
          description: Calendar month of the trend point in YYYY-MM format.
          examples:
            - 2026-06
          type: string
        outstandingExposure:
          description: >-
            Total outstanding principal balance for the month (decimal string,
            two-decimal scale).
          examples:
            - '1234567.89'
          type: string
        par30:
          description: >-
            Portfolio-at-risk ratio for 30+ days overdue, as a decimal fraction
            string (e.g. 0.05 = 5%, two-decimal scale).
          examples:
            - '0.05'
          type: string
        par60:
          description: >-
            Portfolio-at-risk ratio for 60+ days overdue, as a decimal fraction
            string (e.g. 0.05 = 5%, two-decimal scale).
          examples:
            - '0.03'
          type: string
        par90:
          description: >-
            Portfolio-at-risk ratio for 90+ days overdue, as a decimal fraction
            string (e.g. 0.05 = 5%, two-decimal scale).
          examples:
            - '0.02'
          type: string
        repaymentVolume:
          description: >-
            Principal repaid during the month (decimal string, two-decimal
            scale).
          examples:
            - '180000.00'
          type: string
      required:
        - month
        - asOfDate
        - outstandingExposure
        - delinquentExposure
        - disbursementVolume
        - repaymentVolume
        - par30
        - par60
        - par90
        - delinquentLoanCount
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    Upstream:
      additionalProperties: false
      properties:
        code:
          description: The upstream provider's own error code, verbatim.
          examples:
            - E4001
          type: string
        message:
          description: >-
            The upstream provider's own error message, verbatim (bounded, never
            its raw response body).
          examples:
            - account not found at provider
          type: string
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: JWT bearer token issued by the identity provider.
      scheme: bearer
      type: http

````