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

# Get service health panels



## OpenAPI

````yaml /api/openapi.json get /api/monitoring/services
openapi: 3.1.0
info:
  description: HTTP API for the Rootprint log management platform.
  title: Rootprint API
  version: 0.4.1
servers:
  - description: Rootprint API
    url: https://example.com
security:
  - cookieAuth: []
paths:
  /api/monitoring/services:
    get:
      tags:
        - Monitoring
      summary: Get service health panels
      operationId: getApiMonitoringServices
      parameters:
        - in: query
          name: service
          schema:
            maxLength: 200
            minLength: 1
            type: string
        - description: Unix timestamp in seconds
          in: query
          name: startTs
          required: true
          schema:
            minimum: 0
            pattern: ^\d+$
            type: integer
        - description: Unix timestamp in seconds
          in: query
          name: endTs
          required: true
          schema:
            minimum: 0
            pattern: ^\d+$
            type: integer
        - in: query
          name: interval
          required: true
          schema:
            pattern: ^[1-9]\d*[smhd]$
            type: string
        - in: query
          name: endpointLimit
          schema:
            default: '10'
            maximum: 100
            minimum: 1
            pattern: ^\d+$
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceHealthResponse'
          description: Successful response
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      security:
        - personalBearer: []
        - cookieAuth: []
components:
  schemas:
    ServiceHealthResponse:
      properties:
        buckets:
          items:
            $ref: '#/components/schemas/MonitoringBucket'
          type: array
        dependencies:
          items:
            $ref: '#/components/schemas/MonitoringDependency'
          type: array
        endpoints:
          items:
            $ref: '#/components/schemas/MonitoringEndpoint'
          type: array
        failingOperations:
          items:
            $ref: '#/components/schemas/MonitoringFailingOperation'
          type: array
        intervalSeconds:
          type: number
        latencyKeysMs:
          items:
            type: number
          type: array
        serviceLatencies:
          items:
            $ref: '#/components/schemas/MonitoringServiceLatency'
          type: array
        serviceNames:
          items:
            type: string
          type: array
        services:
          items:
            $ref: '#/components/schemas/MonitoringServiceRow'
          type: array
        servicesTruncated:
          type: boolean
        summary:
          $ref: '#/components/schemas/MonitoringSummary'
        telemetryStatus:
          enum:
            - available
            - span_store_missing
          type: string
      required:
        - telemetryStatus
        - services
        - serviceNames
        - servicesTruncated
        - intervalSeconds
        - summary
        - buckets
        - latencyKeysMs
        - serviceLatencies
        - endpoints
        - failingOperations
        - dependencies
      type: object
    MonitoringBucket:
      properties:
        avg:
          anyOf:
            - type: number
            - type: 'null'
        errors:
          type: number
        keyMs:
          type: number
        p50:
          anyOf:
            - type: number
            - type: 'null'
        p95:
          anyOf:
            - type: number
            - type: 'null'
        requests:
          type: number
      required:
        - keyMs
        - requests
        - errors
        - p50
        - p95
        - avg
      type: object
    MonitoringDependency:
      properties:
        calls:
          type: number
        name:
          type: string
        p50:
          anyOf:
            - type: number
            - type: 'null'
        p95:
          anyOf:
            - type: number
            - type: 'null'
        peers:
          items:
            type: string
          type: array
        totalMillis:
          type: number
      required:
        - name
        - peers
        - calls
        - totalMillis
        - p50
        - p95
      type: object
    MonitoringEndpoint:
      properties:
        id:
          type: string
        name:
          type: string
        p50:
          anyOf:
            - type: number
            - type: 'null'
        p95:
          anyOf:
            - type: number
            - type: 'null'
        requests:
          type: number
        routeAvailable:
          type: boolean
        service:
          type: string
        totalMillis:
          type: number
      required:
        - id
        - service
        - name
        - routeAvailable
        - requests
        - totalMillis
        - p50
        - p95
      type: object
    MonitoringFailingOperation:
      properties:
        errors:
          type: number
        name:
          type: string
      required:
        - name
        - errors
      type: object
    MonitoringServiceLatency:
      properties:
        name:
          type: string
        p95:
          items:
            anyOf:
              - type: number
              - type: 'null'
          type: array
      required:
        - name
        - p95
      type: object
    MonitoringServiceRow:
      properties:
        errors:
          type: number
        name:
          type: string
        p50:
          anyOf:
            - type: number
            - type: 'null'
        p95:
          anyOf:
            - type: number
            - type: 'null'
        requests:
          type: number
      required:
        - name
        - requests
        - errors
        - p50
        - p95
      type: object
    MonitoringSummary:
      properties:
        errorSpans:
          type: number
        errors:
          type: number
        p50:
          anyOf:
            - type: number
            - type: 'null'
        p95:
          anyOf:
            - type: number
            - type: 'null'
        requests:
          type: number
      required:
        - requests
        - errors
        - errorSpans
        - p50
        - p95
      type: object
    ApiErrorBody:
      properties:
        error:
          properties:
            code:
              type: string
            details:
              items:
                properties:
                  message:
                    type: string
                  path:
                    type: string
                required:
                  - path
                  - message
                type: object
              type: array
            message:
              type: string
            requestId:
              type: string
            statusCode:
              type: number
          required:
            - code
            - message
            - statusCode
            - requestId
          type: object
      required:
        - error
      type: object
  responses:
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBody'
      description: Request validation failed
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBody'
      description: Authentication required
    Forbidden:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBody'
      description: Permission denied
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBody'
      description: Resource not found
    TooManyRequests:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBody'
      description: Rate limit exceeded
    InternalError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBody'
      description: Internal server error
    ServiceUnavailable:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBody'
      description: Upstream service unavailable
  securitySchemes:
    cookieAuth:
      in: cookie
      name: better-auth.session_token
      type: apiKey
    personalBearer:
      description: Query API key (personal or service account)
      scheme: bearer
      type: http

````