LionSpaceFIS REST API

Public REST API from the Penn State Office of Physical Plant exposing the university's facilities/space data (the successor to the legacy FIS Facilities Information System). Provides buildings, rooms, campuses, buildingEvents, and roomEvents entities with filtering, wildcard, and comparison operators, plus a health endpoint. Confirmed publicly reachable (GET /fis-api/v1/campuses and /fis-api/health both return 200).

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

pennsylvania-state-university-fis.yaml Raw ↑
openapi: 3.0.3
info:
  title: LionSpaceFIS REST API
  description: >-
    Public REST API from the Penn State Office of Physical Plant (OPP) exposing
    the university's facilities and space data, the successor to the legacy FIS
    Facilities Information System. Exposes buildings, rooms, campuses,
    buildingEvents, and roomEvents entities with filtering, wildcard, and
    comparison operators, plus a health endpoint. This OpenAPI description was
    reconstructed from the public HTML documentation and from live, observed
    responses of the running service (appVersion 1.14.0); the provider does not
    publish a machine-readable specification of its own.
  version: 1.14.0
  contact:
    name: Penn State Office of Physical Plant
    url: https://apps.opp.psu.edu/fis-api/
servers:
  - url: https://apps.opp.psu.edu/fis-api/v1
    description: Production v1 API
  - url: https://apps.opp.psu.edu/fis-api
    description: Service root (health endpoint)
tags:
  - name: Campuses
    description: Penn State campus reference data.
  - name: Buildings
    description: University buildings and their facility attributes.
  - name: Rooms
    description: Rooms within buildings.
  - name: Events
    description: Change events for buildings and rooms.
  - name: Health
    description: Service health and status.
paths:
  /campuses:
    get:
      tags: [Campuses]
      summary: List campuses
      description: Returns the list of Penn State campuses known to the facilities system.
      operationId: listCampuses
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: A list of campuses.
          headers:
            X-Total-Count:
              description: Total number of matching records (pagination metadata).
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Campus'
  /buildings:
    get:
      tags: [Buildings]
      summary: List buildings
      description: >-
        Returns buildings with their facility attributes. Supports filtering on
        properties using comparison operators such as :eq, :ne, :ge, :le, :gt,
        :lt, :like, and :ilike (e.g. name:ilike=lab).
      operationId: listBuildings
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
        - name: name
          in: query
          description: Filter by building name, optionally with an operator suffix.
          required: false
          schema:
            type: string
        - name: status
          in: query
          description: Filter by building status (e.g. ACTV).
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of buildings.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Building'
  /rooms:
    get:
      tags: [Rooms]
      summary: List rooms
      description: >-
        Returns rooms within buildings. Supports filtering by building id, floor,
        and other properties using the same comparison operators as buildings.
      operationId: listRooms
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
        - name: floor
          in: query
          description: Filter by room floor.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of rooms.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Room'
  /buildingEvents:
    get:
      tags: [Events]
      summary: List building change events
      description: >-
        Returns change events for buildings. Events are reported once daily to
        avoid redundant updates. Event codes include A (add) and U (update).
      operationId: listBuildingEvents
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: A list of building change events.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BuildingEvent'
  /roomEvents:
    get:
      tags: [Events]
      summary: List room change events
      description: >-
        Returns change events for rooms. Events are reported once daily. Event
        codes include A (add) and U (update), with oldValue/newValue and the
        changed fieldName for updates.
      operationId: listRoomEvents
      parameters:
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: A list of room change events.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RoomEvent'
  /health:
    servers:
      - url: https://apps.opp.psu.edu/fis-api
    get:
      tags: [Health]
      summary: Service health
      description: Returns the service status and dependency health checks.
      operationId: getHealth
      responses:
        '200':
          description: Service health information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Health'
components:
  parameters:
    limit:
      name: limit
      in: query
      description: Maximum number of records to return.
      required: false
      schema:
        type: integer
        minimum: 1
    offset:
      name: offset
      in: query
      description: Number of records to skip for pagination.
      required: false
      schema:
        type: integer
        minimum: 0
  schemas:
    Campus:
      type: object
      properties:
        id:
          type: string
          example: UP
        maximoCampusCode:
          type: string
          example: UP
        lionPathCampusCode:
          type: string
          example: UP
        maximoCode:
          type: string
          example: UP
        lionPathCode:
          type: string
          example: AE
        name:
          type: string
          example: University Park
    LatLong:
      type: object
      properties:
        latitude:
          type: number
          format: double
          example: 40.79974
        longitude:
          type: number
          format: double
          example: -77.86252
    Building:
      type: object
      properties:
        id:
          type: string
          example: '0402000'
        name:
          type: string
          example: Wartik Laboratory (Dr Thomas)
        abbreviation:
          type: string
          example: Wartik Lab
        maximoName:
          type: string
          example: WARTIK LAB
        function:
          type: string
          example: '30500'
        buildingFunctionCat:
          type: string
          example: EG
        status:
          type: string
          example: ACTV
        county:
          type: string
          example: Centre
        address:
          type: string
          example: 360 SCIENCE DR
        city:
          type: string
          example: UNIVERSITY PARK
        state:
          type: string
          example: PA
        zipCode:
          type: string
          example: '16802'
        businessAreaKey:
          type: string
          example: '6390'
        isWorkspace:
          type: boolean
          example: true
        facilityCoordinators:
          type: string
          nullable: true
        capacity:
          type: integer
          example: 178
        occupancy:
          type: integer
          example: 69
        campus:
          $ref: '#/components/schemas/Campus'
        lastUpdateDate:
          type: string
          format: date
          example: '2026-04-29'
        dateInactivated:
          type: string
          format: date
          nullable: true
        latLong:
          $ref: '#/components/schemas/LatLong'
    RoomType:
      type: object
      properties:
        id:
          type: string
          example: '955'
        description:
          type: string
          example: Apartment Service
    BuildingRef:
      type: object
      properties:
        id:
          type: string
          example: '0290012'
    Room:
      type: object
      properties:
        id:
          type: string
          example: 0290012-1-109D
        number:
          type: string
          example: 109D
        name:
          type: string
          nullable: true
        floor:
          type: string
          example: '1'
        floorVerticalOrder:
          type: integer
          nullable: true
        netArea:
          type: number
          format: double
          example: 12.09
        fireCodeCapacity:
          type: integer
          example: 0
        capacity:
          type: integer
          example: 0
        occupancy:
          type: integer
          example: 0
        photoUrl:
          type: string
          nullable: true
        collegeNetKey:
          type: string
          nullable: true
        businessAreaKey:
          type: string
          example: '6530'
        principalInvestigators:
          type: string
          nullable: true
        occupants:
          type: string
          nullable: true
        facilityCoordinators:
          type: string
          nullable: true
        maximoLocation:
          type: string
          example: 0290012-109D
        lastUpdateDate:
          type: string
          format: date
          example: '2022-03-28'
        dateInactivated:
          type: string
          format: date
          nullable: true
        campus:
          $ref: '#/components/schemas/Campus'
        latLong:
          $ref: '#/components/schemas/LatLong'
        building:
          $ref: '#/components/schemas/BuildingRef'
        type:
          $ref: '#/components/schemas/RoomType'
    BuildingEvent:
      type: object
      properties:
        event:
          type: string
          description: Event code (A = add, U = update).
          example: A
        oldValue:
          type: string
          nullable: true
        newValue:
          type: string
          nullable: true
        changeDate:
          type: string
          format: date
          example: '2021-05-28'
        fieldName:
          type: string
          nullable: true
        buildingId:
          type: string
          example: '0002000'
    RoomEvent:
      type: object
      properties:
        event:
          type: string
          description: Event code (A = add, U = update).
          example: U
        oldValue:
          type: string
          nullable: true
          example: '1'
        newValue:
          type: string
          nullable: true
          example: '0'
        changeDate:
          type: string
          format: date
          example: '2021-05-28'
        fieldName:
          type: string
          nullable: true
          example: OCCUPANCY
        roomId:
          type: string
          example: 0965002-G-164
    HealthDetail:
      type: object
      properties:
        name:
          type: string
          example: databaseConnectivity
        result:
          type: string
          example: OK
        time:
          type: integer
          example: 51
    Health:
      type: object
      properties:
        appVersion:
          type: string
          example: 1.14.0
        appStatus:
          type: string
          example: UP
        totalTime:
          type: integer
          example: 59
        details:
          type: array
          items:
            $ref: '#/components/schemas/HealthDetail'