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

# Get the caller's read-only self-service summary (leave balance, timesheet, payslip dates, pending to-dos).



## OpenAPI

````yaml /api-reference/portal.v1.json get /api/v1/portal/employee/summary
openapi: 3.0.3
info:
  title: Swiss HR Easy — Employee Portal API
  version: 1.0.0
  description: >-
    Versioned contract for the employee self-service portal endpoints consumed
    by the mobile app. Generated from Zod schemas — do not edit by hand (run
    `npm run gen:openapi`).
servers:
  - url: https://{tenantHost}
    description: >-
      Per-tenant deployment host. Swiss HR Easy is single-tenant, so each
      customer install serves this contract from its own host.
security: []
tags:
  - name: profile
    description: Employee profile overview and entitlements.
  - name: leave
    description: Employee leave balances and requests.
  - name: time
    description: Employee time tracking and weekly summaries.
  - name: sick-leave
    description: Employee sick-leave reports and summaries.
  - name: payslips
    description: Employee payslips and deduction breakdowns.
  - name: compensation
    description: The caller's compensation role, salary band and placement rationale.
  - name: auth
    description: Current-session retrieval and logout for the mobile app.
  - name: holidays
    description: >-
      The days behind the vacation day count that cost less than a full day:
      public holidays, school holidays, and Betriebsferien days the caller was
      approved to work through.
paths:
  /api/v1/portal/employee/summary:
    get:
      tags:
        - summary
      summary: >-
        Get the caller's read-only self-service summary (leave balance,
        timesheet, payslip dates, pending to-dos).
      operationId: getEmployeeSummary
      responses:
        '200':
          description: >-
            The caller's self-service summary (NLE-812). `leave`, `timesheet`,
            `nextPayoutDate` and `latestPayslipPeriod` are null when no data
            exists yet; `todos.total` drives the badge count.
          content:
            application/json:
              schema:
                type: object
                required:
                  - success
                  - data
                additionalProperties: false
                properties:
                  success:
                    type: boolean
                    enum:
                      - true
                  data:
                    $ref: '#/components/schemas/PortalEmployeeSummaryDTO'
        '401':
          description: The caller is not authenticated.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
        '404':
          description: No employee record is linked to the caller's account.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
components:
  schemas:
    PortalEmployeeSummaryDTO:
      type: object
      properties:
        leave:
          nullable: true
          type: object
          properties:
            year:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            remaining:
              type: number
            entitlement:
              type: number
            used:
              type: number
            planned:
              type: number
          required:
            - year
            - remaining
            - entitlement
            - used
            - planned
          additionalProperties: false
        timesheet:
          nullable: true
          type: object
          properties:
            weekStart:
              type: string
              pattern: ^\d{4}-\d{2}-\d{2}$
            totalHours:
              type: number
            targetHours:
              type: number
            draftCount:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
          required:
            - weekStart
            - totalHours
            - targetHours
            - draftCount
          additionalProperties: false
        nextPayoutDate:
          nullable: true
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
        latestPayslipPeriod:
          nullable: true
          type: string
        todos:
          type: object
          properties:
            feedbackDrafts:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            surveyInvitations:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            onboardingOpen:
              type: boolean
            documentsMissing:
              type: boolean
            total:
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
          required:
            - feedbackDrafts
            - surveyInvitations
            - onboardingOpen
            - documentsMissing
            - total
          additionalProperties: false
      required:
        - leave
        - timesheet
        - nextPayoutDate
        - latestPayslipPeriod
        - todos
      additionalProperties: false

````