diff --git a/.bumpversion.toml b/.bumpversion.toml
index 6a50277c5a46b53714b73e224c497ce26ab4686a..b0ce7b0b36ea68502058182e7e94063572c3e919 100644
--- a/.bumpversion.toml
+++ b/.bumpversion.toml
@@ -78,3 +78,8 @@ filename = "services/workflow/gitlab-requirements.txt"
 
 [[tool.bumpversion.files]]
 filename = "apps/cli/executables/go/spelunker/main.go"
+
+[[tool.bumpversion.files]]
+glob = "services/*/swagger-schema.yaml"
+search = "version: \"{current_version}\""
+replace = "version: \"{new_version}\""
diff --git a/docs/source/overview/overall-architecture.rst b/docs/source/overview/overall-architecture.rst
index 529cdec4bd07634c62c76764bdfd98cbd3912a8e..a03d41296f40e8e723c03ec44f92ee45e3414ed5 100644
--- a/docs/source/overview/overall-architecture.rst
+++ b/docs/source/overview/overall-architecture.rst
@@ -17,8 +17,12 @@ We follow some simple design patterns to make the system consistent
 REST
 ----
 
-REST APIs are provided by the Workflow and Capability services. The documentation for these APIs
-can be viewed by looking at `the Swagger schema in the repository <https://gitlab.nrao.edu/ssa/workspaces/-/blob/main/docs/swagger-schema.yaml>`_.
+REST APIs are provided by the Capability, Workflow and Notification services. The documentation for these APIs
+can be viewed by looking at the Swagger schemas in the repository:
+
+* `Capability Service <https://gitlab.nrao.edu/ssa/workspaces/-/blob/main/services/capability/swagger-schema.yaml>`_
+* `Workflow Service <https://gitlab.nrao.edu/ssa/workspaces/-/blob/main/services/workflow/swagger-schema.yaml>`_
+* `Notification Service <https://gitlab.nrao.edu/ssa/workspaces/-/blob/main/services/notification/swagger-schema.yaml>`_
 
 Both the Workflow and Capability APIs revolve around creating and submitting "requests." The request
 structure at the Workflow level is much simpler, because a workflow can either succeed or fail, wherease
diff --git a/docs/swagger-schema.yaml b/services/capability/swagger-schema.yaml
similarity index 62%
rename from docs/swagger-schema.yaml
rename to services/capability/swagger-schema.yaml
index 1b7b7632c665239e19c48e36e6dc9283af605643..48e469b0c2d1d301a507cb88173fb436d8d57397 100644
--- a/docs/swagger-schema.yaml
+++ b/services/capability/swagger-schema.yaml
@@ -1,7 +1,7 @@
 swagger: "2.0"
 info:
   description: "Capability service for the SSA Workspaces project"
-  version: "1.0.0"
+  version: "2.8.4"
   title: "Capability Service"
   contact:
     email: "dms-ssa@nrao.edu"
@@ -11,8 +11,8 @@ tags:
     description: "Access capabilities and create requests"
   - name: "requests"
     description: "Access and submit capability requests"
-  - name: "workflows"
-    description: "Access and submit workflow requests"
+  - name: "CASA Matrix"
+    description: "Access the CASA Matrix and retrieve update version information"
 schemes:
   - "https"
 paths:
@@ -629,7 +629,7 @@ paths:
       - $ref: "#/parameters/casa-telescope"
     get:
       tags:
-        - "casa-matrix"
+        - "CASA Matrix"
       summary: "Get a valid CASA version for processing"
       description: "Get a valid CASA version for processing, providing the optional parameters will filter the version"
       operationId: "get_casa_version"
@@ -651,7 +651,7 @@ paths:
       - $ref: "#/parameters/casa-telescope"
     get:
       tags:
-        - "casa-matrix"
+        - "CASA Matrix"
       summary: "Get a list of valid CASA versions for processing"
       description: "Get a list of valid CASA versions for processing, providing the optional parameters will filter the versions"
       operationId: "get_casa_versions"
@@ -671,7 +671,7 @@ paths:
       - $ref: "#/parameters/casa-capability"
     get:
       tags:
-        - "casa-matrix"
+        - "CASA Matrix"
       summary: "Get a CASA recipe for processing the given capability"
       description: "Get a valid CASA recipe for processing the given capability"
       operationId: "get_casa_recipe"
@@ -693,7 +693,7 @@ paths:
       - $ref: "#/parameters/casa-compatible"
     post:
       tags:
-        - "casa-matrix"
+        - "CASA Matrix"
       summary: "Add a CASA version to the matrix tables"
       description: "Add a CASA version to the matrix tables to enable for the given capability list"
       operationId: "add_casa_version"
@@ -710,7 +710,7 @@ paths:
             type: "boolean"
     put:
       tags:
-        - "casa-matrix"
+        - "CASA Matrix"
       summary: "Update a CASA version in the matrix tables"
       description: "Update a CASA version in the matrix tables to enable for the given capability list"
       operationId: "update_casa_version"
@@ -727,7 +727,7 @@ paths:
             type: "boolean"
     delete:
       tags:
-        - "casa-matrix"
+        - "CASA Matrix"
       summary: "Delete a CASA version from the matrix tables"
       description: "Delete a CASA version from the matrix tables"
       operationId: "delete_casa_version"
@@ -745,7 +745,7 @@ paths:
   /casa_matrix/links:
     post:
       tags:
-        - "casa-matrix"
+        - "CASA Matrix"
       summary: "Refresh the links of installed CASA versions"
       description: "Refresh the links of installed CASA versions, existing links will be replaced for this environment"
       operationId: "make_casa_links"
@@ -760,551 +760,6 @@ paths:
           description: "successful operation"
           schema:
             $ref: "#/definitions/CasaVersions"
-  /workflows:
-    get:
-      tags:
-        - "workflows"
-      summary: "View the list of workflows"
-      description: ""
-      operationId: "Workflows.list_workflows"
-      produces:
-        - "application/json"
-      responses:
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowList"
-  /workflows/{name}:
-    get:
-      tags:
-        - "workflows"
-      summary: "View the named workflow"
-      description: ""
-      operationId: "Workflows.get_workflow"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/Workflow"
-  /workflows/{name}/requests/create:
-    post:
-      tags:
-        - "workflows"
-      summary: "Create a workflow request"
-      description: ""
-      operationId: "WorkflowRequestRestService.create_workflow_request"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - name: "body"
-          in: "body"
-          description: "Argument to the workflow"
-          schema:
-            type: "object"
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequest"
-  /workflows/{name}/requests/create-and-submit:
-    post:
-      tags:
-        - "workflows"
-      summary: "Create and submit a workflow request"
-      description: ""
-      operationId: "WorkflowRequestRestService.create_and_submit_workflow_request"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - name: "body"
-          in: "body"
-          description: "Argument to the workflow"
-          schema:
-            type: "object"
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequest"
-  /workflows/{name}/requests/{request_id}:
-    get:
-      tags:
-        - "workflows"
-      summary: "View the workflow request with this ID"
-      description: ""
-      operationId: "WorkflowRequestRestService.get_workflow_request"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequest"
-  /workflows/{name}/requests/{request_id}/dir/{*paths}:
-    get:
-      tags:
-        - "workflows"
-      summary: "View files in the working directory for the workflow request with this ID"
-      description: ""
-      operationId: "WorkflowWorkingDirRestService.show_workdir_content"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-        - name: "*paths"
-          in: "path"
-          description: "path to the file under this workflow request"
-          required: true
-          type: "string"
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequest"
-  /workflows/{name}/requests/{request_id}/weblog:
-    get:
-      tags:
-        - "workflows"
-      summary: "View the weblog under this workflow request"
-      description: ""
-      operationId: "WorkflowWorkingDirRestService.serve_weblog"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequest"
-  /workflows/{name}/requests/{request_id}/qa_notes:
-    get:
-      tags:
-        - "workflows"
-      summary: "View the QA notes under this workflow request"
-      description: ""
-      operationId: "WorkflowWorkingDirRestService.get_qa_notes"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/Notes"
-    post:
-      tags:
-        - "workflows"
-      summary: "Save the QA notes for this workflow request"
-      description: ""
-      operationId: "WorkflowWorkingDirRestService.save_qa_notes"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/Notes"
-  /workflows/{name}/requests/{request_id}/html:
-    get:
-      tags:
-        - "workflows"
-      summary: "Access a CARTA instance"
-      description: ""
-      operationId: "WorkflowWorkingDirRestService.serve_carta_wrapper"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      produces:
-        - "text/html"
-      responses:
-        200:
-          description: "successful operation"
-  /workflows/{name}/requests/{request_id}/htcondor_id:
-    get:
-      tags:
-        - "workflows"
-      summary: "Get the HTCondor ID for this request"
-      description: ""
-      operationId: "WorkflowRequestRestService.get_request_htcondor_id"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        200:
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/HtCondorId"
-
-  /workflows/requests/stale/{days}:
-    get:
-      tags:
-        - "workflows"
-      summary: "Get a list of stale requests"
-      description: ""
-      operationId: "WorkflowRequestRestService.get_stale_requests"
-      parameters:
-        - in: path
-          name: days
-          type: integer
-          required: true
-          description: "days back to look"
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        200:
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/StaleDirectories"
-  /workflows/{name}/requests/{request_id}/files:
-    get:
-      tags:
-        - "workflows"
-      summary: "See the files under this workflow request"
-      description: ""
-      operationId: "WorkflowFilesRestService.get_file"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/octet-stream"
-      produces:
-        - "application/json"
-      responses:
-        "400":
-          description: "File already exists"
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequestFile"
-  /workflows/{name}/requests/{request_id}/files/{filename}:
-    put:
-      tags:
-        - "workflows"
-      summary: "Add a file to this workflow request"
-      description: ""
-      operationId: "WorkflowFilesRestService.add_file"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-        - name: "filename"
-          in: "path"
-          description: "filename to add"
-          type: "string"
-          required: true
-      consumes:
-        - "application/octet-stream"
-      produces:
-        - "application/json"
-      responses:
-        "400":
-          description: "File already exists"
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequestFile"
-  /workflows/{name}/requests/{request_id}/submit:
-    post:
-      tags:
-        - "workflows"
-      summary: "Submit the workflow request for execution"
-      description: ""
-      operationId: "WorkflowRequestRestService.submit_workflow"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequest"
-  /workflows/{name}/requests/{request_id}/ingest:
-    post:
-      tags:
-        - "workflows"
-      summary: "Ingest the result of this workflow"
-      description: ""
-      operationId: "WorkflowRequestRestService.ingest"
-      parameters:
-        - $ref: '#/parameters/workflow-name'
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            $ref: "#/definitions/WorkflowRequest"
-  /workflows/requests/{request_id}/abort:
-    post:
-      tags:
-        - "workflows"
-      summary: "Abort the execution of this running workflow"
-      description: ""
-      operationId: "WorkflowRequestRestService.abort"
-      parameters:
-        - $ref: '#/parameters/workflow-request-id'
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-          schema:
-            type: string
-  /workflows/requests/vlass_ingest/{vlass_type}:
-    post:
-      tags:
-        - "workflows"
-      summary: "Ingest the result of this workflow using a VLASS ingest workflow"
-      description: ""
-      operationId: "WorkflowRequestRestService.ingest_vlass_products"
-      parameters:
-        - in: path
-          name: vlass_type
-          description: "type of VLASS product to ingest"
-          required: true
-          type: string
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        "404":
-          description:
-            "Workflow request not found"
-        "200":
-          description: "successful operation"
-  /workflows/requests/message-archive/{msg_type}:
-    post:
-      tags:
-        - "workflows"
-      summary: "Send a message to the archive"
-      description: ""
-      operationId: "WorkflowRequestRestService.message_archive"
-      parameters:
-        - in: path
-          name: msg_type
-          description: "the message type to send"
-          required: true
-          type: string
-        - name: request_id
-          in: body
-          description: "the workflow request ID to use"
-          schema:
-            $ref: "#/definitions/ArchiveMessage"
-      consumes:
-        - "application/json"
-      produces:
-        - "application/json"
-      responses:
-        200:
-          description: "successful operation"
-          schema:
-            type: string
-  /workflows/carta/requests/{request_id}/send-url-to-aat:
-    post:
-      tags:
-        - "workflows"
-      summary: "Send the CARTA URL to the AAT"
-      description: ""
-      operationId: "WorkflowRequestRestService.send_carta_url_to_aat"
-      parameters:
-        - $ref: "#/parameters/workflow-request-id"
-        - in: body
-          name: carta_url
-          description: "The URL to the CARTA instance which is running"
-          schema:
-            type: string
-      produces:
-        - "application/json"
-      responses:
-        200:
-          description: "successful operation"
-          schema:
-            type: string
-  /workflows/carta/requests/{request_id}/url:
-    post:
-      tags:
-        - "workflows"
-      summary: "Send the CARTA URL... somewhere else..."
-      description: ""
-      operationId: "WorkflowRequestRestService.send_carta_url"
-      parameters:
-        - $ref: "#/parameters/workflow-request-id"
-        - in: body
-          name: carta_url
-          description: "The URL to the CARTA instance which is running"
-          schema:
-            type: string
-      produces:
-        - "application/json"
-      responses:
-        200:
-          description: "successful operation"
-          schema:
-            type: string
-  /workflows/{name}/requests/{request_id}/fail:
-    post:
-      tags:
-        - "workflows"
-      summary: "Force fail a workflow"
-      description: ""
-      operationId: "WorkflowRequestRestService.send_force_fail"
-      parameters:
-        - $ref: "#/parameters/workflow-name"
-        - $ref: "#/parameters/workflow-request-id"
-      responses:
-        200:
-          description: "successful operation"
-  /workflows/{name}/requests/{request_id}/qa_fail:
-    post:
-      tags:
-        - "workflows"
-      summary: "Fail the quality assurance for a workflow"
-      description: ""
-      operationId: "WorkflowRequestRestService.qa_fail"
-      parameters:
-        - $ref: "#/parameters/workflow-name"
-        - $ref: "#/parameters/workflow-request-id"
-      responses:
-        200:
-          description: "successful operation"
-  /workflows/requests/{request_id}/qa/{msg_type}:
-    post:
-      tags:
-        - "workflows"
-      summary: "Force fail a workflow"
-      description: ""
-      operationId: "WorkflowRequestRestService.announce_qa"
-      parameters:
-        - $ref: "#/parameters/workflow-request-id"
-        - in: path
-          name: msg_type
-          description: "The message type to send"
-          required: true
-          type: string
-        - in: body
-          name: version
-          description: "The capability version to send this QA announcement for"
-          required: true
-          schema:
-            $ref: "#/definitions/CapabilityVersion"
-      responses:
-        200:
-          description: "successful operation"
-  /workflows/requests/cleaned:
-    put:
-      tags:
-        - "workflows"
-      summary: "Mark when a request was last cleaned"
-      description: ""
-      operationId: "WorkflowRequestRestService.set_request_cleaned"
-      parameters:
-        - in: body
-          name: clean_parameters
-          schema:
-            $ref: "#/definitions/CleanRequest"
-          required: true
-      responses:
-        200:
-          description: "successful operation"
-          schema:
-            type: string
-  /healthcheck:
-    get:
-      tags:
-        - "workflows"
-      summary: "Returns a success value if the service is healthy"
-      description: ""
-      operationId: "WorkflowWorkingDirRestService.get_healthcheck"
-      responses:
-        200:
-          description: "successful operation"
 definitions:
   CapabilityList:
     type: "array"
@@ -1563,4 +1018,4 @@ parameters:
 
 externalDocs:
   description: "More about the capability service"
-  url: "http://builder.aoc.nrao.edu/ssa/architecture/workspaces"
+  url: "https://builder.aoc.nrao.edu/ssa/architecture/workspaces"
diff --git a/services/notification/swagger-schema.yaml b/services/notification/swagger-schema.yaml
index f57d4572b328f04f1dbe2552a63e591564bb753c..2f81a9c6e887913a2afcd94c4d96098712dba000 100644
--- a/services/notification/swagger-schema.yaml
+++ b/services/notification/swagger-schema.yaml
@@ -1,11 +1,11 @@
 swagger: "2.0"
 info:
   description: "SSA Notification service"
-  version: "1.0.0"
+  version: "2.8.4"
   title: "Notification Service"
   contact:
     email: "dms-ssa@nrao.edu"
-host: "shipman.aoc.nrao.edu"
+host: "ws-dev.nrao.edu"
 schemes:
   - "http"
 paths:
@@ -103,5 +103,5 @@ definitions:
         type: "string"
 
 externalDocs:
-  description: "More about the capability service"
-  url: "http://builder.aoc.nrao.edu/ssa/architecture/workspaces"
+  description: "More about the notification service"
+  url: "https://builder.aoc.nrao.edu/ssa/architecture/workspaces"
diff --git a/services/workflow/swagger-schema.yaml b/services/workflow/swagger-schema.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3fbe4ca97ecbb3ebe07d29f8792c4b7a1311152a
--- /dev/null
+++ b/services/workflow/swagger-schema.yaml
@@ -0,0 +1,697 @@
+swagger: "2.0"
+info:
+  description: "Workflow service for the SSA Workspaces project"
+  version: "2.8.4"
+  title: "Workflow Service"
+  contact:
+    email: "dms-ssa@nrao.edu"
+host: "ws-dev.nrao.edu"
+tags:
+  - name: "workflows"
+    description: "Access and update workflow definitions"
+  - name: "requests"
+    description: "Access and submit workflow requests"
+  - name: "system"
+    description: "Access workflow system checks"
+schemes:
+  - "https"
+paths:
+  /workflows:
+    get:
+      tags:
+        - "workflows"
+      summary: "View the list of workflows"
+      description: ""
+      operationId: "Workflows.list_workflows"
+      produces:
+        - "application/json"
+      responses:
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowList"
+  /workflows/{name}:
+    get:
+      tags:
+        - "workflows"
+      summary: "View the named workflow"
+      description: ""
+      operationId: "Workflows.get_workflow"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/Workflow"
+  /workflows/{name}/requests/create:
+    post:
+      tags:
+        - "requests"
+      summary: "Create a workflow request"
+      description: ""
+      operationId: "WorkflowRequestRestService.create_workflow_request"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - name: "body"
+          in: "body"
+          description: "Argument to the workflow"
+          schema:
+            type: "object"
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequest"
+  /workflows/{name}/requests/create-and-submit:
+    post:
+      tags:
+        - "requests"
+      summary: "Create and submit a workflow request"
+      description: ""
+      operationId: "WorkflowRequestRestService.create_and_submit_workflow_request"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - name: "body"
+          in: "body"
+          description: "Argument to the workflow"
+          schema:
+            type: "object"
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequest"
+  /workflows/{name}/requests/{request_id}:
+    get:
+      tags:
+        - "requests"
+      summary: "View the workflow request with this ID"
+      description: ""
+      operationId: "WorkflowRequestRestService.get_workflow_request"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequest"
+  /workflows/{name}/requests/{request_id}/dir/{*paths}:
+    get:
+      tags:
+        - "requests"
+      summary: "View files in the working directory for the workflow request with this ID"
+      description: ""
+      operationId: "WorkflowWorkingDirRestService.show_workdir_content"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+        - name: "*paths"
+          in: "path"
+          description: "path to the file under this workflow request"
+          required: true
+          type: "string"
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequest"
+  /workflows/{name}/requests/{request_id}/weblog:
+    get:
+      tags:
+        - "requests"
+      summary: "View the weblog under this workflow request"
+      description: ""
+      operationId: "WorkflowWorkingDirRestService.serve_weblog"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequest"
+  /workflows/{name}/requests/{request_id}/qa_notes:
+    get:
+      tags:
+        - "requests"
+      summary: "View the QA notes under this workflow request"
+      description: ""
+      operationId: "WorkflowWorkingDirRestService.get_qa_notes"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/Notes"
+    post:
+      tags:
+        - "requests"
+      summary: "Save the QA notes for this workflow request"
+      description: ""
+      operationId: "WorkflowWorkingDirRestService.save_qa_notes"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/Notes"
+  /workflows/{name}/requests/{request_id}/html:
+    get:
+      tags:
+        - "requests"
+      summary: "Access a CARTA instance"
+      description: ""
+      operationId: "WorkflowWorkingDirRestService.serve_carta_wrapper"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      produces:
+        - "text/html"
+      responses:
+        200:
+          description: "successful operation"
+  /workflows/{name}/requests/{request_id}/htcondor_id:
+    get:
+      tags:
+        - "requests"
+      summary: "Get the HTCondor ID for this request"
+      description: ""
+      operationId: "WorkflowRequestRestService.get_request_htcondor_id"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/HtCondorId"
+
+  /workflows/requests/stale/{days}:
+    get:
+      tags:
+        - "requests"
+      summary: "Get a list of stale requests"
+      description: ""
+      operationId: "WorkflowRequestRestService.get_stale_requests"
+      parameters:
+        - in: path
+          name: days
+          type: integer
+          required: true
+          description: "days back to look"
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/StaleDirectories"
+  /workflows/{name}/requests/{request_id}/files:
+    get:
+      tags:
+        - "requests"
+      summary: "See the files under this workflow request"
+      description: ""
+      operationId: "WorkflowFilesRestService.get_file"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/octet-stream"
+      produces:
+        - "application/json"
+      responses:
+        "400":
+          description: "File already exists"
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequestFile"
+  /workflows/{name}/requests/{request_id}/files/{filename}:
+    put:
+      tags:
+        - "requests"
+      summary: "Add a file to this workflow request"
+      description: ""
+      operationId: "WorkflowFilesRestService.add_file"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+        - name: "filename"
+          in: "path"
+          description: "filename to add"
+          type: "string"
+          required: true
+      consumes:
+        - "application/octet-stream"
+      produces:
+        - "application/json"
+      responses:
+        "400":
+          description: "File already exists"
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequestFile"
+  /workflows/{name}/requests/{request_id}/submit:
+    post:
+      tags:
+        - "requests"
+      summary: "Submit the workflow request for execution"
+      description: ""
+      operationId: "WorkflowRequestRestService.submit_workflow"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequest"
+  /workflows/{name}/requests/{request_id}/ingest:
+    post:
+      tags:
+        - "requests"
+      summary: "Ingest the result of this workflow"
+      description: ""
+      operationId: "WorkflowRequestRestService.ingest"
+      parameters:
+        - $ref: '#/parameters/workflow-name'
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            $ref: "#/definitions/WorkflowRequest"
+  /workflows/requests/{request_id}/abort:
+    post:
+      tags:
+        - "requests"
+      summary: "Abort the execution of this running workflow"
+      description: ""
+      operationId: "WorkflowRequestRestService.abort"
+      parameters:
+        - $ref: '#/parameters/workflow-request-id'
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+          schema:
+            type: string
+  /workflows/requests/vlass_ingest/{vlass_type}:
+    post:
+      tags:
+        - "requests"
+      summary: "Ingest the result of this workflow using a VLASS ingest workflow"
+      description: ""
+      operationId: "WorkflowRequestRestService.ingest_vlass_products"
+      parameters:
+        - in: path
+          name: vlass_type
+          description: "type of VLASS product to ingest"
+          required: true
+          type: string
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        "404":
+          description:
+            "Workflow request not found"
+        "200":
+          description: "successful operation"
+  /workflows/requests/message-archive/{msg_type}:
+    post:
+      tags:
+        - "requests"
+      summary: "Send a message to the archive"
+      description: ""
+      operationId: "WorkflowRequestRestService.message_archive"
+      parameters:
+        - in: path
+          name: msg_type
+          description: "the message type to send"
+          required: true
+          type: string
+        - name: request_id
+          in: body
+          description: "the workflow request ID to use"
+          schema:
+            $ref: "#/definitions/ArchiveMessage"
+      consumes:
+        - "application/json"
+      produces:
+        - "application/json"
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            type: string
+  /workflows/carta/requests/{request_id}/send-url-to-aat:
+    post:
+      tags:
+        - "requests"
+      summary: "Send the CARTA URL to the AAT"
+      description: ""
+      operationId: "WorkflowRequestRestService.send_carta_url_to_aat"
+      parameters:
+        - $ref: "#/parameters/workflow-request-id"
+        - in: body
+          name: carta_url
+          description: "The URL to the CARTA instance which is running"
+          schema:
+            type: string
+      produces:
+        - "application/json"
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            type: string
+  /workflows/carta/requests/{request_id}/url:
+    post:
+      tags:
+        - "requests"
+      summary: "Send the CARTA URL... somewhere else..."
+      description: ""
+      operationId: "WorkflowRequestRestService.send_carta_url"
+      parameters:
+        - $ref: "#/parameters/workflow-request-id"
+        - in: body
+          name: carta_url
+          description: "The URL to the CARTA instance which is running"
+          schema:
+            type: string
+      produces:
+        - "application/json"
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            type: string
+  /workflows/{name}/requests/{request_id}/fail:
+    post:
+      tags:
+        - "requests"
+      summary: "Force fail a workflow"
+      description: ""
+      operationId: "WorkflowRequestRestService.send_force_fail"
+      parameters:
+        - $ref: "#/parameters/workflow-name"
+        - $ref: "#/parameters/workflow-request-id"
+      responses:
+        200:
+          description: "successful operation"
+  /workflows/{name}/requests/{request_id}/qa_fail:
+    post:
+      tags:
+        - "requests"
+      summary: "Fail the quality assurance for a workflow"
+      description: ""
+      operationId: "WorkflowRequestRestService.qa_fail"
+      parameters:
+        - $ref: "#/parameters/workflow-name"
+        - $ref: "#/parameters/workflow-request-id"
+      responses:
+        200:
+          description: "successful operation"
+  /workflows/requests/{request_id}/qa/{msg_type}:
+    post:
+      tags:
+        - "requests"
+      summary: "Force fail a workflow"
+      description: ""
+      operationId: "WorkflowRequestRestService.announce_qa"
+      parameters:
+        - $ref: "#/parameters/workflow-request-id"
+        - in: path
+          name: msg_type
+          description: "The message type to send"
+          required: true
+          type: string
+        - in: body
+          name: version
+          description: "The capability version to send this QA announcement for"
+          required: true
+          schema:
+            $ref: "#/definitions/CapabilityVersion"
+      responses:
+        200:
+          description: "successful operation"
+  /workflows/requests/cleaned:
+    put:
+      tags:
+        - "requests"
+      summary: "Mark when a request was last cleaned"
+      description: ""
+      operationId: "WorkflowRequestRestService.set_request_cleaned"
+      parameters:
+        - in: body
+          name: clean_parameters
+          schema:
+            $ref: "#/definitions/CleanRequest"
+          required: true
+      responses:
+        200:
+          description: "successful operation"
+          schema:
+            type: string
+  /healthcheck:
+    get:
+      tags:
+        - "system"
+      summary: "Returns a success value if the service is healthy"
+      description: ""
+      operationId: "WorkflowWorkingDirRestService.get_healthcheck"
+      responses:
+        200:
+          description: "successful operation"
+definitions:
+  CapabilityVersion:
+    type: "object"
+    properties:
+      type:
+        type: "string"
+      capability_request_id:
+        type: "integer"
+      version_number:
+        type: "integer"
+      current_execution:
+        type: "string"
+      state:
+        type: "string"
+      parameters:
+        type: "object"
+      workflow_metadata:
+        type: "object"
+      sealed:
+        type: "boolean"
+      files:
+        type: "array"
+        items:
+          $ref: "#/definitions/CapabilityVersionFile"
+      capability_name:
+        type: "string"
+      status_url:
+        type: "string"
+      internal_notes:
+        type: "string"
+  CapabilityVersionFile:
+    type: "object"
+    properties:
+      type:
+        type: "string"
+      capability_request_id:
+        type: "integer"
+      version_number:
+        type: "integer"
+      filename:
+        type: "string"
+      content:
+        type: "string"
+  CleanRequest:
+    type: "object"
+    properties:
+      directory:
+        type: string
+      update_to:
+        type: string
+  HtCondorId:
+    type: "object"
+    properties:
+      htcondor_job_id:
+        type: integer
+  Notes:
+    type: "object"
+    properties:
+      resp:
+        type: "string"
+  AnalystEmail:
+    type: "object"
+    properties:
+      resp:
+        type: "string"
+  StaleDirectories:
+    type: "object"
+    properties:
+      stale_dirs:
+        type: "string"
+  ArchiveMessage:
+    type: "object"
+    properties:
+      request_id:
+        type: integer
+      project_code:
+        type: string
+  WorkflowList:
+    type: "array"
+    items:
+      $ref: "#/definitions/Workflow"
+  Workflow:
+    type: "object"
+    properties:
+      name:
+        type: "string"
+  WorkflowRequest:
+    type: "object"
+    properties:
+      workflow_request_id:
+        type: "integer"
+        format: "int64"
+      workflow_name:
+        type: "string"
+      argument:
+        type: "object"
+      state:
+        type: "string"
+      results_dir:
+        type: "string"
+  WorkflowRequestFile:
+    type: "object"
+    properties:
+      workflow_request_id:
+        type: "integer"
+        format: "int64"
+      filename:
+        type: "string"
+      content:
+        type: "string"
+parameters:
+  filename:
+    name: "filename"
+    in: "path"
+    description: "Filename"
+    required: true
+    type: "string"
+    format: "string"
+  workflow-name:
+    name: "name"
+    in: "path"
+    description: "name of workflow this request belongs to"
+    required: true
+    type: "string"
+  workflow-request-id:
+    name: "request_id"
+    in: "path"
+    description: "ID of the request"
+    type: "integer"
+    required: true
+
+externalDocs:
+  description: "More about the workflow service"
+  url: "https://builder.aoc.nrao.edu/ssa/architecture/workspaces"