diff --git a/.gitattributes b/.gitattributes
index ea2f19e498d22b1498d79537649c9e59698f6430..2a5198245f4fe7be1b0b23f7acc6c822018cd011 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1795,6 +1795,7 @@ LCU/Maintenance/DBInterface/django_postgresql/wsgi.py -text
 LCU/Maintenance/DBInterface/manage.py -text
 LCU/Maintenance/DBInterface/monitoringdb/__init__.py -text
 LCU/Maintenance/DBInterface/monitoringdb/admin.py -text
+LCU/Maintenance/DBInterface/monitoringdb/api_swagger_description/swagger_api_version_0.1.yaml -text
 LCU/Maintenance/DBInterface/monitoringdb/apps.py -text
 LCU/Maintenance/DBInterface/monitoringdb/exceptions.py -text
 LCU/Maintenance/DBInterface/monitoringdb/migrations/__init__.py -text
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/api_swagger_description/swagger_api_version_0.1.yaml b/LCU/Maintenance/DBInterface/monitoringdb/api_swagger_description/swagger_api_version_0.1.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fb6e9649c330f7644fd59c7786de62cbce23ff8a
--- /dev/null
+++ b/LCU/Maintenance/DBInterface/monitoringdb/api_swagger_description/swagger_api_version_0.1.yaml
@@ -0,0 +1,1185 @@
+swagger: '2.0'
+info:
+  title: Maintenance API
+  description: ''
+  version: ''
+host: '127.0.0.1:8000'
+schemes:
+  - http
+paths:
+  /rtsm/:
+    get:
+      operationId: rtsm_list
+      description: list latest RTSM tests output
+      summary: list latest RTSM tests results
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+      tags:
+        - rtsm
+  /rtsm/errors/:
+    get:
+      operationId: rtsm_errors_list
+      description: list latest RTSM errors
+      summary: list latest RTSM errors
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+      tags:
+        - rtsm
+  '/rtsm/errors/{id}/':
+    get:
+      operationId: rtsm_errors_read
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this rtsm error.
+          type: integer
+      tags:
+        - rtsm
+  /rtsm/errors_detailed/:
+    get:
+      operationId: rtsm_errors_detailed_list
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+      tags:
+        - rtsm
+  '/rtsm/errors_detailed/{id}/':
+    get:
+      operationId: rtsm_errors_detailed_read
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this rtsm error.
+          type: integer
+      tags:
+        - rtsm
+  /rtsm/insert_raw:
+    post:
+      operationId: rtsm_insert_raw_create
+      responses:
+        '201':
+          description: ''
+      parameters: []
+      description: >-
+        This function is meant to parse a request of the form
+
+        {
+
+        "content": "[RTSM TEST RAW TEXT]" station_name: "station_name"
+
+        }
+
+        parse the content field and create all the rtsm_test entity related into
+        the database
+
+        :param request: HTTP request
+
+        :return:
+      summary: This function is meant to parse a request of the form
+      tags:
+        - rtsm
+  /rtsm/summary/:
+    get:
+      operationId: rtsm_summary_list
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+      tags:
+        - rtsm
+  '/rtsm/summary/{id}/':
+    get:
+      operationId: rtsm_summary_read
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this rtsm observation.
+          type: integer
+      tags:
+        - rtsm
+  '/rtsm/{id}/':
+    get:
+      operationId: rtsm_read
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this rtsm observation.
+          type: integer
+      tags:
+        - rtsm
+  /stationtests/component/:
+    get:
+      operationId: stationtests_component_list
+      description: list of component that experienced a negative station test
+      summary: list of component that experienced a negative station test
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: type
+          required: false
+          in: query
+          description: Type of error
+          type: string
+        - name: component_id
+          required: false
+          in: query
+          description: Id of the component
+          type: number
+        - name: station
+          required: false
+          in: query
+          description: station name of the component
+          type: string
+      tags:
+        - stationtests
+  '/stationtests/component/{id}/':
+    get:
+      operationId: stationtests_component_read
+      description: select a specific component with a given database id
+      summary: select a specific component with a given database id
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this component.
+          type: integer
+        - name: type
+          required: false
+          in: query
+          description: Type of error
+          type: string
+        - name: component_id
+          required: false
+          in: query
+          description: id of the component
+          type: number
+        - name: station
+          required: false
+          in: query
+          description: station name of the component
+          type: string
+      tags:
+        - stationtests
+  /stationtests/component_error/:
+    get:
+      operationId: stationtests_component_error_list
+      summary: list the latest component error
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: component_id
+          required: false
+          in: query
+          description: id of the component
+          type: number
+        - name: component_type
+          required: false
+          in: query
+          description: type of the component
+          type: string
+        - name: station_name
+          required: false
+          in: query
+          description: name of the station
+          type: string
+        - name: station_type
+          required: false
+          in: query
+          description: type of the station
+          type: string
+        - name: from_date
+          required: false
+          in: query
+          description: select errors from date
+          type: string
+        - name: to_date
+          required: false
+          in: query
+          description: select errors to date
+          type: string
+        - name: type
+          required: false
+          in: query
+          description: select error type
+          type: string
+      tags:
+        - stationtests
+  '/stationtests/component_error/{id}/':
+    get:
+      operationId: stationtests_component_error_read
+      summary: select a specific component error id
+      description: select a specific component error id
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this component error.
+          type: integer
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: component_id
+          required: false
+          in: query
+          description: id of the component
+          type: number
+        - name: component_type
+          required: false
+          in: query
+          description: type of the component
+          type: string
+        - name: station_name
+          required: false
+          in: query
+          description: name of the station
+          type: string
+        - name: station_type
+          required: false
+          in: query
+          description: type of the station
+          type: string
+        - name: from_date
+          required: false
+          in: query
+          description: select errors from date
+          type: string
+        - name: to_date
+          required: false
+          in: query
+          description: select errors to date
+          type: string
+        - name: type
+          required: false
+          in: query
+          description: select error type
+          type: string
+      tags:
+        - stationtests
+  /stationtests/element/:
+    get:
+      operationId: stationtests_element_list
+      summary: list of the element which have experienced an error
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: component
+          required: false
+          in: query
+          description: id of the component
+          type: string
+        - name: element_id
+          required: false
+          in: query
+          description: id of the element
+          type: number
+      tags:
+        - stationtests
+  '/stationtests/element/{id}/':
+    get:
+      operationId: stationtests_element_read
+      summary: returns a specific element with the given id
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this element.
+          type: integer
+        - name: component
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: element_id
+          required: false
+          in: query
+          description: ''
+          type: number
+      tags:
+        - stationtests
+  /stationtests/element_error/:
+    get:
+      operationId: stationtests_element_error_list
+      summary:  list of the element which have experienced an error
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: element
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: component_error
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: station_test
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: type
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: details
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
+  '/stationtests/element_error/{id}/':
+    get:
+      operationId: stationtests_element_error_read
+      summary: returns a specific element with the given id
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this element error.
+          type: integer
+        - name: element
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: component_error
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: station_test
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: type
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: details
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
+  /stationtests/error_details/:
+    get:
+      operationId: stationtests_error_details_list
+      summary: list all the error details
+      description: list all the error details for either a component or an element error
+      
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: x
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: 'y'
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: xval
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yval
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xoff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yoff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xval_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yval_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xsb_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ysb_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xref_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yref_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xref
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yref
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xsb_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ysb_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xref_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yref_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xval_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yval_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xlimit
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ylimit
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xproc
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yproc
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xdiff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ydiff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xmean
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ymean
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: tp
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: bp
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp0
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp1
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp2
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp3
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap0
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap1
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap2
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap3
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: pcb
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: rcu_5_0v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: lba_8_0v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: hba_48v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: spu_3_3v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: v1_2
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: v2_5
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: v3_3
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: error_code
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
+  '/stationtests/error_details/{id}/':
+    get:
+      operationId: stationtests_error_details_read
+      summary: select an error details object with a specific id
+      description: select an error details object with a specific id
+      responses:
+        '200':
+          description: ''
+          
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this error details.
+          type: integer
+        - name: x
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: 'y'
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: xval
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yval
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xoff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yoff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xval_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yval_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xsb_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ysb_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xref_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yref_no_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xref
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yref
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xsb_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ysb_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xref_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yref_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xval_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yval_full_delay
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xlimit
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ylimit
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xproc
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: yproc
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xdiff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ydiff
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: xmean
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: ymean
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: tp
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: bp
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp0
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp1
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp2
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: mp3
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap0
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap1
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap2
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: ap3
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: pcb
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: rcu_5_0v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: lba_8_0v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: hba_48v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: spu_3_3v
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: v1_2
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: v2_5
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: v3_3
+          required: false
+          in: query
+          description: ''
+          type: number
+        - name: error_code
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
+  /stationtests/insert_raw:
+    post:
+      operationId: stationtests_insert_raw_create
+      responses:
+        '200':
+          description: insert successfully/test already present
+        '400':
+          description: an error occurred while parsing
+      parameters: []
+      description: >-
+        This function is meant to parse a request of the form
+
+        {
+
+        "content": "[STATION TEST RAW TEXT]"
+
+        }
+
+      summary: Insert raw station test output
+      tags:
+        - stationtests
+  /stationtests/station/:
+    get:
+      operationId: stationtests_station_list
+      description: list the stations that have been tested by the stationtests
+      summary: List all the stations that have been tested by the stationtests
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: location
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: name
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: type
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
+  '/stationtests/station/{id}/':
+    get:
+      operationId: stationtests_station_read
+      summary: select a specific station
+      description: returns the summary of a specific station
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this station.
+          type: integer
+        - name: location
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: name
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: type
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
+  /stationtests/station_test/:
+    get:
+      operationId: stationtests_station_test_list
+      summary: list the latest station tests
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: page
+          required: false
+          in: query
+          description: A page number within the paginated result set.
+          type: integer
+        - name: page_size
+          required: false
+          in: query
+          description: Number of results to return per page.
+          type: integer
+        - name: start_datetime
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: end_datetime
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: checks
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: station
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
+  '/stationtests/station_test/{id}/':
+    get:
+      operationId: stationtests_station_test_read
+      summary: select a specific station test with the given id
+      responses:
+        '200':
+          description: ''
+      parameters:
+        - name: id
+          required: true
+          in: path
+          description: A unique integer value identifying this station test.
+          type: integer
+        - name: start_datetime
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: end_datetime
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: checks
+          required: false
+          in: query
+          description: ''
+          type: string
+        - name: station
+          required: false
+          in: query
+          description: ''
+          type: string
+      tags:
+        - stationtests
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/urls.py b/LCU/Maintenance/DBInterface/monitoringdb/urls.py
index a736192c12439045ac0c22fb3cd0220005d63c60..a043e42f81f9fb2b5583550f6c5e4267e21400bb 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/urls.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/urls.py
@@ -2,6 +2,22 @@ from django.conf.urls import url, include
 from rest_framework import routers
 from .views.station_test_views import *
 from .views.rtsm_views import *
+from rest_framework.schemas import get_schema_view
+from rest_framework.renderers import CoreJSONRenderer
+from rest_framework import renderers
+from openapi_codec import OpenAPICodec
+
+
+class SwaggerRenderer(renderers.BaseRenderer):
+    media_type = 'application/openapi+json'
+    format = 'swagger'
+
+    def render(self, data, media_type=None, renderer_context=None):
+        codec = OpenAPICodec()
+        return codec.dump(data)
+
+
+schema_view = get_schema_view(title="Maintenance API", renderer_classes=[SwaggerRenderer, CoreJSONRenderer])
 
 
 station_test_router = routers.DefaultRouter()
@@ -31,6 +47,6 @@ urlpatterns = [
 
     url(r'^api-auth', include('rest_framework.urls', namespace='rest_framework')),
     url(r'^stationtests/insert_raw', insert_raw_station_test),
-    url(r'^rtsm/insert_raw', insert_raw_rtsm_test)
-
+    url(r'^rtsm/insert_raw', insert_raw_rtsm_test),
+    url(r'^schema', schema_view)
 ]
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py b/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py
index 007fd24bd739cc2fac94a8d8af8190283073a634..bc84d8c4efcf005a6894a43247449dad0c829f60 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py
@@ -7,7 +7,7 @@ from rest_framework.serializers import Serializer
 logger = logging.getLogger('views')
 
 
-class RTSMErrorsDetailedViewSet(viewsets.ModelViewSet):
+class RTSMErrorsDetailedViewSet(viewsets.ReadOnlyModelViewSet):
     queryset = RTSMError.objects.all()
     serializer_class = RTSMErrorSerializer
 
@@ -20,7 +20,7 @@ class RTSMErrorsDetailedViewSet(viewsets.ModelViewSet):
         return queryset
 
 
-class RTSMErrorsViewSet(viewsets.ModelViewSet):
+class RTSMErrorsViewSet(viewsets.ReadOnlyModelViewSet):
     queryset = RTSMError.objects.all()
     serializer_class = RTSMErrorSummarySerializer
 
@@ -33,7 +33,7 @@ class RTSMErrorsViewSet(viewsets.ModelViewSet):
         return queryset
 
 
-class RTSMObservationViewSet(viewsets.ModelViewSet):
+class RTSMObservationViewSet(viewsets.ReadOnlyModelViewSet):
     queryset = RTSMObservation.objects.all()
     serializer_class = RTSMObservationSerializer
 
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/views/station_test_views.py b/LCU/Maintenance/DBInterface/monitoringdb/views/station_test_views.py
index 13b73513b3b180fe8bf21edd48e832ba27de9612..334a450d52be114b079d2453aaf81c60eeca798c 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/views/station_test_views.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/views/station_test_views.py
@@ -1,5 +1,5 @@
 from django_filters import rest_framework as filters
-from rest_framework.viewsets import ModelViewSet
+from rest_framework.viewsets import ReadOnlyModelViewSet
 
 from .common import *
 from ..models.component import Component
@@ -21,7 +21,7 @@ from ..station_test_raw_parser import parse_raw_station_test
 logger = logging.getLogger('views')
 
 
-class ComponentViewSet(ModelViewSet):
+class ComponentViewSet(ReadOnlyModelViewSet):
     serializer_class = ComponentSerializer
     queryset = Component.objects.all()
     filter_fields = '__all__'
@@ -42,38 +42,38 @@ class ComponentErrorFilterSet(filters.FilterSet):
                               lookup_expr='contains')
 
 
-class ComponentErrorViewSet(ModelViewSet):
+class ComponentErrorViewSet(ReadOnlyModelViewSet):
     serializer_class = ComponentErrorSerializer
-    queryset = ComponentError.objects.all()
+    queryset = ComponentError.objects.all().order_by('-station_test__start_datetime')
     filter_fields = '__all__'
     filterset_class = ComponentErrorFilterSet
 
 
-class StationViewSet(ModelViewSet):
+class StationViewSet(ReadOnlyModelViewSet):
     serializer_class = StationSerializer
     queryset = Station.objects.all()
     filter_fields = '__all__'
 
 
-class StationTestViewSet(ModelViewSet):
+class StationTestViewSet(ReadOnlyModelViewSet):
     serializer_class = StationTestSerializer
     queryset = StationTest.objects.all()
     filter_fields = '__all__'
 
 
-class ErrorDetailsViewSet(ModelViewSet):
+class ErrorDetailsViewSet(ReadOnlyModelViewSet):
     serializer_class = ErrorDetailsSerializer
     queryset = ErrorDetails.objects.all()
     filter_fields = '__all__'
 
 
-class ElementErrorViewSet(ModelViewSet):
+class ElementErrorViewSet(ReadOnlyModelViewSet):
     serializer_class = ElementErrorSerializer
     queryset = ElementError.objects.all()
     filter_fields = '__all__'
 
 
-class ElementViewSet(ModelViewSet):
+class ElementViewSet(ReadOnlyModelViewSet):
     serializer_class = ElementSerializer
     queryset = Element.objects.all()
     filter_fields = '__all__'