openapi: 3.0.1
info:
  title: Terra
  description: |
    Terra API
  termsOfService: https://app.terra.bio/#terms-of-service
  license:
    name: BSD
    url: http://opensource.org/licenses/BSD-3-Clause
  version: "0.1"
servers:
  - url: /
tags:
  - name: BillingV2
  - name: CromIAM Engine (for Job Manager)
  - name: CromIAM Workflows (for Admin)
  - name: CromIAM Workflows (for Job Manager)
  - name: Entities
  - name: GA4GH Tool Registry
  - name: Groups
  - name: Library
  - name: Method Configurations
  - name: Method Repository
  - name: NIH
  - name: Notifications
  - name: OAuth
  - name: Profile
  - name: Service Perimeters
  - name: ShareLog
  - name: Static Notebooks
  - name: Status
  - name: Submissions
  - name: Terms of Service
  - name: Version
  - name: Womtool
  - name: Workspaces
  - name: WorkspacesV2
security:
  - oidc: []
paths:
  /api/billing/v2/{projectId}/spendReportConfiguration:
    get:
      tags:
        - BillingV2
      summary: get the spend report configuration for the billing project
      description: get the spend report configuration for the billing project
      operationId: getSpendReportConfiguration
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      responses:
        200:
          description: Successfully retrieved spend report configuration
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/SpendReportConfiguration'
        204:
          description: The specified billing project exists but does not have spend reporting configured
        403:
          description: You must be a billing project owner to view the spend report configuration of the billing project
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: The specified billing project could not be found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
    put:
      tags:
        - BillingV2
      summary: set the spend configuration for the billing project
      description: set the spend configuration for the billing project
      operationId: setSpendReportConfiguration
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      requestBody:
        description: billing project spend configuration information
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/SpendReportConfiguration'
      responses:
        204:
          description: Successfully updated spend configuration
        400:
          description: Either the billing project does not have an active billing account, the specified dataset does not exist, or the specified table does not exist
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: You must be a billing project owner to alter the spend configuration of the billing project
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: The specified billing project could not be found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
    delete:
      tags:
        - BillingV2
      summary: clear the spend configuration for the billing project
      description: clear the spend configuration for the billing project
      operationId: clearSpendReportConfiguration
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      responses:
        204:
          description: Successfully cleared spend configuration
        403:
          description: You must be a billing project owner to alter the spend configuration of the billing project
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/billing/v2:
    get:
      tags:
        - BillingV2
      summary: list billing projects for a user
      description: list billing projects for a user
      operationId: listUserBillingProjectsV2
      responses:
        200:
          description: Successful Request
          content:
            'application/json':
              schema:
                type: array
                description: list of billing projects for this user
                items:
                  $ref: '#/components/schemas/RawlsBillingProjectResponse'
        404:
          description: User not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
    post:
      tags:
        - BillingV2
      summary: create billing project in rawls
      description: create new billing project in rawls; the client must provide either Azure managed app coordinates or a Google billing account ID. Providing both will result in an error.
      operationId: createBillingProjectFullV2
      requestBody:
        description: create project request
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/CreateRawlsV2BillingProjectFullRequest'
        required: true
      responses:
        201:
          description: Successfully Created Billing Project in Terra
        400:
          description: both you and Terra billing user must be a user of the billing account
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: project already exists in rawls
          content: {}
        500:
          description: FireCloud Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
      security:
        - oidc_google_billing_scope: []
      x-codegen-request-body-name: createProjectRequest
  /api/billing/v2/{projectId}:
    get:
      tags:
        - BillingV2
      summary: get billing project
      description: get billing project
      operationId: getBillingProject
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      responses:
        200:
          description: OK
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RawlsBillingProjectResponse'
        404:
          description: Project Not Found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Internal Server Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
    delete:
      tags:
        - BillingV2
      summary: delete billing project
      description: delete billing project
      operationId: deleteBillingProject
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      responses:
        204:
          description: OK
        404:
          description: Project Not Found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Internal Server Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
  /api/billing/v2/{projectId}/billingAccount:
    put:
      tags:
        - BillingV2
      summary: update billing account on billing project
      description: Update the Billing Account on the Billing Project and on each Workspace in the Billing Project
      operationId: updateBillingProjectBillingAccount
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      requestBody:
        description: update billing account request
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/UpdateRawlsBillingAccountRequest'
        required: true
      responses:
        200:
          description: Billing Account on Billing Project is successfully updated and process is started to update the Billing Account on each Workspace in the Billing Project
        400:
          description: Billing account not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Billing Project Not Found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Internal Server Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
      security:
        - oidc_google_billing_scope: []
      x-passthrough: true
      x-passthrough-target: rawls
    delete:
      tags:
        - BillingV2
      summary: deletes the billing account on billing project
      description: Clears the Billing Account on the Billing Project and on each Workspace in the Billing Project
      operationId: deleteBillingProjectBillingAccount
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      responses:
        200:
          description: Billing account successfully removed
        404:
          description: Billing project Not Found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Internal Server Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/billing/v2/{projectId}/members:
    get:
      tags:
        - BillingV2
      summary: list members of billing project the caller owns
      description: list members of billing project the caller owns
      operationId: listBillingProjectMembersV2
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
      responses:
        200:
          description: Success
          content:
            'application/json':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BillingProjectMember'
        403:
          description: You must be a project owner to view the members of a project
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
  /api/billing/v2/{projectId}/members/{workbenchRole}/{email}:
    put:
      tags:
        - BillingV2
      summary: add user or group to billing project the caller owns
      description: add user or group to billing project the caller owns
      operationId: addUserToBillingProjectV2
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
        - name: workbenchRole
          in: path
          description: role of user for project
          required: true
          schema:
            type: string
            enum:
              - user
              - owner
        - name: email
          in: path
          description: email of user or group to add
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successfully Added User/Group To Billing Project
        403:
          description: You must be a project owner to add a user to a billing project
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: User not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
    delete:
      tags:
        - BillingV2
      summary: remove user or group from billing project the caller owns
      description: remove user or group from billing project the caller owns
      operationId: removeUserFromBillingProjectV2
      parameters:
        - $ref: '#/components/parameters/billingProjectPathParam'
        - name: workbenchRole
          in: path
          description: role of user for project
          required: true
          schema:
            type: string
            enum:
              - user
              - owner
        - name: email
          in: path
          description: email of user or group to remove
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successfully Removed User From Billing Project
        403:
          description: You must be a project owner to add a user to a billing project
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: User not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
  /api/configurations:
    get:
      tags:
        - Method Repository
      summary: |
        List Method Repository configurations.
      description: |
        The configurations endpoint returns all configurations the requester
        has permissions to read that fit the filter criteria.
      operationId: listMethodRepositoryConfigurations
      parameters:
        - name: namespace
          in: query
          description: Namespace of configuration.
          schema:
            type: string
        - name: name
          in: query
          description: Name of configuration.
          schema:
            type: string
        - name: snapshotId
          in: query
          description: Snapshot ID of configuration.
          schema:
            type: integer
            format: int32
        - name: snapshotComment
          in: query
          description: Snapshot comment of AgoraEntity
          schema:
            type: string
        - name: synopsis
          in: query
          description: Synopsis of configuration.
          schema:
            type: string
        - name: documentation
          in: query
          description: Documentation of configuration.
          schema:
            type: string
        - name: owner
          in: query
          description: Owner of configuration.
          schema:
            type: string
        - name: payload
          in: query
          description: Payload of configuration in WDL.
          schema:
            type: string
        - name: entityType
          in: query
          description: Type of configuration - Task or Workflow
          schema:
            type: string
      responses:
        200:
          description: An array of configurations.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ConfigurationResponse'
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
    post:
      tags:
        - Method Repository
      summary: Add a configuration.
      description: |
        Inserts a method configuration into the method repository and
        gives the owner full access permissions. Must supply a namespace,
        name, payload, and entityType. Cannot supply a snapshotId
      requestBody:
        description: Agora Entity
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ConfigurationQuery'
        required: false
      responses:
        201:
          description: Method successfully added.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationResponse'
        400:
          description: Malformed input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        500:
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
      x-codegen-request-body-name: body
  /api/configurations/{namespace}/{name}/{snapshotId}:
    get:
      tags:
        - Method Repository
      summary: Get a Method Repository configuration
      operationId: getMethodRepositoryConfiguration
      parameters:
        - $ref: '#/components/parameters/configNamespaceParam'
        - $ref: '#/components/parameters/configNameParam'
        - $ref: '#/components/parameters/configSnapshotId'
        - name: payloadAsObject
          in: query
          description: Instead of returning a string under key payload, return a JSON
            object under key payloadObject
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: Method Repository configuration detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConfigurationResponse'
        500:
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
    delete:
      tags:
        - Method Repository
      summary: Redact a single configuration.
      description: |
        Redacts a configuration and all of its associated configurations
      parameters:
        - $ref: '#/components/parameters/configNamespaceParam'
        - $ref: '#/components/parameters/configNameParam'
        - $ref: '#/components/parameters/configSnapshotId'
      responses:
        200:
          description: |
            An integer showing how many configurations were deleted. Should be 1.
          content:
            application/json:
              schema:
                type: integer
                format: int32
        default:
          description: Error upon redaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
  /api/configurations/{namespace}/{name}/{snapshotId}/permissions:
    get:
      tags:
        - Method Repository
      summary: get ACL permissions on a Method Repository configuration
      operationId: getConfigACL
      parameters:
        - $ref: '#/components/parameters/configNamespaceParam'
        - $ref: '#/components/parameters/configNameParam'
        - $ref: '#/components/parameters/configSnapshotId'
      responses:
        200:
          description: the indicated configuration ACL
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodConfigACL'
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Method Repository
      summary: set ACL permissions on a Method Repository configuration
      operationId: setConfigACL
      parameters:
        - $ref: '#/components/parameters/configNamespaceParam'
        - $ref: '#/components/parameters/configNameParam'
        - $ref: '#/components/parameters/configSnapshotId'
      requestBody:
        description: the ACLs to upsert
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodConfigACL'
        required: true
      responses:
        200:
          description: the indicated configuration ACL once the posted changes have
            been applied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodConfigACL'
        400:
          description: Bad Request
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: payload
  /api/configurations/{namespace}/permissions:
    get:
      tags:
        - Method Repository
      summary: get ACL permissions on a Method Repository Configuration Namespace
      operationId: getConfigNamespaceACL
      parameters:
        - $ref: '#/components/parameters/configNamespaceParam'
      responses:
        200:
          description: List of the indicated configuration namespace ACL permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodConfigACL'
        403:
          description: user does not have correct permissions to manage namespace
            permissions or the indicated namespace was not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Method Repository
      summary: set ACL permissions on a Method Repository Configuration Namespace
      operationId: setConfigNamespaceACL
      parameters:
        - $ref: '#/components/parameters/configNamespaceParam'
      requestBody:
        description: the ACLs to upsert
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodConfigACL'
        required: true
      responses:
        200:
          description: the indicated configuration ACL once the posted changes have
            been applied
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MethodConfigACL'
        400:
          description: Invalid content format
          content: {}
        403:
          description: User does not have correct permissions to manage namespace
            permissions or the indicated namespace was not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: payload
  /api/groups:
    get:
      tags:
        - Groups
      summary: get the list of the groups that the caller is a member of
      operationId: getGroups
      responses:
        200:
          description: Successfully listed group membership
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ManagedGroupAccessResponse'
        500:
          description: FireCloud Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
  /api/workflows/{version}/{id}/abort:
    post:
      tags:
        - CromIAM Workflows (for Job Manager)
      summary: Abort a workflow based on workflow id
      parameters:
        - $ref: '#/components/parameters/versionParam'
        - name: id
          in: path
          description: Workflow ID
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowStatusResponse'
        400:
          description: Malformed Workflow ID
          content: {}
        403:
          description: Workflow in terminal status
          content: {}
        404:
          description: Workflow ID Not Found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: cromiam
  /api/workflows/{version}/{id}/backend/metadata/{backendId}:
    get:
      tags:
        - Rawls Workflows (for Job Manager)
      summary: Get backend (e.g. PAPI, Google Life Sciences) metadata for a job
      parameters:
        - $ref: '#/components/parameters/versionParam'
        - name: id
          in: path
          description: Workflow ID
          required: true
          schema:
            type: string
        - name: backendId
          in: path
          description: Backend ID, must be a job that is part of the workflow
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful Request, format is backend dependent
          content: {}
        404:
          description: Workflow or Backend ID Not Found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workflows/{version}/{id}/labels:
    patch:
      tags:
        - CromIAM Workflows (for Job Manager)
      summary: Add new labels or update values for existing label keys by workflow
        id.
      parameters:
        - $ref: '#/components/parameters/versionParam'
        - name: id
          in: path
          description: Workflow ID
          required: true
          schema:
            type: string
      requestBody:
        description: |
          Custom labels submitted as JSON. Example: {"key-1":"value-1","key-2":"value-2"}
        content:
          'application/json':
            schema:
              type: object
        required: true
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabelsResponse'
        400:
          description: Malformed Workflow ID
          content: {}
        404:
          description: Workflow ID Not Found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: cromiam
      x-codegen-request-body-name: labels
  /api/workflows/{version}/{id}/metadata:
    get:
      tags:
        - CromIAM Workflows (for Job Manager)
      summary: Query for workflow and call-level metadata for a specified workflow
      parameters:
        - $ref: '#/components/parameters/versionParam'
        - name: id
          in: path
          description: Workflow ID
          required: true
          schema:
            type: string
        - name: includeKey
          in: query
          description: |
            When specified key(s) to include from the metadata. Matches any key starting with the value. May not be used with excludeKey.
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: excludeKey
          in: query
          description: |
            When specified key(s) to exclude from the metadata. Matches any key starting with the value. May not be used with includeKey.
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: expandSubWorkflows
          in: query
          description: |
            When true, metadata for sub workflows will be fetched and inserted automatically in the metadata response.
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowMetadataResponse'
            workflowName:
              example: example
            calls:
              example:
                example.gather:
                  - executionStatus: Done
                    stdout: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-gather/stdout
                    shardIndex: -1
                    outputs:
                      str: |-
                        _one_
                        _two_
                        _three_
                        _four_
                    inputs:
                      array: analysis.out
                    returnCode: 0
                    backend: Local
                    end: 2015-12-11T16:53:23.000-05:00
                    stderr: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-gather/stderr
                    executionEvents:
                      - description: execution event - only one in this call, some calls
                          might have none!
                        startTime: 2015-12-11T16:53:23.000-05:00
                        endTime: 2015-12-11T16:53:23.000-05:00
                    start: 2015-12-11T16:53:23.000-05:00
                example.prepare:
                  - executionStatus: Done
                    stdout: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-prepare/stdout
                    shardIndex: -1
                    outputs:
                      array:
                        - one
                        - two
                        - three
                        - four
                    inputs: {}
                    returnCode: 0
                    backend: Local
                    end: 2015-12-11T16:53:22.000-05:00
                    stderr: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-prepare/stderr
                    executionEvents: []
                    start: 2015-12-11T16:53:21.000-05:00
                example.analysis:
                  - executionStatus: Done
                    stdout: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-0/stdout
                    shardIndex: 0
                    outputs:
                      out: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-0/a.txt
                    inputs:
                      str: x
                    returnCode: 0
                    backend: Local
                    end: 2015-12-11T16:53:23.000-05:00
                    stderr: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-0/stderr
                    executionEvents: []
                    start: 2015-12-11T16:53:22.000-05:00
                  - executionStatus: Done
                    stdout: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-1/stdout
                    shardIndex: 1
                    outputs:
                      out: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-1/a.txt
                    inputs:
                      str: x
                    returnCode: 0
                    backend: Local
                    end: 2015-12-11T16:53:23.000-05:00
                    stderr: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-1/stderr
                    executionEvents: []
                    start: 2015-12-11T16:53:22.000-05:00
                  - executionStatus: Done
                    stdout: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-2/stdout
                    shardIndex: 2
                    outputs:
                      out: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-2/a.txt
                    inputs:
                      str: x
                    returnCode: 0
                    backend: Local
                    end: 2015-12-11T16:53:23.000-05:00
                    stderr: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-2/stderr
                    executionEvents: []
                    start: 2015-12-11T16:53:22.000-05:00
                  - executionStatus: Done
                    stdout: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-3/stdout
                    shardIndex: 3
                    outputs:
                      out: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-3/a.txt
                    inputs:
                      str: x
                    returnCode: 0
                    backend: Local
                    end: 2015-12-11T16:53:23.000-05:00
                    stderr: /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-3/stderr
                    executionEvents: []
                    start: 2015-12-11T16:53:22.000-05:00
            outputs:
              example:
                example.analysis.out:
                  - /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-0/a.txt
                  - /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-1/a.txt
                  - /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-2/a.txt
                  - /cromwell/cromwell-executions/example/e552029e-4b9a-48e9-b11f-6e5d6d0dccc4/call-analysis/shard-3/a.txt
                example.gather.str: |-
                  _one_
                  _two_
                  _three_
                  _four_
                example.prepare.array:
                  - one
                  - two
                  - three
                  - four
            id:
              example: e552029e-4b9a-48e9-b11f-6e5d6d0dccc4
            inputs:
              example:
                test.hello.name: chris
                blah2.grep.pattern: h
                blah2.cat.asdf: gs://cromwell-root/blah/c0c116ef-aac6-4029-8d0a-70d86b17c843/call-ls/job.stdout.txt
                blah.grep.pattern: v
                blah.ls.pattern: ./
            submission:
              example: 2015-12-11T16:53:21.000-05:00
            status:
              example: Succeeded
            end:
              example: 2015-12-11T16:53:23.000-05:00
            start:
              example: 2015-12-11T16:53:21.000-05:00
        400:
          description: Malformed Workflow ID
          content: {}
        404:
          description: Workflow ID Not Found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: cromiam
  /api/workflows/{version}/{id}/releaseHold:
    post:
      tags:
        - CromIAM Workflows (for Admin)
      summary: Request Cromwell to release the hold on a workflow. It will switch
        the status of a workflow from ‘On Hold’ to ‘Submitted’ so it can be picked
        for running. For instance this might be necessary in cases where you have
        submitted a workflow with workflowOnHold = true.
      parameters:
        - $ref: '#/components/parameters/versionParam'
        - name: id
          in: path
          description: Workflow ID
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowStatusResponse'
        400:
          description: Malformed Workflow ID
          content: {}
        403:
          description: Malformed Request
          content: {}
        404:
          description: Workflow ID Not Found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: cromiam
  /api/workflows/{version}/callcaching/diff:
    get:
      tags:
        - CromIAM Workflows (for Admin)
      summary: Return the hash differential between two calls
      parameters:
        - $ref: '#/components/parameters/versionParam'
        - name: workflowA
          in: query
          description: Workflow Id of the first workflow
          required: true
          schema:
            type: string
        - name: callA
          in: query
          description: Call FQN (including workflow name) of the first call
          required: true
          schema:
            type: string
        - name: indexA
          in: query
          description: Index of the first call
          schema:
            type: number
        - name: workflowB
          in: query
          description: Workflow Id of the second workflow
          required: true
          schema:
            type: string
        - name: callB
          in: query
          description: Call FQN (including workflow name) of the second call
          required: true
          schema:
            type: string
        - name: indexB
          in: query
          description: Index of the second call
          schema:
            type: number
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowCacheDiffResponse'
        400:
          description: Malformed query parameters
          content: {}
        404:
          description: No matching cache entry
          content: {}
        500:
          description: Internal Error
          content: {}
  /api/workflows/{version}/query:
    get:
      tags:
        - CromIAM Workflows (for Job Manager)
      summary: Query workflows by start dates, end dates, names, ids, or statuses.
      parameters:
        - $ref: '#/components/parameters/versionParam'
        - name: start
          in: query
          description: |
            Returns only workflows with an equal or later start datetime.  Can be specified at most once. If both start and end date are specified, start date must be before or equal to end date.
          schema:
            type: string
            format: date-time
        - name: end
          in: query
          description: |
            Returns only workflows with an equal or earlier end datetime.  Can be specified at most once. If both start and end date are specified, start date must be before or equal to end date.
          schema:
            type: string
            format: date-time
        - name: status
          in: query
          description: |
            Returns only workflows with the specified status.  If specified multiple times, returns workflows in any of the specified statuses.
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
            enum:
              - Submitted
              - Running
              - Aborting
              - Failed
              - Succeeded
              - Aborted
        - name: name
          in: query
          description: |
            Returns only workflows with the specified name.  If specified multiple times, returns workflows with any of the specified names.
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: id
          in: query
          description: |
            Returns only workflows with the specified workflow id.  If specified multiple times, returns workflows with any of the specified workflow ids.
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowQueryResponse'
        403:
          description: Malformed Request
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: cromiam
    post:
      tags:
        - CromIAM Workflows (for Job Manager)
      summary: Query workflows by start dates, end dates, names, ids, or statuses.
      parameters:
        - $ref: '#/components/parameters/versionParam'
      requestBody:
        description: |
          Same query parameters as GET /query endpoint, submitted as a json list. Example: [{"status":"Success"},{"status":"Failed"}]
        content:
          'application/json':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WorkflowQueryParameter'
        required: true
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowQueryResponse'
        400:
          description: Malformed Request
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: cromiam
      x-codegen-request-body-name: parameters
  /api/womtool/{version}/describe:
    post:
      tags:
        - Womtool
      summary: Machine-readable description of a workflow, including inputs and outputs
      operationId: describe
      parameters:
        - $ref: '#/components/parameters/versionParam'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                workflowSource:
                  type: string
                  description: The workflow source file to submit for execution. Either
                    workflow source or workflow url is required.
                  format: binary
                workflowUrl:
                  type: string
                  description: URL which points to the workflow. Either workflow source
                    or workflow url is required.
                workflowInputs:
                  type: string
                  description: JSON or YAML file containing the inputs as an object.
                  format: binary
                workflowType:
                  type: string
                  description: The workflow language for the file you submitted. Cromwell
                    currently supports WDL and CWL.
                  enum:
                    - WDL
                    - CWL
                workflowTypeVersion:
                  type: string
                  description: The specification version for the workflow language
                    being used. For WDL, Cromwell currently supports draft-2 and 1.0.
                    For CWL, Cromwell currently supports v1.0.
                  enum:
                    - draft-2
                    - "1.0"
                    - v1.0
      responses:
        200:
          description: Workflow description.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowDescription'
      x-passthrough: true
      x-passthrough-target: cromiam
  /engine/{version}/version:
    get:
      tags:
        - CromIAM Engine (for Job Manager)
      summary: Returns the version of the Cromwell Engine
      parameters:
        - $ref: '#/components/parameters/versionParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionResponse'
      x-passthrough: true
      x-passthrough-target: cromiam
  /engine/{version}/status:
    get:
      tags:
        - CromIAM Engine (for Job Manager)
      summary: Returns the current health status of any monitored subsystems
      parameters:
        - $ref: '#/components/parameters/versionParam'
      responses:
        200:
          description: All subsystems report an "ok" status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
        500:
          description: At least one subsystem does not have an "ok" status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
      x-passthrough: true
      x-passthrough-target: cromiam
  /api/groups/{groupName}:
    get:
      tags:
        - Groups
      summary: view the members in a group
      operationId: getGroup
      parameters:
        - name: groupName
          in: path
          description: Group name
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successfully loaded group
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ManagedGroupWithMembers'
        403:
          description: You must be an admin of this group in order to view members
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Group not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
    post:
      tags:
        - Groups
      summary: create a new group
      operationId: createGroup
      parameters:
        - name: groupName
          in: path
          description: Group name
          required: true
          schema:
            type: string
      responses:
        201:
          description: Successfully created group
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ManagedGroupWithMembers'
        409:
          description: Group already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
    delete:
      tags:
        - Groups
      summary: delete a group that the caller owns
      operationId: deleteGroup
      parameters:
        - name: groupName
          in: path
          description: Group name
          required: true
          schema:
            type: string
      responses:
        204:
          description: Successfully Deleted Group
          content: {}
        403:
          description: You must be an admin of this group in order to delete it
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Group not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: Group is in use and cannot be deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
  /api/groups/{groupName}/requestAccess:
    post:
      tags:
        - Groups
      summary: request access to a group
      operationId: requestAccessToGroup
      parameters:
        - name: groupName
          in: path
          description: Group name
          required: true
          schema:
            type: string
      responses:
        204:
          description: Successfully requested access
          content: {}
        404:
          description: Group not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
  /api/groups/{groupName}/{role}/{email}:
    put:
      tags:
        - Groups
      summary: add a user to a group the caller owns
      operationId: addUserToGroup
      parameters:
        - name: groupName
          in: path
          description: Group name
          required: true
          schema:
            type: string
        - name: role
          in: path
          description: role of user for group
          required: true
          schema:
            type: string
            enum:
              - member
              - admin
        - name: email
          in: path
          description: email of user or group to add
          required: true
          schema:
            type: string
      responses:
        204:
          description: Successfully Added User To Group
          content: {}
        403:
          description: You must be an admin of this group in order to add members
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
    delete:
      tags:
        - Groups
      summary: remove a user from a group the caller owns
      operationId: removeUserFromGroup
      parameters:
        - name: groupName
          in: path
          description: Group name
          required: true
          schema:
            type: string
        - name: role
          in: path
          description: role of user for group
          required: true
          schema:
            type: string
            enum:
              - member
              - admin
        - name: email
          in: path
          description: email of user or group to add
          required: true
          schema:
            type: string
      responses:
        204:
          description: Successfully Removed User From Group
          content: {}
        403:
          description: You must be an admin of this group in order to remove members
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: FireCloud Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
  /api/inputsOutputs:
    post:
      tags:
        - Method Repository
      summary: Get information about a method's inputs and outputs
      operationId: getMethodIO
      requestBody:
        description: name of Method to look up
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodID'
        required: true
      responses:
        200:
          description: Method Configuration inputs and outputs
          content: {}
        400:
          description: Method WDL can't be parsed
          content: {}
        404:
          description: No Such Method
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: methodName
  /api/library/admin/reindex:
    post:
      tags:
        - Library
      summary: |
        deletes and rebuilds the entire index of published library datasets
      operationId: reindexAll
      responses:
        200:
          description: Indexing Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryBulkIndexResponse'
        204:
          description: No published datasets exist to index
          content:
            application/json:
              schema:
                type: string
        500:
          description: Indexing Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryBulkIndexResponse'
      x-passthrough: false
  /api/library/groups:
    get:
      tags:
        - Library
      summary: |
        returns groups that can be used for discoverable datasets
      operationId: groups
      responses:
        200:
          description: Names of the allowed groups
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
      x-passthrough: false
  /api/library/search:
    post:
      tags:
        - Library
      summary: |
        searches published library datasets
      operationId: FindDocuments
      requestBody:
        description: Search terms and pagination parameters
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/SearchTermRef'
        required: false
      responses:
        200:
          description: Matching datasets
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: searchParams
  /api/library/suggest:
    post:
      tags:
        - Library
      summary: |
        search suggestions
      operationId: searchSuggest
      requestBody:
        description: Search terms and pagination parameters
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/SearchTermRef'
        required: false
      responses:
        200:
          description: Search suggestions, with highlighting
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: searchParams
  /api/library/populate/suggest/{field}:
    get:
      tags:
        - Library
      summary: |
        suggestions for populating a field
      operationId: populateSuggest
      parameters:
        - name: field
          in: path
          description: the property to get suggestions for
          required: true
          schema:
            type: string
        - name: q
          in: query
          description: the initial text to complete
          required: true
          schema:
            type: string
      responses:
        200:
          description: Field specific suggestions
          content: {}
        400:
          description: Bad Request, specified field that was not configured for suggestions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
  /api/library/user/role/curator:
    get:
      tags:
        - Profile
      summary: Query to see if you're a library curator
      description: gets the curator status of a user
      operationId: isCurator
      responses:
        200:
          description: are you a curator?
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CuratorStatus'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
  /api/library/{workspaceNamespace}/{workspaceName}/discoverableGroups:
    get:
      tags:
        - Library
      summary: |
        get the groups that can discover this library dataset
      operationId: getDiscoverableGroups
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: The groups that can discover the dataset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringArray'
        403:
          description: Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
    put:
      tags:
        - Library
      summary: |
        set the groups that can discover this library dataset
      operationId: updateDiscoverableGroups
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Json array of group names, or empty array for no restrictions
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/StringArray'
        required: true
      responses:
        200:
          description: The workspace, after assigning groups to be able to discover
            the dataset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
        400:
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: Insufficient permissions to change catalog permissions (must
            be owner or have grant or catalog with access to the workspace)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace, user or group not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
      x-codegen-request-body-name: discoverableGroups
  /api/library/{workspaceNamespace}/{workspaceName}/metadata:
    get:
      tags:
        - Library
      summary: |
        get the entire metadata for a library dataset
      operationId: getLibraryMetadata
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LibraryMetadataInput'
        404:
          description: Workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
    put:
      tags:
        - Library
      summary: |
        put the entire metadata for a library dataset
      operationId: putLibraryMetadata
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: validate
          in: query
          description: |
            Should the payload be validated? Validation is always enabled for published datasets and defaults to false for unpublished datasets.
          schema:
            type: boolean
      requestBody:
        description: Library metadata
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/LibraryMetadataInput'
        required: true
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
        404:
          description: Workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
      x-codegen-request-body-name: libraryMetadataJson
  /api/library/{workspaceNamespace}/{workspaceName}/published:
    post:
      tags:
        - Library
      summary: |
        publish the workspace in the Library
      operationId: publishLibraryWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
        204:
          description: Dataset already in requested published state
          content: {}
        403:
          description: You must be the workspace owner and library curator to publish
            a workspace to the library
          content: {}
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
    delete:
      tags:
        - Library
      summary: |
        unpublish the workspace in the Library
      operationId: unpublishLibraryWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Workspace'
        403:
          description: You must be the workspace owner and library curator to unpublish
            a workspace from the library
          content: {}
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
  /api/methods:
    get:
      tags:
        - Method Repository
      summary: |
        Lists Method Repository methods.
      operationId: listMethodRepositoryMethods
      parameters:
        - name: namespace
          in: query
          description: Namespace of method.
          schema:
            type: string
        - name: name
          in: query
          description: Name of method.
          schema:
            type: string
        - name: snapshotId
          in: query
          description: Snapshot ID of method.
          schema:
            type: integer
            format: int32
        - name: snapshotComment
          in: query
          description: Snapshot comment of AgoraEntity
          schema:
            type: string
        - name: synopsis
          in: query
          description: Synopsis of method.
          schema:
            type: string
        - name: documentation
          in: query
          description: Documentation of method.
          schema:
            type: string
        - name: owner
          in: query
          description: Owner of method.
          schema:
            type: string
        - name: payload
          in: query
          description: Payload of method in WDL.
          schema:
            type: string
        - name: entityType
          in: query
          description: Type of Method - Task or Workflow
          schema:
            type: string
      responses:
        200:
          description: An array of methods.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MethodResponse'
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
    post:
      tags:
        - Method Repository
      summary: Add a Method.
      description: |
        Inserts a method into the method repository and
        gives the owner full access permissions. Must supply a namespace
        name, payload, and entityType. Cannot supply a snapshotId
      requestBody:
        description: Agora Entity
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodQuery'
        required: false
      responses:
        201:
          description: Method successfully added.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodResponse'
        400:
          description: Malformed input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        500:
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
      x-codegen-request-body-name: body
  /api/methods/definitions:
    get:
      tags:
        - Method Repository
      summary: List method definitions
      description: |
        List method definitions - i.e. unique namespace/name pairs - with counts
        of snapshots and associated configurations
      responses:
        200:
          description: An array of method definitions.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MethodDefinition'
        500:
          description: Internal error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
  /api/methods/{namespace}/{name}/configurations:
    get:
      tags:
        - Method Repository
      summary: List configurations associated with a method
      description: |
        Given the namespace/name of a method, returns all configurations
        in the repository that reference that method
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
        - $ref: '#/components/parameters/methodNameParam'
      responses:
        200:
          description: An array of configurations.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ConfigurationResponseWithPayloadObject'
        404:
          description: Method not found.
          content: {}
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
  /api/methods/{namespace}/{name}/{snapshotId}:
    get:
      tags:
        - Method Repository
      summary: Find a single method.
      description: |
        Returns one method that matches the namespace,
        name, and snapshotId.
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
        - $ref: '#/components/parameters/methodNameParam'
        - $ref: '#/components/parameters/methodSnapshotId'
        - name: onlyPayload
          in: query
          description: Boolean to return only the payload of the method.
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: A single method.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodResponse'
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
    post:
      tags:
        - Method Repository
      summary: Create a new snapshot of an existing Method.
      description: |
        Inserts a new snapshot of the method into the method repository and
        copies access permissions from previous snapshot, optionally redacting
        the source snapshot. Documentation, synopsis, and payload are the only
        arguments considered for the new snapshot; everything else is copied
        from the source.
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
        - $ref: '#/components/parameters/methodNameParam'
        - $ref: '#/components/parameters/methodSnapshotId'
        - name: redact
          in: query
          description: Should the source method be redacted?
          schema:
            type: boolean
            default: false
      requestBody:
        description: Agora Entity
        content:
          application/json:
            schema:
              type: object
              properties:
                synopsis:
                  type: string
                  description: Synopsis which contains AgoraEntity.
                  default: Quickly aligns short nucleotide sequences.
                documentation:
                  type: string
                  description: Documentation of the AgoraEntity.
                  default: |
                    BWA is a software package for mapping low-divergent sequences
                    against a large reference genome, such as the human genome.
                    It consists of three algorithms: BWA-backtrack, BWA-SW and BWA-MEM.
                payload:
                  type: string
                  description: Payload of method -- must be in WDL format
                  default: |
                    task wc {File in_file command { cat ${in_file} | wc -l } output { Int count = read_int(stdout()) }}
                snapshotComment:
                  type: string
                  description: Snapshot comment of the AgoraEntity
                  default: Improve spline reticulation
        required: false
      responses:
        200:
          description: Method successfully copied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodResponse'
        206:
          description: Method successfully copied, but error while redacting.
          content: {}
        400:
          description: Malformed input.
          content: {}
        403:
          description: Forbidden to create copy.
          content: {}
        404:
          description: Source snapshot not found.
          content: {}
        500:
          description: Internal error.
          content: {}
      x-passthrough: true
      x-passthrough-target: agora
      x-codegen-request-body-name: body
    delete:
      tags:
        - Method Repository
      summary: Redact a single method.
      description: |
        Redacts a method and all of its associated configurations
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
        - $ref: '#/components/parameters/methodNameParam'
        - $ref: '#/components/parameters/methodSnapshotId'
      responses:
        200:
          description: |
            An integer showing how many methods were deleted.
          content:
            application/json:
              schema:
                type: integer
                format: int32
        default:
          description: Error upon redaction
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
  /api/methods/{namespace}/{name}/{snapshotId}/configurations:
    get:
      tags:
        - Method Repository
      summary: List compatible configurations for this method snapshot
      description: |
        Returns all configurations that 1. have the exact same input and output
        arguments as the supplied method snapshot, and 2. reference any snapshot
        of this method.
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
        - $ref: '#/components/parameters/methodNameParam'
        - $ref: '#/components/parameters/methodSnapshotId'
      responses:
        200:
          description: An array of configurations.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ConfigurationResponseWithPayloadObject'
        404:
          description: Method not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: agora
  /api/methods/{namespace}/{name}/{snapshotId}/permissions:
    get:
      tags:
        - Method Repository
      summary: get ACL permissions on a Method Repository method
      operationId: getMethodACL
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
        - $ref: '#/components/parameters/methodNameParam'
        - $ref: '#/components/parameters/methodSnapshotId'
      responses:
        200:
          description: the indicated method ACL
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodConfigACL'
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Method Repository
      summary: set ACL permissions on a Method Repository method
      operationId: setMethodACL
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
        - $ref: '#/components/parameters/methodNameParam'
        - $ref: '#/components/parameters/methodSnapshotId'
      requestBody:
        description: the ACLs to upsert
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodConfigACL'
        required: true
      responses:
        200:
          description: the indicated method ACL once the posted changes have been
            applied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodConfigACL'
        400:
          description: Bad Request
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: payload
  /api/methods/{namespace}/permissions:
    get:
      tags:
        - Method Repository
      summary: get ACL permissions on a Method Repository Method Namespace
      operationId: getMethodNamespaceACL
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
      responses:
        200:
          description: List of indicated method namespace ACL permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodConfigACL'
        403:
          description: user does not have correct permissions to manage namespace
            permissions or the indicated namespace was not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Method Repository
      summary: set ACL permissions on a Method Repository Method Namespace
      operationId: setMethodNamespaceACL
      parameters:
        - $ref: '#/components/parameters/methodNamespaceParam'
      requestBody:
        description: the ACLs to upsert
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodConfigACL'
        required: true
      responses:
        200:
          description: the indicated method namespace ACL permissions once the posted
            changes have been applied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodConfigACL'
        400:
          description: Invalid content format
          content: {}
        403:
          description: User does not have correct permissions to manage namespace
            permissions or the indicated namespace was not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: payload
  /api/methods/permissions:
    put:
      tags:
        - Method Repository
      summary: set ACLs for multiple methods in one call
      operationId: multiUpsertMethodsACL
      requestBody:
        description: method acls to upsert
        content:
          'application/json':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/MethodAclPair'
        required: true
      responses:
        200:
          description: the indicated method namespace ACL permissions once the posted
            changes have been applied
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MethodAclPair'
            text/plain:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MethodAclPair'
        400:
          description: Invalid content format
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: methodacls
  /api/nih/callback:
    post:
      tags:
        - NIH
      summary: Updates a user's NIH link from a JWT
      operationId: NIHCallback
      requestBody:
        description: JWT from NIH login
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/JWTWrapper'
        required: true
      responses:
        200:
          description: Successfully updated NIH link
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NihStatus'
        400:
          description: Invalid or malformed JWT
          content: {}
        401:
          description: Unauthorized
          content: {}
        500:
          description: Internal server error saving NIH link to profile
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: jwt
  /api/nih/status:
    get:
      tags:
        - NIH
      summary: Retrieves info about a user's NIH link
      operationId: NIHStatus
      responses:
        200:
          description: Successfully retrieved NIH status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NihStatus'
        404:
          description: linkedNihUsername key missing from status
          content: {}
        500:
          description: Internal server error retrieving NIH status
          content: {}
      x-passthrough: false
  /api/nih/account:
    delete:
      tags:
        - NIH
      summary: Unlinks a user's NIH account from their Terra account
      operationId: NIHUnlink
      responses:
        204:
          description: Successfully unlinked NIH account
        404:
          description: NIH account link not found
          content: {}
        500:
          description: Internal server error unlinking NIH account
          content: {}
      x-passthrough: false
  /api/notifications/general:
    get:
      tags:
        - Notifications
      summary: Gets the general notifications available
      operationId: generalNotifications
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NotificationType'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/notifications/workspace/{workspaceNamespace}/{workspaceName}:
    get:
      tags:
        - Notifications
      summary: Gets the notifications available for a workspace
      operationId: workspaceNotifications
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NotificationType'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/profile/billingAccounts:
    get:
      tags:
        - Profile
      summary: List billing accounts for a user
      operationId: billingAccounts
      parameters:
        - name: firecloudHasAccess
          in: query
          description: |
            Whether the Firecloud service has been given access to the billing accounts. Optional.
          required: false
          example: true
          schema:
            type: boolean
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BillingAccount'
        403:
          description: Forbidden - redirect to Google to enable appropriate scopes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingAccountRedirect'
        500:
          description: Internal Server Error
          content: {}
      security:
        - oidc_google_billing_scope: []
      x-passthrough: true
      x-passthrough-target: rawls
  /api/profile/importstatus:
    get:
      tags:
        - Profile
        - Method Configurations
      summary: Check the user's ability to import a method config into a workspace
      operationId: importStatus
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserImportPermission'
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/profile/preferences:
    post:
      tags:
        - Profile
      summary: Update the preferences for the user
      operationId: updateProfile
      requestBody:
        description: The preferences to set as a Map[String, String]
        content:
          'application/json':
            schema:
              type: object
              additionalProperties:
                type: string
        required: true
      responses:
        204:
          description: Success (No Content)
          content: {}
        400:
          description: Bad Request
          content: { }
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: preferences
  /api/profile/terra:
    get:
      tags:
        - Profile
      summary: Returns the current user's preference for Terra UI vs. Legacy view
      operationId: getTerraPreference
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TerraPreference'
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Profile
      summary: Sets the current user's preference to use Terra UI, not Legacy view
      operationId: setTerraPreference
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TerraPreference'
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    delete:
      tags:
        - Profile
      summary: Sets the current user's preference to use Legacy view, not Terra UI
      operationId: setFCPreference
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TerraPreference'
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/refresh-token-status:
    get:
      tags:
        - OAuth
      summary: deprecated
      description: |
        This API is a deprecated noop. Previously, it returned the status of the current user's refresh token.
        Since refresh tokens are no longer used in the back end, this API is now hardcoded to respond as if the
        user's refresh token is valid. This API may be removed in a future release.
      operationId: getRefreshTokenStatus
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
      x-passthrough: false
  /api/sharelog/sharees:
    get:
      tags:
        - ShareLog
      summary: |
        Get a list of users with whom current user has shared a Workspace.
      description: |
        Get a list of users with whom current user has shared a Workspace.
      operationId: getSharees
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringArray'
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
  /api/staticNotebooks/convert:
    post:
      tags:
        - Static Notebooks
      summary: |
        Convert a Notebook ipynb file to a static HTML representation
      description: |
        Convert a Notebook ipynb file to a static HTML representation
      operationId: convertNotebook
      requestBody:
        description: Notebook ipynb file
        content:
          'application/json':
            schema:
              type: string
        required: true
      responses:
        200:
          description: Success
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: calhoun
      x-codegen-request-body-name: notebook
  /api/submissions/queueStatus:
    get:
      tags:
        - Submissions
      summary: workflow queue status
      description: List workflow counts by queueing state
      operationId: workflowQueueStatus
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowQueueStatusResponse'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/template:
    post:
      tags:
        - Method Repository
      summary: Create a Method Configuration template from a Method
      operationId: createMethodTemplate
      requestBody:
        description: name of Method to use for template
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodID'
        required: true
      responses:
        200:
          description: Method Configuration template
          content: {}
        400:
          description: Method WDL can't be parsed
          content: {}
        404:
          description: No Such Method
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: methodName
  /version:
    get:
      tags:
        - Version
      summary: Returns the currently deployed version of this service.
      operationId: orchestrationVersion
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrchestrationVersion'
      x-passthrough: false
  /version/executionEngine:
    get:
      tags:
        - Version
      summary: Returns the currently deployed version of Terra's execution engine
      operationId: executionEngineVersion
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExecutionEngineVersion'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces:
    get:
      tags:
        - Workspaces
      summary: |
        Lists workspaces.
      operationId: listWorkspaces
      parameters:
        - name: fields
          in: query
          description: |
            When specified, include only these keys in the response payload and exclude other keys. Accepts a comma-delimited list of values. To include a nested key, specify the key's path using a dot delimiter; for example, to include {"workspace": {"attributes": {}}}, specify "workspace.attributes". Legal values are any first-level key in the response, any first-level key inside the {"workspace": {}} object, and any first-level key inside the {"workspace": {"attributes": {}}} object. If omitted, will return the full response payload.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        200:
          description: List of workspaces.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkspaceListResponse'
            text/plain:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkspaceListResponse'
        400:
          description: Unrecognized query parameters
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    post:
      tags:
        - Workspaces
      summary: Create workspace
      operationId: createWorkspace
      requestBody:
        description: New workspace information
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/WorkspaceRequest'
        required: true
      responses:
        201:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceDetails'
        400:
          description: Bad request
          content: {}
        403:
          description: Unable to create bucket for workspace
          content: {}
        409:
          description: Workspace by that name already exists
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: workspace
  /api/workspaces/{workspaceNamespace}/{workspaceName}:
    get:
      tags:
        - Workspaces
      summary: Get workspace
      description: |
        Get a single workspace's details, optionally filtered to only the specified fields. See additional GET methods in this section to retrieve additional details about the workspace. For instance, this API only returns the workspace's owners; use the GET .../acl method to retrieve the full list of all users at all permission levels.
      operationId: getWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: fields
          in: query
          description: |
            When specified, include only these keys in the response payload and exclude other keys. Accepts a comma-delimited list of values. To include a nested key, specify the key's path using a dot delimiter; for example, to include {"workspace": {"attributes": {}}}, specify "workspace.attributes". Legal values are any first-level key in the response, any first-level key inside the {"workspace": {}} object, and any first-level key inside the {"workspace": {"attributes": {}}} object. If omitted, will return the full response payload.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceResponse'
        400:
          description: Unrecognized query parameters
          content: {}
        404:
          description: Workspace does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    delete:
      tags:
        - Workspaces
      summary: Delete workspace
      operationId: deleteWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        202:
          description: Request Accepted
          content: {}
        403:
          description: User does not have correct permissions to delete a published
            workspace
          content: {}
        404:
          description: Workspace does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/accessInstructions:
    get:
      tags:
        - Workspaces
      summary: Get workspace access instructions (if any)
      operationId: getWorkspaceAccessInstructions
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ManagedGroupAccessInstructions'
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/acl:
    get:
      tags:
        - Workspaces
      summary: Get workspace ACL
      operationId: getWorkspaceAcl
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceACL'
        400:
          description: Can't retrieve ACL for workspace
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    patch:
      tags:
        - Workspaces
      summary: Update workspace ACL
      operationId: updateWorkspaceACL
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: inviteUsersNotFound
          in: query
          description: true to invite unregistered users, false to ignore
          required: true
          schema:
            type: boolean
            default: false
      requestBody:
        description: Series of ACL updates for workspace
        content:
          'application/json':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WorkspaceACLUpdate'
        required: true
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceACLUpdateResponseList'
        400:
          description: Can't set ACL for workspace
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: aclUpdates
  /api/workspaces/{workspaceNamespace}/{workspaceName}/bucketOptions:
    get:
      tags:
        - Workspaces
      summary: Get metadata about the workspace bucket
      description: Returns metadata about the workspace bucket.
      operationId: getWorkspaceBucketOptions
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceBucketOptions'
        404:
          description: Workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/bucketUsage:
    get:
      tags:
        - Workspaces
      summary: Get bucket usage
      operationId: getBucketUsage
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/BucketUsageResponse'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/catalog:
    get:
      tags:
        - Workspaces
      summary: Get workspace catalog permission
      description: Get catalog permissions for a workspace
      operationId: getCatalog
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkspaceCatalog'
        404:
          description: Workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
    patch:
      tags:
        - Workspaces
      summary: Update catalog permission
      description: Set catalog permisisons for a workspace
      operationId: updateCatalog
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Series of Catalog updates for workspace
        content:
          'application/json':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WorkspaceCatalog'
        required: true
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceCatalogUpdateResponseList'
        403:
          description: Insufficient permissions to change catalog permissions (must
            be owner or admin)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace, user or group not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: false
      x-codegen-request-body-name: catalogUpdates
  /api/workspaces/{workspaceNamespace}/{workspaceName}/checkBucketReadAccess:
    get:
      tags:
        - Workspaces
      summary: Read workspace bucket
      description: Read a workspace bucket
      operationId: readBucket
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content: {}
        403:
          description: Insufficient permissions to access workspace bucket
          content: {}
        404:
          description: Workspace Not Found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/checkIamActionWithLock/{samActionName}:
    get:
      tags:
        - Workspaces
      summary: Check IAM action with lock
      description: Check to see if the user has the given action on a workspace in
        Sam. Takes into account if the workspace is locked too.
      operationId: checkIamActionWithLock
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: samActionName
          in: path
          description: Sam action
          required: true
          schema:
            type: string
      responses:
        204:
          description: User can perform the given action on the workspace
          content: {}
        403:
          description: User may not perform the given action on the workspace (including
            if it doesn't exist)
          content: {}
        500:
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/clone:
    post:
      tags:
        - Workspaces
      summary: Clone Workspace
      operationId: cloneWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Cloned workspace information
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/WorkspaceRequestClone'
        required: true
      responses:
        201:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceDetails'
        400:
          description: Unable to create resources for workspace
          content: {}
        404:
          description: Source workspace not found
          content: {}
        409:
          description: Destination workspace already exists
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: workspace
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities:
    get:
      tags:
        - Entities
      summary: |
        List of entity types in a workspace
      operationId: getEntityTypes
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: List of entity types in workspace
          content: {}
        404:
          description: Workspace does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities_with_type:
    get:
      tags:
        - Entities
      summary: |
        List of entities in a workspace with type and attribute information
      operationId: getEntitiesWithType
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: List of entities
          content: {}
        404:
          description: Workspace or entities not found.
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/copy:
    post:
      tags:
        - Entities
      summary: |
        Copy entities from one workspace to another
      operationId: copyEntities
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: linkExistingEntities
          in: query
          description: true to link new entities to existing entities, false to fail
            instead of link
          schema:
            type: boolean
            default: false
      requestBody:
        description: Entities to Copy
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/CopyEntity'
        required: true
      responses:
        201:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityCopyResponse'
        404:
          description: Source Workspace or source entities does not exist
          content: {}
        409:
          description: There are conflicts in your copy operation. Retry with the
            paramater linkExistingEntities=true to link all soft conflicts to the
            entities that already exist in your workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityCopyResponse'
        422:
          description: Destination workspace must match source's authorization domain,
            if the source has one
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: body
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/delete:
    post:
      tags:
        - Entities
      summary: Bulk delete entities from a workspace
      operationId: deleteEntities
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Entities to delete
        content:
          'application/json':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/EntityID'
        required: true
      responses:
        204:
          description: Successful Request
          content: {}
        400:
          description: Not all Entities exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: Cannot create dangling references when deleting Entities -
            must specify whole set
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EntityID'
        500:
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: body
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}:
    get:
      tags:
        - Entities
      summary: |
        List of entities in a workspace
      operationId: getEntities
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
      responses:
        200:
          description: List of entities in workspace
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Entity'
        404:
          description: Workspace or entity type does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/{entityName}:
    get:
      tags:
        - Entities
      summary: Get entity in a workspace
      operationId: getEntity
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - $ref: '#/components/parameters/entityNameParam'
      responses:
        200:
          description: Success
          content: {}
        404:
          description: Workspace or Entity does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    patch:
      tags:
        - Entities
      summary: Update entity in a workspace
      description: Update an entity
      operationId: update_entity
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - $ref: '#/components/parameters/entityNameParam'
      requestBody:
        description: Update operations for attributes
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/AttributeUpdateOperationArray'
        required: false
      responses:
        200:
          description: Entity updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Entity'
        400:
          description: Attribute does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: User does not have permission to update attributes in the namespace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace or Entity not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: attributeUpdateJson
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/{entityName}/evaluate:
    post:
      tags:
        - Entities
      summary: Evaluate entity expression
      operationId: evaluateEntityExpression
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - $ref: '#/components/parameters/entityNameParam'
      requestBody:
        description: Expression
        content:
          'application/json':
            schema:
              type: string
        required: true
      responses:
        200:
          description: Success
          content: {}
        400:
          description: Invalid entity expression
          content: {}
        404:
          description: Workspace or Entity does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: expression
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/{entityName}/rename:
    post:
      tags:
        - Entities
      summary: rename entity in a workspace
      description: Rename an entity
      operationId: renameEntity
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - $ref: '#/components/parameters/entityNameParam'
      requestBody:
        description: New entity name
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/EntityName'
        required: true
      responses:
        204:
          description: Successful Request
          content: {}
        404:
          description: Workspace or Entity not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: New name for entity already exists in workspace
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
      x-codegen-request-body-name: newEntityNameJson
  /api/workspaces/{workspaceNamespace}/{workspaceName}/exportAttributesTSV:
    get:
      tags:
        - Workspaces
      summary: |
        TSV file containing workspace attributes
      operationId: exportAttributesTSV
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Workspace attributes in TSV format
          content:
            text/plain:
              schema:
                type: string
                format: binary
        404:
          description: Workspace does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/tsv:
    get:
      tags:
        - Entities
      summary: |
        Download a TSV file containing workspace entities
      operationId: downloadEntitiesTSV
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - name: attributeNames
          in: query
          description: comma separated list of ordered attribute names to be in downloaded
            tsv
          schema:
            type: string
        - name: model
          in: query
          description: firecloud (default) or flexible
          schema:
            type: string
      responses:
        200:
          description: Workspace entities of specified type in TSV format
          content:
            text/plain:
              schema:
                type: string
                format: binary
        404:
          description: Workspace or entity type does not exist
          content: {}
        414:
          description: |
            URI length exceeds the configured limit of 2048 characters.
            When necessary to supply a large number of attribute names, please use one of:
            * POST /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/tsv
            * POST /cookie-authed/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/tsv
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Entities
      summary: |
        Save TSV file containing workspace entities to the workspace bucket.
      description: |
        Requires write access to the workspace.
      operationId: bucketWriteEntitiesTSV
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                attributeNames:
                  type: string
                  description: comma separated list of ordered attribute names to
                    be in downloaded tsv
                model:
                  type: string
                  description: flexible or firecloud (firecloud model will be used
                    by default)
        required: true
      responses:
        200:
          description: URL to saved file
          content:
            text/plain:
              schema:
                type: string
                format: binary
        404:
          description: Workspace or entity type does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/paired-tsv:
    post:
      tags:
        - Entities
      summary: |
        Download a TSV of files in the workspace's bucket, paired by naming convention
      description: |
        Lists the files in the workspace's bucket, filtered to a specified prefix. Then,
        attempts to pair those files to each other based on well-known naming conventions.
        Downloads a TSV containing the result of those pairings.
      operationId: bucketPairedTSV
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/FileMatchingOptions'
            examples:
              minimally-required:
                value:
                  prefix: my-bucket-prefix
              disable-recursion:
                value:
                  prefix: my-bucket-prefix/
                  recursive: false
              rename-columns:
                value:
                  prefix: my-bucket-prefix
                  read1Name: my-column-name-one
                  read2Name: my-column-name-two
        required: true
      responses:
        200:
          description: URL to saved file
          content:
            text/plain:
              schema:
                type: string
                format: binary
        404:
          description: Workspace or entity type does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entityQuery/{entityType}:
    get:
      tags:
        - Entities
      summary: Paginated query for entities in a workspace
      operationId: entityQuery
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - name: page
          in: query
          description: Page number, 1-indexed (default 1)
          schema:
            minimum: 1
            type: integer
            format: int32
            default: 1
        - name: pageSize
          in: query
          description: Page size (default 10)
          schema:
            minimum: 1
            type: integer
            format: int32
            default: 10
        - name: sortField
          in: query
          description: Sort field (default "name")
          schema:
            type: string
            default: name
        - name: sortDirection
          in: query
          description: Sort direction (asc or desc, default asc)
          schema:
            type: string
            default: asc
            enum:
              - asc
              - desc
        - name: filterTerms
          in: query
          description: terms to search for, using substring matching, in all attributes of an entity. Mutually exclusive with the columnFilter parameter.
          schema:
            type: string
        - name: filterOperator
          in: query
          description: Filter operator to use with multiple terms in filterTerms (AND or OR, default AND)
          schema:
            type: string
            default: and
            enum:
              - and
              - or
        - name: columnFilter
          in: query
          description: exact-match filter for a value in a single column, in the form columnName=string-to-match. Mutually exclusive with the filterTerms parameter.
          schema:
            type: string
        - name: fields
          in: query
          description: |
            When specified, include only these attributes in the response payload and exclude other attributes. Accepts a comma-delimited list of values. If omitted, will return the full response payload.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
      responses:
        200:
          description: List of entities in workspace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityQueryResponse'
        404:
          description: Workspace or entity type does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/importAttributesTSV:
    post:
      tags:
        - Workspaces
      summary: Import workspace attributes from a tsv file
      operationId: importAttributesTSV
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - attributes
              properties:
                attributes:
                  type: string
                  description: A valid TSV import file
                  format: binary
        required: true
      responses:
        200:
          description: Successful Request
          content: {}
        400:
          description: Bad Request
          content: {}
        404:
          description: Source Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/importEntities:
    post:
      tags:
        - Entities
      summary: Import entities from a tsv file
      operationId: importEntities
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: deleteEmptyValues
          in: query
          description: Delete empty values? Values left blank in the TSV will be deleted if set to true (default is false)
          required: false
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - entities
              properties:
                entities:
                  type: string
                  description: A valid TSV import file
                  format: binary
        required: true
      responses:
        200:
          description: Successful Request
          content: {}
        400:
          description: Bad Request
          content: {}
        404:
          description: Source Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/importPFB:
    get:
      deprecated: true
      tags:
        - Entities
      summary: List PFB import jobs in this workspace
      description: |
        Lists all imports for this workspace, optionally filtered to only those imports currently in progress
      operationId: listImportPFBJobs
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: running_only
          in: query
          description: When true, filters to only those imports currently in progress
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ImportJobStatusResponse'
        400:
          description: Bad Request
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Entities
      summary: Import PFB data from an [Avro](https://avro.apache.org/) file
      description: |
        This API will return a jobID representing the import operation. The import itself will continue asynchronously in the background.
      operationId: importPFB
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: JSON object containing PFB URL
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/PFBRequest'
        required: true
      responses:
        202:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportResponse'
        400:
          description: Bad Request
          content: {}
        401:
          description: Unauthorized access to Workspace
          content: {}
        403:
          description: Forbidden access to Workspace
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: pfbImportRequest
  /api/workspaces/{workspaceNamespace}/{workspaceName}/importPFB/{jobId}:
    get:
      deprecated: true
      tags:
        - Entities
      summary: Use the importJob API instead.
      description: |
        Use /api/workspaces/{workspaceNamespace}/{workspaceName}/importJob/{jobId} instead.
      operationId: importPFBStatus
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: jobId
          in: path
          description: job ID of the import to check
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobStatusResponse'
        404:
          description: workspace or job ID not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/importJob:
    get:
      tags:
        - Entities
      summary: List asynchronous import jobs in this workspace
      description: |
        Lists all imports for this workspace, optionally filtered to only those imports currently in progress
      operationId: listImportJobs
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: running_only
          in: query
          description: When true, filters to only those imports currently in progress
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ImportJobStatusResponse'
        400:
          description: Bad Request
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Entities
      summary: Import data from a PFB file or TDR snapshot
      description: |
        This API will return a jobID representing the import operation. The import itself will continue asynchronously in the background.
      operationId: createImportJob
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: JSON object containing URL to import
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ImportRequest'
        required: true
      responses:
        202:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportResponse'
        400:
          description: Bad Request
          content: {}
        401:
          description: Unauthorized access to Workspace
          content: {}
        403:
          description: Forbidden access to Workspace
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: importRequest
  /api/workspaces/{workspaceNamespace}/{workspaceName}/importJob/{jobId}:
    get:
      tags:
        - Entities
      summary: Report status on an asynchronous import job
      description: |
        This API will return status of an import jobID. The jobID was returned from a previous import request.
      operationId: importJobStatus
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: jobId
          in: path
          description: job ID of the import to check
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportJobStatusResponse'
        404:
          description: workspace or job ID not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/flexibleImportEntities:
    post:
      tags:
        - Entities
      summary: Import entities from a tsv file
      operationId: flexibleImportEntities
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: async
          in: query
          description: Import asynchronously?
          required: false
          schema:
            type: boolean
            default: false
        - name: deleteEmptyValues
          in: query
          description: Delete empty values? Values left blank in the TSV will be deleted if set to true (default is false)
          required: false
          schema:
            type: boolean
            default: false
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - entities
              properties:
                entities:
                  type: string
                  description: A valid TSV import file
                  format: binary
        required: true
      responses:
        200:
          description: Successful Request for synchronous import
          content: {}
        202:
          description: Successful Request for asynchronous import
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportResponse'
        400:
          description: Bad Request
          content: {}
        404:
          description: Source Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/lock:
    put:
      tags:
        - Workspaces
      summary: Lock Workspace
      operationId: lockWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: No response was specified
          content: {}
        204:
          description: Successful Request
          content: {}
        403:
          description: Not Owner
          content: {}
        404:
          description: Workspace Not Found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/method_configs/{configNamespace}/{configName}:
    get:
      tags:
        - Method Configurations
      summary: Get a method configuration in a workspace
      operationId: getWorkspaceMethodConfig
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: configNamespace
          in: path
          description: Configuration Namespace
          required: true
          schema:
            type: string
        - name: configName
          in: path
          description: Configuration Name
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful
          content: {}
        404:
          description: Workspace or Method Configuration not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    put:
      tags:
        - Method Configurations
      summary: Add or overwrite a method configuration in a workspace
      description: |
        Add or overwrite a method configuration in a workspace.
        The method configuration name and namespace in the URI must match the values in the JSON.
      operationId: overwriteWorkspaceMethodConfig
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: configNamespace
          in: path
          description: Configuration Namespace
          required: true
          schema:
            type: string
        - name: configName
          in: path
          description: Configuration Name
          required: true
          schema:
            type: string
      requestBody:
        description: Method Config to Update
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ConfigurationIngest'
        required: true
      responses:
        200:
          description: Successful
          content: {}
        400:
          description: Method configuration name and namespace in URI do not match
            those in JSON body
          content: {}
        404:
          description: Workspace or Method Configuration not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: body
    post:
      tags:
        - Method Configurations
      summary: Update a method configuration in a workspace
      description: |
        Update method configuration.
        Updates and moves the method configuration at the URI to the location in the request body.
        The location in the URI may be the same as the location in the request body.
        If the location in the request body matches the location in the URI, it is overwritten.
        If the location in the request body is different to the location in the URI, and there is a method config already at that location, 409 is returned.
      operationId: updateWorkspaceMethodConfig
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: configNamespace
          in: path
          description: Configuration Namespace
          required: true
          schema:
            type: string
        - name: configName
          in: path
          description: Configuration Name
          required: true
          schema:
            type: string
      requestBody:
        description: Method Config to Update
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ConfigurationIngest'
        required: true
      responses:
        200:
          description: Successful
          content: {}
        403:
          description: Invalid attribute namespace(s) in outputs
          content: {}
        404:
          description: Workspace or Method Configuration not found
          content: {}
        409:
          description: Method configuration with the new name already exists in the
            workspace
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: body
    delete:
      tags:
        - Method Configurations
      summary: Delete a method configuration in a workspace
      operationId: deleteWorkspaceMethodConfig
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: configNamespace
          in: path
          description: Configuration Namespace
          required: true
          schema:
            type: string
        - name: configName
          in: path
          description: Configuration Name
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful request
          content: {}
        404:
          description: Workspace or Method Configuration not found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/method_configs/{configNamespace}/{configName}/rename:
    post:
      tags:
        - Method Configurations
      summary: Rename a method configuration in a workspace
      operationId: renameWorkspaceMethodConfig
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: configNamespace
          in: path
          description: Configuration Namespace
          required: true
          schema:
            type: string
        - name: configName
          in: path
          description: Configuration Name
          required: true
          schema:
            type: string
      requestBody:
        description: Method Config Rename
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/MethodConfigRename'
        required: true
      responses:
        204:
          description: Successful request
          content: {}
        400:
          description: Workspace details in payload don't match the URI
          content: {}
        404:
          description: Workspace or Method Configuration not found
          content: {}
        409:
          description: Method Configuration with that name already exists
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: rename
  /api/workspaces/{workspaceNamespace}/{workspaceName}/method_configs/{configNamespace}/{configName}/validate:
    get:
      tags:
        - Method Configurations
      summary: get syntax validation information for a method configuration
      operationId: validate_method_configuration
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: configNamespace
          in: path
          description: Method Configuration Namespace
          required: true
          schema:
            type: string
        - name: configName
          in: path
          description: Method Configuration Name
          required: true
          schema:
            type: string
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidatedMethodConfiguration'
        404:
          description: Workspace or Method Configuration does not exist
          content: {}
        500:
          description: Rawls Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/method_configs/copyFromMethodRepo:
    post:
      tags:
        - Method Configurations
        - Method Repository
      summary: Copy a Method Repository Configuration into a workspace
      operationId: copyFromMethodRepo
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Method Configuration to Copy
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/CopyConfigurationIngest'
        required: true
      responses:
        201:
          description: Successful request
          content: {}
        404:
          description: Source method configuration does not exist
          content: {}
        409:
          description: Destination method configuration by that name already exists
          content: {}
        422:
          description: Error parsing source method configuration
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: configToCopy
  /api/workspaces/{workspaceNamespace}/{workspaceName}/method_configs/copyToMethodRepo:
    post:
      tags:
        - Method Configurations
        - Method Repository
      summary: Copy a Method Config in a workspace to the Method Repository
      operationId: copyToMethodRepo
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Method Configuration to Copy
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/PublishConfigurationIngest'
        required: true
      responses:
        201:
          description: Successful request
          content: {}
        404:
          description: Source method configuration does not exist
          content: {}
        409:
          description: Destination method configuration by that name already exists
          content: {}
        422:
          description: Error parsing source method configuration
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: configToCopy
  /api/workspaces/{workspaceNamespace}/{workspaceName}/methodconfigs:
    get:
      tags:
        - Method Configurations
        - Workspaces
      summary: List method configurations in a workspace
      description: |
        List method configurations in a workspace. By default, only Agora method configs are returned. To return configs for all repos, specify `allRepos` to be `true`.

        #### Expanded discussion on the methodRepoMethod field

        This endpoint returns method references to Agora in the format
        ```
        "methodRepoMethod": {
          "methodNamespace": "namespace",
          "methodName": "name",
          "methodVersion": 1,
          "sourceRepo": "agora",
          "methodUri": "agora://namespace/name/1"
        }
        ```
        and for Dockstore in the format
        ```
        "methodRepoMethod": {
          "methodPath": "path",
          "methodVersion": "version",
          "sourceRepo": "agora",
          "methodUri": "dockstore://path/version"
        }
        ```
        If you are only working with Agora methods, the fields `"sourceRepo"` and `"methodUri"` can be considered informational and do not need to be round-tripped (see the corresponding `POST /api/workspaces/{workspaceNamespace}/{workspaceName}/methodconfigs` for more details).
      operationId: listWorkspaceMethodConfigs
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - name: allRepos
          in: query
          description: Configs for all repos, not just Agora
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: List of Method Configurations
          content: {}
        404:
          description: Workspace does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    post:
      tags:
        - Method Configurations
        - Workspaces
      summary: Create a Method Configuration in a workspace
      description: |
        Create method configurations.
        #### Expanded discussion on the methodRepoMethod field
        To create a method config for an Agora method, `"sourceRepo": "agora"` is optional; the following is sufficient:
        ```
        "methodRepoMethod": {
          "methodNamespace": "namespace",
          "methodName": "name",
          "methodVersion": 1
        }
        ```
        To create a method config for a Dockstore method, `"sourceRepo": "dockstore"` is required:
        ```
        "methodRepoMethod": {
          "sourceRepo": "dockstore",
          "methodPath": "path",
          "methodVersion": "version"
        }
        ```
        You may also use the URI on its own to create a config referencing any supported repo (currently Agora and Dockstore):
        ```
        "methodRepoMethod": {
          "methodUri": "agora://namespace/name/1"
        }
        ```
        ```
        "methodRepoMethod": {
          "methodUri": "dockstore://path/version"
        }
        ```
        The system is specified to check for a URI first before falling back to the legacy fields. Unsupported repos will return a 400 Bad Request.
      operationId: postWorkspaceMethodConfig
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Method Configuration contents
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/NewMethodConfigIngest'
        required: true
      responses:
        201:
          description: Successful Request
          content: {}
        404:
          description: Workspace not found
          content: {}
        409:
          description: Method Configuration already exists
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: methodConfigJson
  /api/workspaces/{workspaceNamespace}/{workspaceName}/permissionReport:
    post:
      tags:
        - Method Configurations
        - Workspaces
      summary: Retrieve user permissions for the workspace and the workspace's method
        references
      operationId: workspacePermissionReport
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Users and/or configs on which to report, both optional
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/PermissionReportRequest'
        required: true
      responses:
        200:
          description: Permission Report
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionReport'
        404:
          description: Workspace does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: reportInput
  /api/workspaces/{workspaceNamespace}/{workspaceName}/sendChangeNotification:
    post:
      tags:
        - Workspaces
      summary: Sends notifications for change to workspace
      operationId: changedWorkspaceNotification
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Success
          content: {}
        403:
          description: Insufficient permisions to send notification on this workspace
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/storageCostEstimate:
    get:
      tags:
        - Workspaces
      summary: Calculate an estimate of the monthly storage cost for the workspace
        bucket
      operationId: getStorageCostEstimate
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/BucketStorageCost'
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/submissions:
    get:
      tags:
        - Submissions
      summary: |
        List submissions.
      operationId: listSubmissions
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: List of submissions
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    post:
      tags:
        - Submissions
      summary: |
        Create a submission.
      operationId: createSubmission
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Post Submission
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/SubmissionRequest'
        required: true
      responses:
        201:
          description: Successful Request
          content: {}
        400:
          description: Expression eval failed or entities are not of type required
            by method config
          content: {}
        404:
          description: Method Configuration or Entity not found
          content: {}
        409:
          description: Method Configuration failed to resolve input expressions with
            the supplied Entity
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: submission
  /api/workspaces/{workspaceNamespace}/{workspaceName}/submissionsCount:
    get:
      tags:
        - Submissions
      summary: Count submissions by status
      description: Counts all submissions run in the workspace, grouped by status.
        Returns a map of status:count.
      operationId: countSubmissions
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionsCountResponse'
        404:
          description: Workspace not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/submissions/{submissionId}:
    get:
      tags:
        - Submissions
      summary: |
        Monitor submission status
      operationId: monitorSubmission
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/submissionIdParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Submission'
        404:
          description: Submission not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
    delete:
      tags:
        - Submissions
      summary: |
        abort a submission
      operationId: abortSubmission
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/submissionIdParam'
      responses:
        204:
          description: Aborted successfully
          content: {}
        404:
          description: Submission not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
    patch:
      tags:
        - Submissions
      summary: Update user comment for a submission
      description: Update user comment for a submission
      operationId: updateSubmissionUserComment
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/submissionIdParam'
      requestBody:
        description: User comment to be updated
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/UserCommentUpdateOperation'
        required: true
      responses:
        200:
          description: Successful Request
        404:
          description: Workspace or submission not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
  /api/workspaces/{workspaceNamespace}/{workspaceName}/submissions/validate:
    post:
      tags:
        - Submissions
      summary: Validate submission
      description: Validate expression syntax for a submission
      operationId: validateSubmission
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Description of a submission.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/SubmissionRequest'
        required: true
      responses:
        200:
          description: Validation Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionValidationReport'
        400:
          description: Expression evaluation failed or entities are not of type required
            by method config
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace, Method Configuration or Entity not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        502:
          description: Trouble talking to Agora
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
      x-codegen-request-body-name: submission
  /api/workspaces/{workspaceNamespace}/{workspaceName}/submissions/{submissionId}/workflows/{workflowId}:
    get:
      tags:
        - Submissions
      summary: Get call-level metadata for workflow
      description: Get call-level metadata for workflow
      operationId: workflowMetadata
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/submissionIdParam'
        - $ref: '#/components/parameters/workflowIdParam'
        - name: includeKey
          in: query
          description: |
            When specified, return only these keys in the response. Matches any key in the response, including within nested blocks. May not be used with excludeKey.
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: excludeKey
          in: query
          description: |
            When specified, omit these keys from the response. Matches any key in the response, including within nested blocks. May not be used with includeKey.
          style: form
          explode: true
          schema:
            type: array
            items:
              type: string
        - name: expandSubWorkflows
          in: query
          description: |
            When true, metadata for sub workflows will be fetched and inserted automatically in the metadata response.
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: Successful Request
          content: {}
        404:
          description: Workspace, Submission or Workflow not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/submissions/{submissionId}/workflows/{workflowId}/outputs:
    get:
      tags:
        - Submissions
      summary: |
        Get workflow outputs.
      operationId: workflowOutputsInSubmission
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/submissionIdParam'
        - $ref: '#/components/parameters/workflowIdParam'
      responses:
        200:
          description: Get workflow outputs
          content: {}
        404:
          description: Workspace, Submission or Workflow not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/submissions/{submissionId}/workflows/{workflowId}/cost:
    get:
      tags:
        - Submissions
      summary: |
        Retrieve workflow cost, if available.
      operationId: workflowCostInSubmission
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/submissionIdParam'
        - $ref: '#/components/parameters/workflowIdParam'
      responses:
        200:
          description: Successful Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkflowCost'
        404:
          description: Workspace, Submission or Workflow not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/tags:
    get:
      tags:
        - Workspaces
      summary: |
        Get the tags for this workspace.
      operationId: getWorkspaceTags
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Workspace tags
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringArray'
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
    put:
      tags:
        - Workspaces
      summary: |
        Replace all tags for this workspace with the user input.
      operationId: putWorkspaceTags
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: List of tags.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/StringArray'
        required: true
      responses:
        200:
          description: Workspace tags
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringArray'
        400:
          description: Invalid input
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: tags
    delete:
      tags:
        - Workspaces
      summary: |
        Remove the user-supplied tags from the workspace.
      operationId: deleteWorkspaceTags
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: List of tags.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/StringArray'
        required: true
      responses:
        200:
          description: Workspace tags
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringArray'
        400:
          description: Invalid input
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: tags
    patch:
      tags:
        - Workspaces
      summary: |
        Add tags to the workspace without modifying pre-existing tags.
      operationId: patchWorkspaceTags
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: List of tags.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/StringArray'
        required: true
      responses:
        200:
          description: Workspace tags
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringArray'
        400:
          description: Invalid input
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: tags
  /api/workspaces/{workspaceNamespace}/{workspaceName}/unlock:
    put:
      tags:
        - Workspaces
      summary: Unlock Workspace
      operationId: unlockWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: No response was specified
          content: {}
        204:
          description: Successful Request
          content: {}
        403:
          description: Not Owner
          content: {}
        404:
          description: Workspace Not Found
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /api/workspaces/{workspaceNamespace}/{workspaceName}/updateAttributes:
    patch:
      tags:
        - Workspaces
      summary: |
        Modify attributes on a workspace.
      operationId: updateAttributes
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Attribute operations. WARNING! This should not be used to change
          library metadata (republish will not happen). Use UpdateAttributes in the
          library section.
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/AttributeUpdateOperationArray'
        required: true
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceDetails'
        400:
          description: Invalid operation
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: workspaceUpdateJson
  /api/workspaces/{workspaceNamespace}/{workspaceName}/setAttributes:
    patch:
      tags:
        - Workspaces
      summary: |
        Set attributes on a workspace.
      operationId: setAttributes
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: New attribute values, as Map[String, Attribute]. WARNING! This
          should not be used to change library metadata (republish will not happen).
          Use UpdateAttributes in the library section
        content:
          'application/json':
            schema:
              type: object
              additionalProperties:
                type: object
        required: true
      responses:
        200:
          description: Success
          content: {}
        400:
          description: Malformed request
          content: {}
        404:
          description: Workspace not found
          content: {}
        500:
          description: Internal Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: newAttributes
  /api/workspaces/tags:
    get:
      tags:
        - Workspaces
      summary: |
        Get all workspace tags (for autocomplete)
      description: Get all tags for workspaces that a user has access to (for autocomplete)
      operationId: getTags
      parameters:
        - name: q
          in: query
          description: Query string
          schema:
            type: string
      responses:
        200:
          description: list of all tags used by workspaces that the user
            has access to and their associated frequencies
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkspaceTag'
        500:
          description: Rawls Internal Error
          content: {}
      x-passthrough: true
      x-passthrough-target: rawls
  /cookie-authed/workspaces/{workspaceNamespace}/{workspaceName}/exportAttributesTSV:
    get:
      tags:
        - Workspaces
      summary: |
        TSV file containing workspace attributes (allows cookie-based authentication)
      operationId: browserDownloadAttributes
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Workspace attributes in TSV format
          content:
            text/plain:
              schema:
                type: string
                format: binary
        404:
          description: Workspace does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/v2/{workspaceNamespace}/{workspaceName}:
    delete:
      tags:
        - WorkspacesV2
      summary: Delete workspace
      description: Starts a job to delete a workspace and all of its contents.
      operationId: deleteWorkspaceV2
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        202:
          description: Delete request accepted. Workspace bucket will be deleted within
            24 hours.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/WorkspaceDeletionResult'
        400:
          description: Workspace is not in a deletable state.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: Insufficient permissions to delete workspace (must be owner)
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: Workspace is already being deleted.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
  /api/workspaces/v2/{workspaceNamespace}/{workspaceName}/clone:
    post:
      tags:
        - WorkspacesV2
      summary: Clone workspace
      description: Clone a workspace, asynchronously if possible
      operationId: cloneWorkspaceV2
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: Request for new workspace
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/WorkspaceRequestClone'
        required: true
      responses:
        201:
          description: Successful Request
          headers:
            Location:
              description: The path to the newly cloned workspace
              schema:
                type: string
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/WorkspaceDetails'
        400:
          description: Workspace namespace is not ready
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: User does not have access to create workspace in namespace
            or user does not have permission to set attributes in the namespace
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Source workspace not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: Destination workspace already exists
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        422:
          description: Destination workspace must match source's authorization domain,
            if the dest has one
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
      x-codegen-request-body-name: workspaceRequest

  /api/workspaces/v2/{workspaceNamespace}/{workspaceName}/bucketMigration:
    get:
      tags:
        - WorkspacesV2
      summary: list bucket migration attempts for workspace. empty list for workspaces that have not been migrated before
      description: list bucket migration attempts for workspace. empty list for workspaces that have not been migrated before
      operationId: listBucketMigrationsForWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            'application/json':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkspaceMigrationMetadata'
        403:
          description: You must be an owner to list migration attempts
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace not found or you do not have access to it
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
    post:
      tags:
        - WorkspacesV2
      summary: start bucket migration attempt for Google workspace or restart failed past attempt
      description: start bucket migration attempt for Google workspace or restart failed past attempt
      operationId: startBucketMigrationForWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        201:
          description: Workspace scheduled for migration
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/WorkspaceMigrationMetadata'
        400:
          description: This workspace is ineligible for migration.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: You must be an owner to start migration attempts
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace not found or you do not have access to it
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
  /api/workspaces/v2/{workspaceNamespace}/{workspaceName}/bucketMigration/progress:
    get:
      tags:
        - WorkspacesV2
      summary: get bucket migration progress for workspace
      description: get bucket migration progress for workspace
      operationId: getBucketMigrationProgressForWorkspace
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Successful Request
          content:
            'application/json':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MultiregionalBucketMigrationProgress'
        403:
          description: You must be an owner to get migration progress
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace not found, you do not have access to it, or it has not been migrated before
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
  /api/workspaces/v2/bucketMigration:
    post:
      tags:
        - WorkspacesV2
      summary: batch start Google workspace bucket migrations or restart failed past attempts
      description: batch start bucket migration attempts for Google workspaces or restart failed past attempts
      operationId: batchStartBucketMigrationForWorkspaces
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/BatchMigrateRequestBody'
      responses:
        201:
          description: Workspaces scheduled for migration
          content:
            'application/json':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkspaceMigrationMetadata'
        400:
          description: Some or all workspaces in billing project were ineligible for migration. Eligible workspaces are scheduled for migration and ineligible workspaces will be included in error message.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: You must be an owner to start migration attempts
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
    get:
      tags:
        - WorkspacesV2
      summary: get workspaces eligible for bucket migration and their migration progress if it exists
      description: get workspaces eligible for bucket migration and their migration progress if it exists
      operationId: getEligibleWorkspacesForBucketMigrationWithProgress
      responses:
        200:
          description: Successful Request
          content:
            'application/json':
              schema:
                type: array
                items:
                  type: object
                  description: Returns metadata in the shape workspaceNamespace/workspaceName -> bucket migration progress where the progress is null for workspaces that have not been scheduled for migration before.
                  additionalProperties:
                    $ref: '#/components/schemas/MultiregionalBucketMigrationProgress'
        500:
          $ref: '#/components/responses/RawlsInternalError'
  /api/workspaces/v2/bucketMigration/getProgress:
    post:
      tags:
        - WorkspacesV2
      summary: fetch bucket migration progress for multiple Google workspaces
      description: fetch bucket migration progress for multiple Google workspaces
      operationId: getBucketMigrationProgressForWorkspaceList
      requestBody:
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/BatchMigrateRequestBody'
      responses:
        200:
          description: Successful Request
          content:
            'application/json':
              schema:
                type: array
                items:
                  type: object
                  description: Returns metadata in the shape workspaceNamespace/workspaceName -> bucket migration progress where the progress is null for workspaces that have not been scheduled for migration before.
                  additionalProperties:
                    $ref: '#/components/schemas/MultiregionalBucketMigrationProgress'
        403:
          description: You must be an owner of all requested workspaces
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
  /api/workspaces/v2/{workspaceNamespace}/{workspaceName}/settings:
    get:
      tags:
        - WorkspacesV2
      summary: Get workspace settings
      description: Get the settings for a workspace
      operationId: getWorkspaceSettings
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      responses:
        200:
          description: Success
          content:
            'application/json':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WorkspaceSetting'
        403:
          description: User does not have access to requested workspace
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
    put:
      tags:
        - WorkspacesV2
      summary: Update workspace settings
      description: Update the settings for a workspace. Unspecified setting types will be left unchanged.
      operationId: updateWorkspaceSettings
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
      requestBody:
        description: New settings for the workspace
        content:
          'application/json':
            schema:
              type: array
              items:
                $ref: '#/components/schemas/WorkspaceSetting'
        required: true
      responses:
        200:
          description: Success
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/WorkspaceSettingsResponse'
        400:
          description: Invalid settings
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: User must be an owner of the workspace to overwrite settings
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
  /cookie-authed/workspaces/{workspaceNamespace}/{workspaceName}/entities/{entityType}/tsv:
    get:
      tags:
        - Entities
      summary: |
        TSV file containing workspace entities of the specified type
      description: |
        swagger-ui seems to not handle file downloads, so this endpoint won't function through the ui.
        It is here for documentation purposes only.
      operationId: browserDownloadEntitiesTSVGet
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - name: attributeNames
          in: query
          description: comma separated list of ordered attribute names to be in downloaded
            tsv
          schema:
            type: string
        - name: model
          in: query
          description: flexible or firecloud (firecloud model will be used by default)
          schema:
            type: string
      responses:
        200:
          description: Workspace entities of specified type in TSV format
          content:
            text/plain:
              schema:
                type: string
                format: binary
        404:
          description: Workspace or entity type does not exist
          content: {}
        414:
          description: |
            URI length exceeds the configured limit of 2048 characters.
            Please use the POST endpoint when it's necessary to supply a large number of attribute names.
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Entities
      summary: |
        TSV file containing workspace entities of the specified type
      description: |
        swagger-ui seems to not handle file downloads, so this endpoint won't function through the ui.
        It is here for documentation purposes only.
      operationId: browserDownloadEntitiesTSV
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - FCtoken
              properties:
                FCtoken:
                  type: string
                  description: valid access token to use for authentication
                attributeNames:
                  type: string
                  description: comma separated list of ordered attribute names to
                    be in downloaded tsv
                model:
                  type: string
                  description: flexible or firecloud (firecloud model will be used
                    by default)
        required: true
      responses:
        200:
          description: Workspace entities of specified type in TSV format
          content:
            text/plain:
              schema:
                type: string
                format: binary
        404:
          description: Workspace or entity type does not exist
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entityTypes/{entityType}:
    patch:
      tags:
        - Entities
      summary: rename entity type in a workspace
      description: Rename an entity type
      operationId: renameEntityType
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
      requestBody:
        description: Old entity type name and the name you'd like to change it to
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/EntityTypeRename'
        required: true
      responses:
        204:
          description: Successful Request
          content: { }
        404:
          description: Workspace or Entity Type not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: New name for entity type already exists in workspace
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
      x-codegen-request-body-name: entityTypeRenameJson
    delete:
      tags:
        - Entities
      summary: delete all entities of a type in a workspace
      description: Delete entities of type
      operationId: deleteEntitiesOfType
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
      responses:
        204:
          description: Successful Request
          content: { }
        409:
          description: Cannot create dangling references when deleting an entity type
        500:
          $ref: '#/components/responses/RawlsInternalError'
  /api/workspaces/{workspaceNamespace}/{workspaceName}/entityTypes/{entityType}/attributes/{attributeName}:
    patch:
      tags:
        - Entities
      summary: Change attribute name for an entity type
      description: Change the attribute name for an entity type in a workspace.
        If the old name doesn't exist the update will fail. If the new name already exists,
        the update will fail, and no records will be updated.
      operationId: rename_entity_attributes
      parameters:
        - $ref: '#/components/parameters/workspaceNamespaceParam'
        - $ref: '#/components/parameters/workspaceNameParam'
        - $ref: '#/components/parameters/entityTypeParam'
        - $ref: '#/components/parameters/AttributeNamePathParam'
      requestBody:
        description: New attribute name
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/AttributeRename'
        required: true
      responses:
        204:
          description: Attribute name updated
          content: { }
        403:
          description: User does not have permission to update Attribute names
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Workspace, Entity or Attribute not found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        409:
          description: Invalid Attribute name update. New Attribute conflicts with existing Attribute name.
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          $ref: '#/components/responses/RawlsInternalError'
      x-codegen-request-body-name: renameEntityAttribute
  /duos/autocomplete/{queryTerm}:
    get:
      tags:
        - Library
      summary: |
        Passes through to DUOS' autocomplete method to select ontology terms of disease type that match the query term.
      operationId: duosAutocomplete
      parameters:
        - name: queryTerm
          in: path
          description: The query term (word fragment) which the service should try and
            complete.
          required: true
          schema:
            type: string
      responses:
        200:
          description: Array of results.
          content: {}
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
  /duos/researchPurposeQuery:
    post:
      tags:
        - Library
      summary: Generates an ElasticSearch clause for filtering by research purpose
      operationId: duosResearchPurposeQuery
      requestBody:
        description: Research Purpose Request
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/ResearchPurposeRequest'
        required: true
      responses:
        200:
          description: JSON of ES filter clause
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: body
  /duos/structuredData:
    post:
      tags:
        - Library
      summary: Data Use Search ingest
      description: The ingest API will take the answers to consent questions and return
        the elasticsearch structure to persist with the data reference.
      operationId: dataIngest
      requestBody:
        description: Structured Data Request
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/structuredDataRequest'
        required: true
      responses:
        500:
          description: Internal Server Error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: body
  /error:
    get:
      tags:
        - Status
      summary: |
        An error status endpoint for load balancing purposes
      operationId: error
      responses:
        503:
          description: Service Unavailable
          content: {}
      x-passthrough: false
  /health:
    get:
      tags:
        - Status
      summary: |
        A health status endpoint for load balancing purposes
      operationId: health
      responses:
        200:
          description: Success
          content: {}
      x-passthrough: false
  /status:
    get:
      tags:
        - Status
      summary: |
        An orchestrated status check that includes a health report of underlying systems
      operationId: status
      responses:
        200:
          description: This service is healthy; check payload for subsystem health.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemStatus'
        500:
          description: This service is not healthy; therefore, payload may be missing
            or incomplete.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemStatus'
      x-passthrough: false
  /handle-oauth-code:
    post:
      tags:
        - OAuth
      summary: deprecated
      description: |
        This API is a deprecated noop. Previously, it allowed the server to acquire a refresh token.
        Since refresh tokens are no longer used in the back end, this API is now hardcoded to respond as if
        it successfully acquired a refresh token, without doing any actual work.
        This API may be removed in a future release.
      operationId: handleOauthCode
      requestBody:
        content:
          'application/json':
            schema:
              required:
                - code
                - redirectUri
              type: object
              properties:
                code:
                  type: string
                redirectUri:
                  type: string
        required: false
      responses:
        204:
          description: All set
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: body
  /me:
    get:
      tags:
        - Profile
      summary: Returns registration and activation status for the current user
      operationId: me
      parameters:
        - name: userDetailsOnly
          in: query
          description: when set to true does not check the various enabled statuses
            of the user
          schema:
            type: boolean
            default: false
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Me'
        401:
          description: Unauthorized. User is not allowed in Terra or has not signed
            in.
          content: {}
        403:
          description: Forbidden. User is registered in Terra, but not activated.
          content: {}
        404:
          description: Not Found. User is authenticated to Google but not a Terra
            member.
          content: {}
        500:
          description: Internal Server Error determining user status.
          content: {}
        503:
          description: Service Unavailable. Could not reach underlying services to
            determine user status.
          content: {}
      x-passthrough: false
  /api/proxyGroup/{email}:
    get:
      tags:
        - Profile
      summary: Returns the proxy group email for the current user
      operationId: getProxyGroup
      parameters:
        - name: email
          in: path
          description: User email whose proxy group to retrieve
          required: true
          schema:
            type: string
      responses:
        200:
          description: user proxy group
          content:
            application/json:
              schema:
                type: string
        404:
          description: user not found
          content: {}
        500:
          description: Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
      x-passthrough: true
      x-passthrough-target: sam
  /register:
    get:
      tags:
        - Profile
      summary: Passes through to the Sam userinfo API and returns its response
      operationId: getUserStatus
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RawlsMe'
        404:
          description: User Not Found.
          content: {}
        500:
          description: Internal Server Error determining Rawls user status.
          content: {}
      x-passthrough: true
      x-passthrough-target: sam
  /register/profile:
    get:
      tags:
        - Profile
      summary: Returns a list of all keys and values stored in the user profile service
        for the currently logged-in user.
      operationId: getAll
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegisterProfile'
            text/plain:
              schema:
                $ref: '#/components/schemas/RegisterProfile'
        500:
          description: Internal server error
          content: {}
      x-passthrough: false
    post:
      tags:
        - Profile
      summary: Sets a profile object in the user profile service for the currently
        logged-in user.
      operationId: setProfile
      requestBody:
        description: A complete profile
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/Profile'
        required: false
      responses:
        200:
          description: OK
          content: {}
        400:
          description: Bad request
          content: {}
        403:
          description: Forbidden
          content: {}
        500:
          description: Internal server error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: profile
  /register/userinfo:
    get:
      tags:
        - Profile
      summary: Passes through to Google's userinfo API and returns its response
      description: |
        See https://developers.google.com/+/web/api/rest/openidconnect/getOpenIdConnect for response info. Userinfo endpoint lives at https://www.googleapis.com/oauth2/v3/userinfo.
      operationId: userInfo
      responses:
        200:
          description: OK
          content: {}
      x-passthrough: false
  /api/users/v1/registerWithProfile:
    post:
      tags:
        - Users
      summary: Registers the user in Sam and saves the user profile in Thurloe
      operationId: registerUserWithProfile
      requestBody:
        description: A registration request
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/RegisterRequest'
        required: false
      responses:
        200:
          description: OK
          content: {}
        400:
          description: Bad request
          content: {}
        403:
          description: Forbidden
          content: {}
        500:
          description: Internal server error
          content: {}
      x-passthrough: false
      x-codegen-request-body-name: profile
  /tos/text:
    get:
      tags:
        - Terms of Service
      summary: gets terms of service text
      operationId: getTermsOfServiceText
      responses:
        200:
          description: success
          content:
            text/plain:
              schema:
                type: string
  /register/user/v1/termsofservice:
    post:
      tags:
        - Terms of Service
      summary: Passes through to Sam API and accepts Terra Terms of Service
      operationId: acceptTermsOfService
      requestBody:
        description: Must equal the (double-quoted) url of the Terra Terms of Service
        content:
          'application/json':
            schema:
              type: string
        required: true
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RawlsMe'
        404:
          description: User Not Found.
          content: { }
    delete:
      tags:
        - Terms of Service
      summary: Passes through to Sam API and rejects Terra Terms of Service
      operationId: rejectTermsOfService
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RawlsMe'
        404:
          description: User Not Found.
          content: { }
  /register/user/v1/termsofservice/status:
    get:
      tags:
        - Terms of Service
      summary: Check whether user has accepted the current version of the Terms of Service
      operationId: getTermsOfServiceStatus
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: boolean
        404:
          description: User Not Found.
          content: { }
  /register/user/v2/self/termsOfServiceDetails:
    get:
      tags:
        - Terms of Service
      summary: gets terms of service details, including user's accepted version
      operationId: getTermsOfServiceDetails
      responses:
        200:
          description: success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TermsOfServiceDetails'
  /ga4gh/v1/tools/{id}:
    get:
      tags:
        - GA4GH Tool Registry
      summary: List one specific tool, acts as an anchor for self references
      description: This endpoint returns one specific tool (which has ToolVersions
        nested inside it)
      parameters:
        - name: id
          in: path
          description: A unique identifier of the tool, scoped to this registry, for
            example `123456`
          required: true
          schema:
            type: string
      responses:
        200:
          description: A tool.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tool'
      x-passthrough: true
      x-passthrough-target: agora
  /ga4gh/v1/tools/{id}/versions:
    get:
      tags:
        - GA4GH Tool Registry
      summary: List versions of a tool
      description: Returns all versions of the specified tool
      parameters:
        - name: id
          in: path
          description: A unique identifier of the tool, scoped to this registry, for
            example `123456`
          required: true
          schema:
            type: string
      responses:
        200:
          description: An array of tool versions
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ToolVersion'
      x-passthrough: true
      x-passthrough-target: agora
  /ga4gh/v1/tools/{id}/versions/{version-id}:
    get:
      tags:
        - GA4GH Tool Registry
      summary: List one specific tool version, acts as an anchor for self references
      description: This endpoint returns one specific tool version
      parameters:
        - name: id
          in: path
          description: A unique identifier of the tool, scoped to this registry, for
            example `123456`
          required: true
          schema:
            type: string
        - name: version-id
          in: path
          description: An identifier of the tool version, scoped to this registry, for
            example `v1`
          required: true
          schema:
            type: string
      responses:
        200:
          description: A tool version.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolVersion'
      x-passthrough: true
      x-passthrough-target: agora
  /ga4gh/v1/tools:
    get:
      tags:
        - GA4GH Tool Registry
      summary: List all tools
      description: |
        This endpoint returns all tools available.
      responses:
        200:
          description: An array of Tools that match the filter.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Tool'
      x-passthrough: true
      x-passthrough-target: agora
  /ga4gh/v1/tools/{id}/versions/{version-id}/{type}/descriptor:
    get:
      tags:
        - GA4GH Tool Registry
      summary: Get the tool descriptor (WDL) for the specified tool.
      description: Returns the WDL descriptor for the specified tool.
      parameters:
        - name: type
          in: path
          description: |
            The output type of the descriptor. If not specified it is up to the underlying implementation to determine which output type to return. Plain types return the bare descriptor while the "non-plain" types return a descriptor wrapped with metadata.
          required: true
          schema:
            type: string
            enum:
              - WDL
              - plain-WDL
        - name: id
          in: path
          description: |
            A unique identifier of the tool, scoped to this registry, for example `123456`.

              *In Terra, this must be a namespace + ":" + name. For instance, if your namespace
              is 'foo' and name is 'bar', this must be 'foo:bar'.*
          required: true
          schema:
            type: string
        - name: version-id
          in: path
          description: |
            An identifier of the tool version for this particular tool registry, for example `v1`.

              *In Terra, this must be an integer representing the method snapshot id.*
          required: true
          schema:
            type: string
      responses:
        200:
          description: The tool descriptor.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ToolDescriptor'
        404:
          description: The tool can not be output in the specified type.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-passthrough: true
      x-passthrough-target: agora
  /ga4gh/v1/metadata:
    get:
      tags:
        - GA4GH Tool Registry
      summary: Return some metadata that is useful for describing this registry
      description: Return some metadata that is useful for describing this registry
      responses:
        200:
          description: A Metadata object describing this service.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Metadata'
      x-passthrough: true
      x-passthrough-target: agora
  /ga4gh/v1/tool-classes:
    get:
      tags:
        - GA4GH Tool Registry
      summary: List all tool types
      description: |
        This endpoint returns all tool-classes available
      responses:
        200:
          description: An array of methods that match the filter.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ToolClass'
      x-passthrough: true
      x-passthrough-target: agora
  /api/servicePerimeters/{servicePerimeterName}/projects/{projectName}:
    put:
      tags:
        - Service Perimeters
      summary: Add a project to a service perimeter
      description: |
        Add a project to a service perimeter, must have 'add_to_service_perimeter'
        action on project and 'add_project' action on perimeter, included in owner
        role for both
      operationId: addProjectToServicePerimeter
      parameters:
        - name: servicePerimeterName
          in: path
          description: |
            Fully qualified google service perimeter name in the form of
            accessPolicies/[POLICY NUMBER]/servicePerimeters/[NAME], url encoded
          required: true
          schema:
            type: string
        - name: projectName
          in: path
          description: Project name
          required: true
          schema:
            type: string
      x-passthrough: true
      x-passthrough-target: rawls
      responses:
        202:
          description: Successful request, check the project's status for completion
          content: {}
        400:
          description: Project is already in perimeter or is not in 'Ready' state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        403:
          description: Project does not exist or you do not have access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        404:
          description: Service Perimeter does not exist or you do not have access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
        500:
          description: Rawls Internal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReport'
components:
  schemas:
    AttributeEntityReference:
      required:
        - entityName
        - entityType
      type: object
      properties:
        entityType:
          type: string
          description: The type of the entity
        entityName:
          type: string
          description: The name of the entity
      description: ""
    AttributeRename:
      required:
        - newAttributeName
      type: object
      properties:
        newAttributeName:
          type: string
          description: The new name for the attribute
      description: New attribute name
    AttributeUpdateOperationArray:
      type: array
      description: ""
      example: |
        [
          {
            "op": "AddUpdateAttribute",
            "attributeName": "name of attribute to add/update",
            "addUpdateAttribute": "value to add/update"
          },
          {
            "op": "RemoveAttribute",
            "attributeName": "name of attribute to remove"
          },
          {
            "op": "AddListMember",
            "attributeListName": "name of list attribute",
            "newMember": "value to add to list"
          },
          {
            "op": "RemoveListMember",
            "attributeListName": "name of list attribute",
            "removeMember": "value to remove from list"
          },
          {
            "op": "CreateAttributeEntityReferenceList",
            "attributeListName": "name of entity-reference list attribute to create"
          },
          {
            "op": "CreateAttributeValueList",
            "attributeName": "name of value-list attribute to create"
          }
        ]
      items:
        $ref: '#/components/schemas/AttributeUpdateOperation'
    AttributeUpdateOperation:
      required:
        - op
      type: object
      properties:
        op:
          type: string
          description: The operation to perform on the attribute
          enum:
            - AddUpdateAttribute
            - RemoveAttribute
            - AddListMember
            - RemoveListMember
            - CreateAttributeEntityReferenceList
            - CreateAttributeValueList
      discriminator:
        propertyName: op
    AddUpdateAttribute:
      allOf:
        - $ref: '#/components/schemas/AttributeUpdateOperation'
        - type: object
          properties:
            attributeName:
              type: string
              description: Name of attribute to add/update
            addUpdateAttribute:
              type: string
              description: Value to add/update. Accepts strings, numbers, booleans.
    RemoveAttribute:
      allOf:
        - $ref: '#/components/schemas/AttributeUpdateOperation'
        - type: object
          properties:
            attributeName:
              type: string
              description: The name of attribute to remove
    AddListMember:
      allOf:
        - $ref: '#/components/schemas/AttributeUpdateOperation'
        - type: object
          properties:
            attributeListName:
              type: string
              description: The name of the attribute list
            newMember:
              type: string
              description: The attribute to add to the list
    RemoveListMember:
      allOf:
        - $ref: '#/components/schemas/AttributeUpdateOperation'
        - type: object
          properties:
            attributeListName:
              type: string
              description: The name of the attribute list
            removeMember:
              type: string
              description: The attribute to remove from the list
    CreateAttributeEntityReferenceList:
      allOf:
        - $ref: '#/components/schemas/AttributeUpdateOperation'
        - type: object
          properties:
            attributeListName:
              type: string
              description: The name of the empty attribute entity-reference list to
                create. This is a non-destructive operation.
    CreateAttributeValueList:
      allOf:
        - $ref: '#/components/schemas/AttributeUpdateOperation'
        - type: object
          properties:
            attributeName:
              type: string
              description: The name of the empty attribute value-list to create. This
                is a non-destructive operation.
    BillingAccount:
      required:
        - accountName
        - displayName
        - firecloudHasAccess
      type: object
      properties:
        accountName:
          type: string
          description: name of billing account
        firecloudHasAccess:
          type: boolean
          description: whether the Firecloud service has been given access to this
            billing account
        displayName:
          type: string
          description: display name of billing account
      description: Details for a single billing account
    BillingAccountRedirect:
      required:
        - redirect
      type: object
      properties:
        redirect:
          type: string
          description: URL to redirect to
      description: Google redirect URL to enable appropriate scopes
    BillingProjectMember:
      required:
        - email
        - role
      type: object
      properties:
        email:
          type: string
          description: the email of the user
        role:
          type: string
          description: the role of the user in the project
      description: ""
    BillingProjectStatus:
      required:
        - creationStatus
        - projectName
      type: object
      properties:
        projectName:
          type: string
          description: the name of the billing project
        creationStatus:
          type: string
          enum:
            - Creating
            - Ready
            - Error
            - AddingToPerimeter
      description: a billing project status
    BillingProjectMembership:
      required:
        - projectName
        - role
        - status
      type: object
      properties:
        projectName:
          type: string
          description: the name of the project to create
        role:
          type: string
          description: the role of the current user in the project
        status:
          type: string
          enum:
            - Creating
            - Ready
            - Error
            - AddingToPerimeter
        message:
          type: string
          description: informational message about the project
      description: ""
    BucketStorageCost:
      required:
        - estimate
      type: object
      properties:
        estimate:
          type: string
          description: The estimated monthly storage cost of the bucket
        lastUpdated:
          type: string
          format: timestamp
          description: timestamp (UTC) marking the date that the bucket cost was last updated (YYYY-MM-DDThh:mm:ss.fffZ)
      description: ""
    BucketUsageResponse:
      required:
        - usageInBytes
      type: object
      properties:
        usageInBytes:
          type: integer
          description: The current storage bucket usage in bytes
        lastUpdated:
          type: string
          format: timestamp
          description: timestamp (UTC) marking the date that the bucket usage was last updated (YYYY-MM-DDThh:mm:ss.fffZ)
      description: ""
    CallMetadata:
      type: object
      properties:
        inputs:
          type: object
          additionalProperties:
            type: object
          description: map from input names onto resolved values
        executionStatus:
          type: string
          description: status of call
        executionEvents:
          type: array
          items:
            $ref: '#/components/schemas/ExecutionEvent'
        backendStatus:
          type: string
          description: status of the backend
        backendLogs:
          type: object
          additionalProperties:
            type: string
          description: map of log files from backend
        outputs:
          type: object
          additionalProperties:
            type: string
          description: map from output names to local files
        start:
          type: string
          description: starting time of call
          format: date-time
        end:
          type: string
          description: ending time of call
          format: date-time
        jobId:
          type: string
          description: unique ID of job
        returnCode:
          type: integer
          description: result code
          format: int32
        backend:
          type: string
          description: type of backend executing the call
        stdout:
          type: string
          description: location of stdout
        stderr:
          type: string
          description: location of stderr
        shardIndex:
          type: integer
          description: call index within a scatter block, as reported by execution
            service
          format: int32
      description: Stuff you need to know about calls
    ConfigurationIngest:
      required:
        - inputs
        - methodRepoMethod
        - name
        - namespace
        - outputs
        - prerequisites
        - rootEntityType
        - workspaceName
      type: object
      properties:
        namespace:
          type: string
          description: Method configuration namespace
        name:
          type: string
          description: Method configuration name
        rootEntityType:
          type: string
          description: Root entity type
        workspaceName:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String] with corresponding workspace-related information
            - name and namespace
        methodRepoMethod:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String] with corresponding method-related information
        outputs:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String] with outputs information
        inputs:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String] with inputs information
        prerequisites:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String] of prerequisites (keys unused, will be
            removed in the future)
    ConfigurationQuery:
      type: object
      properties:
        namespace:
          type: string
          description: Namespace which contains Configuration.
          default: YOUR_NAMESPACE
        name:
          type: string
          description: Name of the Configuration.
          default: quick-BWA-config
        synopsis:
          type: string
          description: Synopsis which contains Configuration.
          default: Quick synopsis of configuration.
        snapshotComment:
          type: string
          description: Snapshot comment of AgoraEntity
          default: Improved spline reticulation
        documentation:
          type: string
          description: Documentation of the Configuration.
          default: |
            Example configuration with an associated method.
        payload:
          type: string
          description: Payload of method -- must be in WDL format
          default: |
            { "methodRepoMethod": { "methodNamespace": "YOUR_NAMESPACE", "methodName": "BWA", "methodVersion": 1}}
        entityType:
          type: string
          description: Can only be Configuration.
          default: Configuration
    ConfigurationResponse:
      type: object
      properties:
        managers:
          type: array
          description: List of Owners.
          items:
            type: string
        method:
          type: object
          additionalProperties:
            type: object
        namespace:
          type: string
          description: Namespace which contains AgoraEntity.
          default: YOUR_NAMESPACE
        name:
          type: string
          description: Name of the AgoraEntity.
          default: BWA
        snapshotId:
          type: integer
          description: SnapshotId of AgoraEntity
          format: int32
        snapshotComment:
          type: string
          description: Snapshot comment of AgoraEntity
          default: Improved spline reticulation
        synopsis:
          type: string
          description: Synopsis which contains AgoraEntity.
          default: Quickly aligns short nucleotide sequences.
        documentation:
          type: string
          description: Documentation of the AgoraEntity. MUST BE REQUESTED EXPLICITLY.
          default: |
            BWA is a software package for mapping low-divergent sequences
            against a large reference genome, such as the human genome.
            It consists of three algorithms: BWA-backtrack, BWA-SW and BWA-MEM.
        createDate:
          type: string
          description: Timestamp of creation
        url:
          type: string
          description: URL where resource can be accessed.
        payload:
          type: string
          description: Payload of config - JSON format in a string
          default: |
            { "methodRepoMethod": { "methodNamespace": "YOUR_NAMESPACE", "methodName": "BWA", "methodVersion": 1}}
        entityType:
          type: string
          description: Type of the AgoraEntity -- Task or Workflow.
          default: Task
        public:
          type: boolean
          description: Is this method publicly readable?
    ConfigurationResponseWithPayloadObject:
      type: object
      properties:
        namespace:
          type: string
          description: Namespace which contains AgoraEntity.
          default: YOUR_NAMESPACE
        name:
          type: string
          description: Name of the AgoraEntity.
          default: BWA
        snapshotId:
          type: integer
          description: SnapshotId of AgoraEntity
          format: int32
        snapshotComment:
          type: string
          description: Snapshot comment of AgoraEntity
          default: Improved spline reticulation
        synopsis:
          type: string
          description: Synopsis which contains AgoraEntity.
          default: Quickly aligns short nucleotide sequences.
        documentation:
          type: string
          description: Documentation of the AgoraEntity. MUST BE REQUESTED EXPLICITLY.
          default: |
            BWA is a software package for mapping low-divergent sequences
            against a large reference genome, such as the human genome.
            It consists of three algorithms: BWA-backtrack, BWA-SW and BWA-MEM.
        createDate:
          type: string
          description: Timestamp of creation
        url:
          type: string
          description: URL where resource can be accessed.
        payloadObject:
          $ref: '#/components/schemas/ConfigurationPayload'
        entityType:
          type: string
          description: Type of the AgoraEntity -- Task or Workflow.
          default: Task
    Consent:
      type: object
      properties:
        consentId:
          type: string
          description: The ID of the entity.
        name:
          type: string
          description: Name used to identify the consent.
        createDate:
          type: integer
          description: Creation Date in date-time milliseconds
          format: int64
        lastUpdate:
          type: integer
          description: Date of the last update in date-time milliseconds
          format: int64
        sortDate:
          type: integer
          description: The lastest modification date in date-time milliseconds
          format: int64
        requiresManualReview:
          type: boolean
          description: Describes if this consent has to be reviewed manually.
        dataUseLetter:
          type: string
          description: The URL of the saved file.
        useRestriction:
          type: object
          additionalProperties:
            type: object
          description: The UseRestriction of this consent. Used to match against another
            entities.
        dulName:
          type: string
          description: Name that identifies the Data Use Letter file.
        translatedUseRestriction:
          type: string
          description: The translated use restriction of the consent.
    structuredDataRequest:
      required:
        - aggregateLevelDataProhibited
        - commercialUseProhibited
        - controlsUseProhibited
        - diseaseUseRequired
        - forProfitUseProhibited
        - genderUseRequired
        - generalResearchUse
        - healthMedicalBiomedicalUseRequired
        - irbRequired
        - methodsResearchProhibited
        - pediatricResearchRequired
      type: object
      properties:
        generalResearchUse:
          type: boolean
          description: Is the data available for future general research use?
        healthMedicalBiomedicalUseRequired:
          type: boolean
          description: Is future use limited for health/medical/biomedical research?
        diseaseUseRequired:
          type: array
          description: Future use is limited to research involving the following disease
            area(s). These values must be urls such as "http://purl.obolibrary.org/obo/DOID_12345".
          items:
            type: string
            example: http://purl.obolibrary.org/obo/DOID_4
        commercialUseProhibited:
          type: boolean
          description: Is future commercial use prohibited?
        forProfitUseProhibited:
          type: boolean
          description: Is future use by for-profit entities prohibited?
        methodsResearchProhibited:
          type: boolean
          description: Is future use for methods research (analytic/software/technology
            development) outside the bounds of the other specified restrictions prohibited?
        aggregateLevelDataProhibited:
          type: boolean
          description: Is future use of aggregate-level data for general research
            purposes prohibited?
        controlsUseProhibited:
          type: boolean
          description: Is future use as a control set for diseases other than those
            specified prohibited?
        genderUseRequired:
          type: string
          description: If future use is limited to research involving a particular
            gender, specify "male" or "female". Any other value will be read as false.
            This field is case-insensitive.
        pediatricResearchRequired:
          type: boolean
          description: Is future use limited to pediatric research?
        irbRequired:
          type: boolean
          description: Should the requester provide documentation of local IRB/REC
            approval?
        prefix:
          type: string
          description: Optional. A prefix that is prepended to the field names of
            the responses. This is purely for personalization.
    CopyConfigurationIngest:
      required:
        - configurationName
        - configurationNamespace
        - configurationSnapshotId
        - destinationName
        - destinationNamespace
      type: object
      properties:
        configurationNamespace:
          type: string
          description: Method configuration namespace
        configurationName:
          type: string
          description: Method configuration name
        configurationSnapshotId:
          type: integer
          description: Method configuration snapshot id
          format: int32
        destinationNamespace:
          type: string
          description: Method configuration destination namespace
        destinationName:
          type: string
          description: Method configuration destination name
    CopyEntity:
      type: object
      properties:
        sourceWorkspace:
          $ref: '#/components/schemas/Namespace'
        entityType:
          type: string
          description: Entity Type
        entityNames:
          type: array
          description: List of entity names to be copied
          items:
            type: string
    CreateRawlsV2BillingProjectFullRequest:
      required:
        - projectName
      type: object
      properties:
        projectName:
          type: string
          description: the name of the project to create
        billingAccount:
          type: string
          description: the id of the Google billing account to use, must start with 'billingAccounts/'
        servicePerimeter:
          type: string
          description: The fully qualified name of the GCP service perimeter to put
            this project into in the form accessPolicies/[POLICY NUMBER]/servicePerimeters/[NAME].
            Caller must have the add_project action for this service perimeter in
            Sam.
        managedAppCoordinates:
          $ref: '#/components/schemas/AzureManagedAppCoordinates'
        members:
          description: The list of members to add to the billing project
          type: array
          items:
            $ref: '#/components/schemas/ProjectAccessUpdate'
        inviteUsersNotFound:
          description: If true, invite the users to Terra if they are not registered in the system. They will be given access to the project when they register.
          type: boolean
        protectedData:
          type: boolean
          description: Optional, false if not specified. Applicable only for azure
            billing projects. When set, a billing project with suitable infrastructure
            for protected data workspaces will be created.
        costSavings:
          type: boolean
          description: Optional, false if not specified. Applicable only for azure
            billing projects. When set, this enables Vertical Pod Autoscaling and Spot Nodes in Azure Kubernetes.
      description: ""
    ProjectRole:
      description: the role on the billing project
      type: string
      enum:
        - owner
        - user
    ProjectAccessUpdate:
      required:
        - email
        - role
      type: object
      properties:
        email:
          description: the email of the member to modify access for
          type: string
        role:
          description: the role to modify for the specified member
          $ref: '#/components/schemas/ProjectRole'
    AzureManagedAppCoordinates:
      required:
        - tenantId
        - subscriptionId
        - managedResourceGroupId
      type: object
      properties:
        tenantId:
          type: string
          format: uuid
          description: UUID of the Azure tenant for this managed application deployment
        subscriptionId:
          type: string
          format: uuid
          description: UUID of the Azure subscription for this managed application deployment.
        managedResourceGroupId:
          type: string
          description: ID of the Azure managed resource group for this managed application deployment.
    RawlsBillingProjectOrganization:
      required:
        - enterprise
      type: object
      description: Details about billing project's organization. Only present if billing project is backed by a billing profile.
      properties:
        enterprise:
          type: boolean
          description: whether this billing project is part of an enterprise organization i.e. they have a signed business associate agreement (BAA)
    CuratorStatus:
      required:
        - curator
      type: object
      properties:
        curator:
          type: boolean
      description: is the user a curator?
    DatasetPermission:
      type: object
      properties:
        name:
          type: string
          description: the name of the NIH dataset
        authorized:
          type: boolean
          description: true if you have access to the dataset, false otherwise
    Enabled:
      type: object
      properties:
        google:
          type: boolean
          description: User enabled via Google?
        ldap:
          type: boolean
          description: User enabled in LDAP?
        allUsersGroup:
          type: boolean
          description: User is a member of the "All Users" group?
        adminEnabled:
          type: boolean
          description: User is enabled in the system?
        tosAccepted:
          type: boolean
          description: User has accepted the latest Terms of Service?
    Entity:
      required:
        - attributes
        - entityType
        - name
      type: object
      properties:
        name:
          type: string
          description: The name of the entity
        entityType:
          type: string
          description: The type of the entity
        attributes:
          type: object
          additionalProperties:
            type: object
          description: Map[String,Attribute]
      description: ""
    EntityAccessControl:
      required:
        - acls
        - referencedBy
      type: object
      properties:
        method:
          $ref: '#/components/schemas/MethodShort'
        referencedBy:
          $ref: '#/components/schemas/MethodConfigurationName'
        acls:
          type: array
          description: method repo ACLs for the referenced method
          items:
            $ref: '#/components/schemas/FireCloudPermission'
        message:
          type: string
          description: error message generated when retrieving acls for this method
    EntityCopyResponse:
      required:
        - entitiesCopied
        - hardConflicts
        - softConflicts
      type: object
      properties:
        entitiesCopied:
          type: array
          description: the entities that were successfully copied into the workspace
          items:
            $ref: '#/components/schemas/AttributeEntityReference'
        hardConflicts:
          type: array
          description: these entities already exist in your workspace
          items:
            $ref: '#/components/schemas/EntityHardConflict'
        softConflicts:
          type: array
          description: the conflicts within your entity subtrees. note that this will
            be empty if there are hard conflicts
          items:
            $ref: '#/components/schemas/EntitySoftConflict'
      description: ""
    EntityHardConflict:
      required:
        - entityName
        - entityType
      type: object
      properties:
        entityType:
          type: string
          description: the type of the entity
        entityName:
          type: string
          description: the name of the entity
      description: ""
    EntityID:
      type: object
      properties:
        entityType:
          type: string
          description: Entity Type
        entityName:
          type: string
          description: Entity Name
    EntityName:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          description: The name of the entity
      description: ""
    EntityQueryParameters:
      required:
        - page
        - pageSize
        - sortDirection
        - sortField
      type: object
      properties:
        page:
          type: integer
          description: page number, 1-indexed positive integer
          format: int32
        pageSize:
          type: integer
          description: count of items per page, positive integer
          format: int32
        sortField:
          type: string
          description: field to sort by
        sortDirection:
          type: string
          description: asc or desc
        filterTerms:
          type: string
          description: terms to filter results by
      description: ""
    EntityQueryResponse:
      required:
        - parameters
        - resultMetadata
        - results
      type: object
      properties:
        parameters:
          $ref: '#/components/schemas/EntityQueryParameters'
        resultMetadata:
          $ref: '#/components/schemas/EntityQueryResultMetadata'
        results:
          type: array
          items:
            $ref: '#/components/schemas/Entity'
      description: ""
    EntityQueryResultMetadata:
      required:
        - filteredCount
        - filteredPageCount
        - unfilteredCount
      type: object
      properties:
        unfilteredCount:
          type: integer
          description: count of results before filtering
          format: int32
        filteredCount:
          type: integer
          description: count of results after filtering
          format: int32
        filteredPageCount:
          type: integer
          description: count of pages after filtering; honors pageSize parameter
          format: int32
      description: ""
    EntitySoftConflict:
      required:
        - conflicts
        - entityName
        - entityType
      type: object
      properties:
        entityType:
          type: string
          description: the type of the entity
        entityName:
          type: string
          description: the name of the entity
        conflicts:
          type: array
          description: the next entity in the path to the conflict
          items:
            $ref: '#/components/schemas/EntitySoftConflict'
      description: ""
    EntityTypeRename:
      required:
        - newName
      type: object
      properties:
        newName:
          type: string
          description: the new entity type name
    Error:
      type: object
      properties:
        code:
          type: integer
          format: int32
          default: 500
        message:
          type: string
          default: Internal Server Error
    ErrorReport:
      required:
        - causes
        - message
        - source
        - stackTrace
      type: object
      properties:
        source:
          type: string
          description: service causing error
        message:
          type: string
          description: what went wrong
        statusCode:
          type: integer
          description: HTTP status code
          format: int32
        causes:
          type: array
          description: errors triggering this one
          items:
            $ref: '#/components/schemas/ErrorReport'
        stackTrace:
          type: array
          description: stack trace
          items:
            $ref: '#/components/schemas/StackTraceElement'
      description: ""
    ExecutionEngineVersion:
      type: object
      properties:
        cromwell:
          type: string
    ExecutionEvent:
      required:
        - description
        - startTime
      type: object
      properties:
        description:
          type: string
          description: Description of the event
        startTime:
          type: string
          description: When the event started
          format: date-time
        endTime:
          type: string
          description: When the event finished
          format: date-time
      description: ""
    ExtendedEnabled:
      allOf:
        - $ref: '#/components/schemas/Enabled'
    FileMatchingOptions:
      type: object
      required:
        - prefix
      properties:
        prefix:
          type: string
          description: |
            Bucket prefix in which to look. If `recursive` is false, this must include a trailing
            slash when specifying a subdirectory.
        read1Name:
          type: string
          description: column name to use for the primary "read 1" file
          default: read1
        read2Name:
          type: string
          description: column name to use for the matching "read 2" file
          default: read2
        recursive:
          type: boolean
          description: whether to list files in subdirectories of the prefix
          default: true
    FireCloudPermission:
      required:
        - role
        - user
      type: object
      properties:
        user:
          type: string
        role:
          type: string
    JWTWrapper:
      type: object
      properties:
        jwt:
          type: string
          description: the encoded/signed JWT
    KeyValuePair:
      type: object
      properties:
        key:
          type: string
        value:
          type: string
    LibraryBulkIndexResponse:
      type: object
      properties:
        totalCount:
          type: integer
          description: the number of published workspaces sent to be indexed
          format: int32
        hasFailures:
          type: boolean
          description: did the indexing operation result in any failures?
          default: false
        failureMessages:
          type: object
          additionalProperties:
            type: string
          description: Map[String,String] of id -> failure message
    LibraryMetadataInput:
      type: object
      description: JSON-standard packet of metadata as defined by the Library schema
      example: |
        {
          "library:requiresExternalApproval": false,
          "library:contactEmail": "someone@broadinstitute.org",
          "library:datasetName": "My Dataset",
          "library:numSubjects": 123,
          "library:datatype": ["Whole Exome", "Whole Genome"]
          ...
          additional JSON-standard fields as
          defined by the Library schema
          ...
        }
    ManagedGroupRef:
      required:
        - membersGroupName
      type: object
      properties:
        membersGroupName:
          type: string
      description: a reference to a group that can be managed by users
    ManagedGroupAccessInstructions:
      required:
        - groupName
        - instructions
      type: object
      properties:
        groupName:
          type: string
          description: The name of the Group with instructions
        instructions:
          type: string
          description: The instructions for applying to the Group
      description: ""
    ManagedGroupAccessResponse:
      required:
        - groupEmail
        - groupName
        - role
      type: object
      properties:
        groupName:
          type: string
        groupEmail:
          type: string
        role:
          type: string
      description: an element of a list of groups a user has access to
    ManagedGroupWithMembers:
      required:
        - adminsEmails
        - adminsGroup
        - membersEmails
        - membersGroup
      type: object
      properties:
        membersGroup:
          $ref: '#/components/schemas/RawlsGroupShort'
        adminsGroup:
          $ref: '#/components/schemas/RawlsGroupShort'
        membersEmails:
          type: array
          items:
            type: string
        adminsEmails:
          type: array
          items:
            type: string
      description: a group with all of its members
    Me:
      type: object
      properties:
        userInfo:
          $ref: '#/components/schemas/UserInfo'
        enabled:
          $ref: '#/components/schemas/Enabled'
    MethodAclPair:
      required:
        - acls
        - method
      type: object
      properties:
        method:
          $ref: '#/components/schemas/MethodRepoMethod'
        acls:
          type: array
          items:
            $ref: '#/components/schemas/FireCloudPermission'
        message:
          type: string
          description: ignored during input; if present during output, contains error
            messages
    MethodConfigACL:
      type: array
      items:
        required:
          - role
          - user
        type: object
        properties:
          user:
            type: string
            description: a user's ID or "public"
          role:
            type: string
            description: one of "NO ACCESS", "READER", or "OWNER"
    MethodConfigRename:
      required:
        - name
        - namespace
        - workspaceName
      type: object
      properties:
        namespace:
          type: string
          description: Method configuration namespace
        name:
          type: string
          description: Method configuration name
        workspaceName:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String] with corresponding workspace-related information
            - name and namespace
    MethodConfiguration:
      required:
        - inputs
        - methodRepoMethod
        - name
        - namespace
      type: object
      properties:
        namespace:
          type: string
          description: This method configuration's namespace
        name:
          type: string
          description: The name of the method configuration
        rootEntityType:
          type: string
          description: The root entity type that the method will be running on. Optional
            if this method config doesn't run on an entity (i.e. uses only workspace
            attributes and literal inputs).
        prerequisites:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String]
        inputs:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String]
        outputs:
          type: object
          additionalProperties:
            type: string
          description: Map[String, String]
        methodRepoMethod:
          $ref: '#/components/schemas/MethodRepoMethod'
        methodConfigVersion:
          type: integer
          description: Version number, incremented on edit
          format: int32
        deleted:
          type: boolean
          description: Is this config marked as deleted?
        dataReferenceName:
          type: string
          description: the name of the data reference within this workspace to be used to derive input values
      description: ""
    MethodConfigurationName:
      required:
        - name
        - namespace
      type: object
      properties:
        namespace:
          type: string
          description: This method configuration's namespace
        name:
          type: string
          description: The name of the method configuration
    MethodDefinition:
      type: object
      properties:
        namespace:
          type: string
          description: Namespace which contains the method.
        name:
          type: string
          description: Name of the method.
        synopsis:
          type: string
          description: Synopsis of the method
        managers:
          type: array
          description: List of Owners.
          items:
            type: string
        public:
          type: boolean
          description: Is this method publicly readable?
        numConfigurations:
          type: integer
          description: count of configurations associated with this method
          format: int32
        numSnapshots:
          type: integer
          description: count of snapshots of this method
          format: int32
        entityType:
          type: string
          description: always "Workflow".
          default: Workflow
    MethodID:
      required:
        - methodName
        - methodNamespace
        - methodVersion
      type: object
      properties:
        methodNamespace:
          type: string
          description: Method namespace
        methodName:
          type: string
          description: Method name
        methodVersion:
          type: integer
          description: Method version
          format: int32
          default: 0
    MethodQuery:
      required:
        - namespace
        - name
        - payload
        - entityType
      type: object
      properties:
        namespace:
          type: string
          description: Namespace which contains AgoraEntity.
          example: YOUR_NAMESPACE
        name:
          type: string
          description: Name of the AgoraEntity.
          example: BWA
        synopsis:
          type: string
          description: Synopsis which contains AgoraEntity.
          example: Quickly aligns short nucleotide sequences.
        snapshotComment:
          type: string
          description: Snapshot comment of AgoraEntity
          example: Improved spline reticulation
        documentation:
          type: string
          description: Documentation of the AgoraEntity.
          example: |
            BWA is a software package for mapping low-divergent sequences
            against a large reference genome, such as the human genome.
            It consists of three algorithms: BWA-backtrack, BWA-SW and BWA-MEM.
        payload:
          type: string
          description: Payload of method -- must be in WDL format
          example: |
            task wc {File in_file command { cat ${in_file} | wc -l } output { Int count = read_int(stdout()) }}
        entityType:
          type: string
          description: Type of the AgoraEntity -- Task or Workflow.
          example: Task
    MethodShort:
      required:
        - managers
        - name
        - namespace
        - snapshotId
      type: object
      properties:
        managers:
          type: array
          description: List of Owners.
          items:
            type: string
        namespace:
          type: string
          description: Namespace which contains AgoraEntity.
          default: YOUR_NAMESPACE
        name:
          type: string
          description: Name of the AgoraEntity.
          default: BWA
        snapshotId:
          type: integer
          description: SnapshotId of AgoraEntity
          format: int32
        public:
          type: boolean
          description: If this AgoraEntity is publicly readable.
    MethodRepoMethod:
      required:
        - methodName
        - methodNamespace
        - methodVersion
      type: object
      properties:
        methodNamespace:
          type: string
          description: The namespace of the method in Agora
        methodName:
          type: string
          description: The name of the method in Agora
        methodVersion:
          type: integer
          description: The integer method version in Agora (or a string method version
            for Dockstore)
          format: int32
        methodPath:
          type: string
          description: The path of the method in Dockstore
        sourceRepo:
          type: string
          description: The method's repository, currently one of "agora" or "dockstore"
        methodUri:
          type: string
          description: URI that specifies the method's repository and captures all
            the information necessary to identify the method within its repository
            (e.g. agora://namespace/name/1, dockstore://path/version)
      description: ""
    MethodResponse:
      required:
        - managers
        - name
        - namespace
        - snapshotId
      type: object
      properties:
        managers:
          type: array
          description: List of Owners.
          items:
            type: string
        namespace:
          type: string
          description: Namespace which contains AgoraEntity.
          default: YOUR_NAMESPACE
        name:
          type: string
          description: Name of the AgoraEntity.
          default: BWA
        snapshotId:
          type: integer
          description: SnapshotId of AgoraEntity
          format: int32
        snapshotComment:
          type: string
          description: Snapshot comment of AgoraEntity
          default: Improved spline reticulation
        synopsis:
          type: string
          description: Synopsis which contains AgoraEntity.
          default: Quickly aligns short nucleotide sequences.
        documentation:
          type: string
          description: Documentation of the AgoraEntity. MUST BE REQUESTED EXPLICITLY.
          default: |
            BWA is a software package for mapping low-divergent sequences
            against a large reference genome, such as the human genome.
            It consists of three algorithms: BWA-backtrack, BWA-SW and BWA-MEM.
        createDate:
          type: string
          description: Timestamp of creation
        url:
          type: string
          description: URL where resource can be accessed.
        payload:
          type: string
          description: Payload of method -- must be in WDL format. MUST BE REQUESTED
            EXPLICITLY.
          default: |
            task wc {File in_file command { cat ${in_file} | wc -l } output { Int count = read_int(stdout()) }}
        entityType:
          type: string
          description: Type of the AgoraEntity -- Task or Workflow.
          default: Task
    Namespace:
      type: object
      properties:
        namespace:
          type: string
          description: Entity namespace
        name:
          type: string
          description: Entity name
    NewMethodConfigIngest:
      required:
        - deleted
        - inputs
        - methodConfigVersion
        - methodRepoMethod
        - name
        - namespace
        - outputs
        - prerequisites
        - rootEntityType
      type: object
      properties:
        namespace:
          type: string
          description: Method configuration namespace
        name:
          type: string
          description: Method configuration name
        rootEntityType:
          type: string
          description: Method configuration root entity type
        inputs:
          type: object
          additionalProperties:
            type: string
          description: Input map - Map[string, string]
        outputs:
          type: object
          additionalProperties:
            type: string
          description: Output map - Map[string, string]
        prerequisites:
          type: object
          additionalProperties:
            type: string
          description: Prerequisites map - Map[string, string]
        methodRepoMethod:
          type: object
          additionalProperties:
            type: string
          description: Method ID - Map
        methodConfigVersion:
          type: integer
          description: Version number, incremented on edit
          format: int32
        deleted:
          type: boolean
          description: Is this config marked as deleted?
          default: false
    NihStatus:
      required:
        - linkedNihUsername
      type: object
      properties:
        linkedNihUsername:
          type: string
        datasetPermissions:
          type: array
          items:
            $ref: '#/components/schemas/DatasetPermission'
        linkExpireTime:
          type: integer
          format: int64
          default: 0
    NotificationType:
      required:
        - description
        - notificationKey
      type: object
      properties:
        notificationKey:
          type: string
        description:
          type: string
      description: key and description of a notification
    OrchestrationVersion:
      type: object
      properties:
        version:
          type: string
    PermissionReport:
      required:
        - referencedMethods
        - workspaceACL
      type: object
      properties:
        workspaceACL:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/WorkspaceAccessEntry'
          description: a map of (user email -> WorkspaceAccessEntry). `exampleEmail`
            is an example key.
        referencedMethods:
          type: array
          items:
            $ref: '#/components/schemas/EntityAccessControl'
      description: ACLs for users of a workspace and methods referenced by that workspace
    PermissionReportRequest:
      type: object
      properties:
        users:
          type: array
          description: list of email addresses; optional; defaults to all users in
            the workspace
          items:
            type: string
        configs:
          type: array
          description: list of configs; optional; defaults to all configs in the workspace
          items:
            $ref: '#/components/schemas/MethodConfigurationName'
      description: users and/or configs on which to report.
    PFBRequest:
      required:
        - url
      type: object
      properties:
        url:
          type: string
          description: link to publically accessible PFB/Avro
    ImportRequest:
      required:
        - filetype
        - url
      type: object
      properties:
        filetype:
          type: string
          description: "'pfb' or 'tdrexport'; the type of import to perform"
        url:
          type: string
          description: link to publically accessible file to import
        options:
          type: object
          properties:
            tdrSyncPermissions:
              type: boolean
              description: optional parameter for permissions to sync for tdr snapshots
    ImportResponse:
      required:
        - jobId
        - url
      type: object
      properties:
        url:
          type: string
          description: the link to TSV or PFB/Avro specified in the request
        jobId:
          type: string
          description: unique id for the import job.
        workspace:
          type: object
          properties:
            namespace:
              type: string
              description: the workspace namespace specified in the request
            name:
              type: string
              description: the workspace name specified in the request
    ImportJobStatusResponse:
      required:
        - jobId
        - status
      type: object
      properties:
        jobId:
          type: string
          description: unique id for the import job.
        filetype:
          type: string
          description: type of the import job.
        status:
          type: string
          description: short status for the import job.
        message:
          type: string
          description: extended explanation for the import job.
    Profile:
      required:
        - firstName
        - institute
        - institutionalProgram
        - lastName
        - nonProfitStatus
        - pi
        - programLocationCity
        - programLocationCountry
        - programLocationState
        - title
      type: object
      properties:
        firstName:
          type: string
          description: User's first name
        lastName:
          type: string
          description: User's last name
        title:
          type: string
          description: User's title
        contactEmail:
          type: string
          description: User's contact email (if different from account email)
        institute:
          type: string
          description: User's home institution
        institutionalProgram:
          type: string
          description: User's institutional program
        programLocationCity:
          type: string
          description: User's program location city
        programLocationState:
          type: string
          description: User's program location state
        programLocationCountry:
          type: string
          description: User's program location country
        pi:
          type: string
          description: Principal Investigator
        nonProfitStatus:
          type: string
          description: User's program non-profit status
        termsOfService:
          type: string
          description:
            The Terms of Service url, "app.terra.bio/#terms-of-service", which a user
            must include to show they accept the Terms of Service
        department:
          type: string
          description: User's department within an institution
        interestInTerra:
          type: string
          description: A string of comma-separated values of why the User is interested in Terra
    PublishConfigurationIngest:
      required:
        - configurationName
        - configurationNamespace
        - sourceName
        - sourceNamespace
      type: object
      properties:
        configurationNamespace:
          type: string
          description: Method configuration namespace
        configurationName:
          type: string
          description: Method configuration name
        sourceNamespace:
          type: string
          description: Method configuration source namespace
        sourceName:
          type: string
          description: Method configuration source name
    RawlsBillingProjectResponse:
      required:
        - projectName
        - invalidBillingAccount
        - roles
      type: object
      properties:
        projectName:
          type: string
          description: the name of the project
        billingAccount:
          type: string
          description: the billing account to use in google projects
        servicePerimeter:
          type: string
          description: the name of the service parameters for google project
        invalidBillingAccount:
          type: boolean
          description: whether or not the billing account is usable by Terra
        roles:
          type: array
          items:
            type: string
          description: the roles the caller has on the project
        status:
          type: string
          enum:
            - Creating
            - Ready
            - Error
            - Deleting
            - DeletionFailed
            - AddingToPerimeter
            - CreatingLandingZone
          description: the status of allocating the billing project's resources.
        message:
          type: string
          description: informational message about the project
        azureManagedAppCoordinates:
          $ref: '#/components/schemas/AzureManagedAppCoordinates'
        cloudPlatform:
          type: string
          enum:
            - GCP
            - AZURE
            - UNKNOWN
        landingZoneId:
          type: string
          format: uuid
          description: the UUID of the landing zone associated with the project (cloudPlatform AZURE only)
        organization:
          $ref: '#/components/schemas/RawlsBillingProjectOrganization'
    RawlsGroupRef:
      type: object
      properties:
        groupName:
          type: string
          description: ""
      description: a reference to a group
    RawlsGroupShort:
      type: object
      properties:
        groupName:
          type: string
          description: the name of the group
        groupEmail:
          type: string
          description: the email associated with the group
      description: a reference to a group
    RawlsMe:
      type: object
      properties:
        userInfo:
          $ref: '#/components/schemas/UserInfo'
        enabled:
          $ref: '#/components/schemas/ExtendedEnabled'
    RegisterProfile:
      type: object
      properties:
        userId:
          type: string
          description: The user's subject id
        keyValuePairs:
          type: array
          items:
            $ref: '#/components/schemas/KeyValuePair'
    RegisterRequest:
      type: object
      properties:
        acceptsTermsOfService:
          type: boolean
          description: Does the user accept the Terra Terms of Service?
        profile:
          $ref: '#/components/schemas/Profile'
    ResearchPurpose:
      required:
        - DS
        - NAGR
        - NCTRL
        - NCU
        - NMDS
        - POA
      type: object
      properties:
        DS:
          type: array
          description: |
            Disease focused research. Values are DOID ontology node ids in the form http://purl.obolibrary.org/obo/DOID_NNN. Specify an empty array if this is not disease focused research.
          items:
            type: string
            example: http://purl.obolibrary.org/obo/DOID_4
        NMDS:
          type: boolean
          description: Methods development/Validation study
          default: false
        NCTRL:
          type: boolean
          description: Control set
          default: false
        NAGR:
          type: boolean
          description: Aggregate analysis to understand variation in the general population
          default: false
        POA:
          type: boolean
          description: Study population origins or ancestry
          default: false
        NCU:
          type: boolean
          description: Commercial purpose/by a commercial entity
          default: false
    ResearchPurposeRequest:
      type: object
      properties:
        DS:
          type: array
          description: |
            Disease focused research. Values are DOID ontology node ids in the form http://purl.obolibrary.org/obo/DOID_NNN. Specify an empty array if this is not disease focused research.
          items:
            type: string
            example: http://purl.obolibrary.org/obo/DOID_4
        NMDS:
          type: boolean
          description: Methods development/Validation study
          default: false
        NCTRL:
          type: boolean
          description: Control set
          default: false
        NAGR:
          type: boolean
          description: Aggregate analysis to understand variation in the general population
          default: false
        POA:
          type: boolean
          description: Study population origins or ancestry
          default: false
        NCU:
          type: boolean
          description: Commercial purpose/by a commercial entity
          default: false
        prefix:
          type: string
          description: Prefix for query properties. Must match prefix used when indexing.
          default: ""
    SearchTermRef:
      type: object
      properties:
        searchString:
          type: string
          description: The term to search for
        filters:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Map[String, Array[String]] Each entry contains the column name
            (i.e. "library:indication") and a list of terms that will be or'ed in
            the query (["cancer", "sleep apnea"])
        researchPurpose:
          $ref: '#/components/schemas/ResearchPurpose'
        fieldAggregations:
          type: object
          additionalProperties:
            type: integer
            format: int32
          description: Map[String, Int] The list of fields for which you would like
            to retrieve aggregations and the number of aggregations to return. Default
            is 5. Specify 0 to get all
        from:
          type: integer
          description: Where in the results list to start (used for pagination)
          format: int32
          default: 0
        size:
          type: integer
          description: How many results to return
          format: int32
          default: 10
        sortField:
          type: string
          description: Field name on which to sort; defaults to sort by relevance
            if not specified
        sortDirection:
          type: string
          description: asc or desc; defaults to asc if not specified
    StackTraceElement:
      required:
        - className
        - fileName
        - lineNumber
        - methodName
      type: object
      properties:
        className:
          type: string
          description: class name
        methodName:
          type: string
          description: method name
        fileName:
          type: string
          description: source file name
        lineNumber:
          type: integer
          description: line number
          format: int32
      description: ""
    SpendReportConfiguration:
      required:
        - datasetGoogleProject
        - datasetName
      type: object
      properties:
        datasetGoogleProject:
          type: string
          description: the name of the Google Project where the BigQuery dataset resides
        datasetName:
          type: string
          description: the name of the BigQuery dataset containing project spend data
      description: ""
    StringArray:
      type: array
      example:
        - foo
        - bar
      items:
        type: string
    Submission:
      type: object
      properties:
        submissionId:
          type: string
          description: SubmissionRequest unique identifier
        submissionDate:
          type: string
          description: SubmissionRequest date
          format: date-time
        submitter:
          type: string
          description: user that created the submission
        methodConfigurationNamespace:
          type: string
          description: Method configuration namespace
        methodConfigurationName:
          type: string
          description: Method configuration name
        submissionEntity:
          $ref: '#/components/schemas/AttributeEntityReference'
        workflows:
          type: array
          description: Status of Workflow(s)
          items:
            $ref: '#/components/schemas/Workflow'
        status:
          $ref: '#/components/schemas/SubmissionStatus'
        cost:
          type: number
          description: The compute cost of this submission
          format: float
        useCallCache:
          type: boolean
          description: Whether or not to read from cache for this submission
        deleteIntermediateOutputFiles:
          type: boolean
          description: Whether or not to delete intermediate output files when the
            workflow completes. See Cromwell docs for more information.
        useReferenceDisks:
          type: boolean
          description: Whether or not to use pre-built disks for common genome references
        memoryRetryMultiplier:
          type: number
          description: If a task fails due to running out of memory and the task has `maxRetries` in its runtime attributes,
            then it will be retried with its memory multiplied by this amount.  See [Cromwell docs](https://cromwell.readthedocs.io/en/develop/cromwell_features/RetryWithMoreMemory/#retry-with-more-memory)
            for more information.
        workflowFailureMode:
          type: string
          description: What happens after a task fails. Choose from ContinueWhilePossible
            and NoNewCalls. Defaults to NoNewCalls if not specified. See Cromwell
            docs for more information.
          default: NoNewCalls
          enum:
            - NoNewCalls
            - ContinueWhilePossible
        userComment:
          type: string
          description: Comment for the submission
      description: ""
    SubmissionsCountResponse:
      type: object
      properties:
        Accepted:
          type: integer
          format: int32
        Evaluating:
          type: integer
          format: int32
        Submitting:
          type: integer
          format: int32
        Submitted:
          type: integer
          format: int32
        Aborting:
          type: integer
          format: int32
        Aborted:
          type: integer
          format: int32
        Done:
          type: integer
          format: int32
    SubmissionRequest:
      required:
        - methodConfigurationName
        - methodConfigurationNamespace
        - useCallCache
      type: object
      properties:
        methodConfigurationNamespace:
          type: string
          description: Namespace of the method configuration to execute.
        methodConfigurationName:
          type: string
          description: Name of the method configuration to execute.
        entityType:
          type: string
          description: Type of root entity for expression. Optional if the method
            configuration has no root entity.
        entityName:
          type: string
          description: Name of root entity for expression. Optional if the method
            configuration has no root entity.
        expression:
          type: string
          description: Expression that resolves to one or more entities matching the
            entity type in the method configuration. Optional if the method configuration
            has no root entity.
        useCallCache:
          type: boolean
          description: Whether or not to read from cache for this submission.
        deleteIntermediateOutputFiles:
          type: boolean
          description: Whether or not to delete intermediate output files when the
            workflow completes. See Cromwell docs for more information.
        useReferenceDisks:
          type: boolean
          description: Whether or not to use pre-built disks for common genome references
        memoryRetryMultiplier:
          type: number
          description: If a task fails due to running out of memory and the task has `maxRetries` in its runtime attributes,
            then it will be retried with its memory multiplied by this amount.  See [Cromwell docs](https://cromwell.readthedocs.io/en/develop/cromwell_features/RetryWithMoreMemory/#retry-with-more-memory)
            for more information.
        workflowFailureMode:
          type: string
          description: What happens after a task fails. Choose from ContinueWhilePossible
            and NoNewCalls. Defaults to NoNewCalls if not specified. See Cromwell
            docs for more information.
          default: NoNewCalls
          enum:
            - NoNewCalls
            - ContinueWhilePossible
        userComment:
          type: string
          description: Freeform user defined description, optional (max length 1000 characters)
        ignoreEmptyOutputs:
          type: boolean
          default: false
          description: Whether or not to create output columns if they would be empty and optional.  Defaults to false (columns are created).
      description: If the referenced method configuration takes no root entity, do
        not define `entityType`, `entityName` and `expression`.
    SubmissionStatus:
      type: string
      description: submission status
      enum:
        - Accepted
        - Evaluating
        - Submitting
        - Submitted
        - Aborting
        - Aborted
        - Done
    SubmissionValidationEntityInputs:
      required:
        - entityName
        - inputResolutions
      type: object
      properties:
        entityName:
          type: string
          description: name of entity
        inputResolutions:
          type: array
          description: input resolution
          items:
            $ref: '#/components/schemas/SubmissionValidationValue'
      description: the results of parsing each of the inputs for one entity
    SubmissionValidationHeader:
      required:
        - entityType
        - inputExpressions
      type: object
      properties:
        entityType:
          type: string
          description: type of entity
        inputExpressions:
          type: array
          description: input descriptions
          items:
            $ref: '#/components/schemas/SubmissionValidationInput'
      description: common values for all the entities -- the entity type and the input
        descriptions
    SubmissionValidationInput:
      required:
        - expression
        - wdlName
      type: object
      properties:
        wdlName:
          type: string
          description: name of input
        expression:
          type: string
          description: expression for input
      description: method configuration input parameter, it's name and the associated
        expression from the method config
    SubmissionValidationReport:
      required:
        - header
        - invalidEntities
        - request
        - validEntities
      type: object
      properties:
        header:
          $ref: '#/components/schemas/SubmissionValidationHeader'
        validEntities:
          type: array
          description: runnable entities
          items:
            $ref: '#/components/schemas/SubmissionValidationEntityInputs'
        invalidEntities:
          type: array
          description: non-runnable entities
          items:
            $ref: '#/components/schemas/SubmissionValidationEntityInputs'
        request:
          $ref: '#/components/schemas/SubmissionRequest'
      description: the results of parsing each input for each entity
    SystemStatus:
      required:
        - ok
        - systems
      type: object
      properties:
        ok:
          type: boolean
          description: whether any system(s) need attention
          example: false
        systems:
          type: object
          additionalProperties:
            type: object
          description: Map[String, SubsystemStatus]
          example:
            Agora:
              ok: true
            Google:
              ok: true
            Consent:
              ok: false
              messages:
                - ClusterHealth is RED
            Rawls:
              ok: true
            Ontology:
              ok: true
            Search:
              ok: true
            Thurloe:
              ok: false
              messages:
                - Thurloe misbehavior message
      description: report status of systems Orchestration calls out to
    SubsystemStatus:
      type: object
      properties:
        ok:
          type: boolean
          description: whether this system needs attention
        messages:
          type: array
          items:
            type: string
      description: specifics for each subsystem
    SubmissionValidationValue:
      required:
        - inputName
      type: object
      properties:
        value:
          type: string
          description: the value of the input expression for the specified entity
        error:
          type: string
          description: parsing error(s)
        inputName:
          type: string
          description: name of input
      description: result of an expression parse for one of the inputs
    TerraPreference:
      type: object
      properties:
        preferTerra:
          type: boolean
          description: When true, prefer Terra UI; when false, prefer Legacy FireCloud
            UI.
        preferTerraLastUpdated:
          type: integer
          description: Epoch timestamp representing when the Terra Preference was
            last saved.
          format: int64
      description: Current user's choice of UI views.
    ToolClass:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier for the class
        name:
          type: string
          description: A short friendly name for the class
        description:
          type: string
          description: A longer explanation of what this class is and what it can
            accomplish
      description: Describes a class (type) of tool allowing us to categorize workflows,
        tools, and maybe even other entities (such as services) separately
    Tool:
      required:
        - author
        - id
        - meta-version
        - organization
        - toolclass
        - url
        - versions
      type: object
      properties:
        url:
          type: string
          description: The URL for this tool in this registry, for example `http://agora.broadinstitute.org/tools/123456`
        id:
          type: string
          description: A unique identifier of the tool, scoped to this registry, for
            example `123456` or `123456_v1`
        organization:
          type: string
          description: The organization that published the image.
        toolname:
          type: string
          description: The name of the tool.
        toolclass:
          $ref: '#/components/schemas/ToolClass'
        description:
          type: string
          description: The description of the tool.
        author:
          type: string
          description: Contact information for the author of this tool entry in the
            registry. (More complex authorship information is handled by the descriptor)
        meta-version:
          type: string
          description: The version of this tool in the registry. Iterates when fields
            like the description, author, etc. are updated.
        contains:
          type: array
          description: An array of IDs for the applications that are stored inside
            this tool (for example `https://bio.tools/tool/mytum.de/SNAP2/1`). This
            always returns an empty array.
          items:
            type: string
        verified:
          type: boolean
          description: Reports whether this tool has been verified by a specific organization
            or individual.  This always returns false.
        verified-source:
          type: string
          description: Source of metadata that can support a verified tool, such as
            an email or URL
        signed:
          type: boolean
          description: Reports whether this tool has been signed.  This always returns
            false.
        versions:
          type: array
          description: A list of versions for this tool
          items:
            $ref: '#/components/schemas/ToolVersion'
      description: A tool (or described tool) describes one pairing of a tool as described
        in a descriptor file (which potentially describes multiple tools) and a Docker
        image.
    ToolVersion:
      required:
        - id
        - meta-version
        - url
      type: object
      properties:
        name:
          type: string
          description: The name of the version.
        url:
          type: string
          description: The URL for this tool in this registry, for example `http://agora.broadinstitute.org/tools/123456/1`
        id:
          type: string
          description: An identifier of the version of this tool for this particular
            tool registry, for example `v1`
        image:
          type: string
          description: The docker path to the image (and version) for this tool. (e.g.
            quay.io/seqware/seqware_full/1.1). This always returns an empty string.
        descriptor-type:
          type: array
          description: The type (or types) of descriptors available.
          items:
            type: string
            enum:
              - WDL
        dockerfile:
          type: boolean
          description: Reports if this tool has a dockerfile available. This always
            returns false.
        meta-version:
          type: string
          description: The version of this tool version in the registry. Iterates
            when fields like the description, author, etc. are updated.
      description: A tool version describes a particular iteration of a tool as described
        by a reference to a specific image and dockerfile.
    ToolDescriptor:
      required:
        - descriptor
        - type
      type: object
      properties:
        type:
          type: string
          enum:
            - WDL
        descriptor:
          type: string
          description: The descriptor that represents this version of the tool. (WDL)
        url:
          type: string
          description: Optional url to the tool descriptor used to build this image,
            should include version information, and can include a git hash (e.g. https://raw.githubusercontent.com/ICGC-TCGA-PanCancer/pcawg_delly_workflow/ea2a5db69bd20a42976838790bc29294df3af02b/delly_docker/Delly.cwl
            )
      description: A tool descriptor is a metadata document that describes one or
        more tools.
    Metadata:
      required:
        - api-version
        - version
      type: object
      properties:
        version:
          type: string
          description: The version of this registry
        api-version:
          type: string
          description: The version of the GA4GH tool-registry API supported by this
            registry
        country:
          type: string
          description: A country code for the registry (ISO 3166-1 alpha-3)
        friendly-name:
          type: string
          description: A friendly name that can be used in addition to the hostname
            to describe a registry
      description: Describes this registry to better allow for mirroring and indexing.
    UpdateRawlsBillingAccountRequest:
      required:
        - billingAccount
      type: object
      properties:
        billingAccount:
          type: string
          description: The name of the billing account to use
    UserImportPermission:
      type: object
      properties:
        billingProject:
          type: boolean
          description: does the user have at least one ready billing project?
        writableWorkspace:
          type: boolean
          description: does the user have at least one writable workspace?
    UserInfo:
      type: object
      properties:
        userSubjectId:
          type: string
          description: User's ID (subject id from Google)
        userEmail:
          type: string
          description: User's email
    ValidatedMethodConfiguration:
      required:
        - extraInputs
        - invalidInputs
        - invalidOutputs
        - methodConfiguration
        - missingInputs
        - validInputs
        - validOutputs
      type: object
      properties:
        validInputs:
          type: array
          items:
            type: string
        invalidInputs:
          type: object
          additionalProperties:
            type: object
        missingInputs:
          type: array
          items:
            type: string
        extraInputs:
          type: array
          items:
            type: string
        validOutputs:
          type: array
          items:
            type: string
        invalidOutputs:
          type: object
          additionalProperties:
            type: object
        methodConfiguration:
          $ref: '#/components/schemas/MethodConfiguration'
      description: Information about the validity of a method configuration's expressions
        relative to the method itself
    Workflow:
      type: object
      properties:
        workflowId:
          type: string
          description: Workflow unique identifier
        status:
          $ref: '#/components/schemas/WorkflowStatus'
        statusLastChangedDate:
          type: string
          description: Status last-changed date
          format: date-time
        workflowEntity:
          $ref: '#/components/schemas/AttributeEntityReference'
        inputResolutions:
          type: array
          description: The evaluation of each input
          items:
            $ref: '#/components/schemas/SubmissionValidationValue'
        messages:
          type: array
          description: List of messages about this workflow
          items:
            type: string
        cost:
          type: number
          description: The run cost of this workflow
          format: float
      description: ""
    UserCommentUpdateOperation:
      required:
        - userComment
      type: object
      properties:
        userComment:
          type: string
          description: The updated value for user comment (max length 1000 characters)
      description: Update user comment for submission
    WorkflowCost:
      type: object
      properties:
        cost:
          type: number
          description: Workflow cost
          format: float
        workflowId:
          type: string
          description: The id of this workflow
      description: The cost of a workflow, if available
    WorkflowQueueStatusResponse:
      required:
        - estimatedQueueTimeMS
        - workflowCountsByStatus
        - workflowsBeforeNextUserWorkflow
      type: object
      properties:
        estimatedQueueTimeMS:
          type: integer
          description: estimated milliseconds until the current queue is submitted
          format: int64
        workflowsBeforeNextUserWorkflow:
          type: integer
          description: the number of workflows in the queue ahead of the user's first
            workflow
          format: int32
        workflowCountsByStatus:
          type: object
          additionalProperties:
            type: integer
            format: int32
          description: Map[String,Int]
      description: Information about the status of workflows and the workflow queue
    WorkflowStatus:
      type: string
      description: workflow status
      enum:
        - Queued
        - Launching
        - Submitted
        - Running
        - Failed
        - Succeeded
        - Aborting
        - Aborted
        - Unknown
    Workspace:
      required:
        - accessLevels
        - attributes
        - authDomainACLs
        - authorizationDomain
        - bucketName
        - createdBy
        - createdDate
        - isLocked
        - lastModified
        - name
        - namespace
        - workspaceId
      type: object
      properties:
        namespace:
          type: string
          description: The namespace the workspace belongs to
        name:
          type: string
          description: The name of the workspace
        authorizationDomain:
          type: array
          description: The list of groups to form the Authorization Domain (empty
            if no Authorization Domain is set)
          items:
            $ref: '#/components/schemas/ManagedGroupRef'
        workspaceId:
          type: string
          description: A UUID associated with the workspace
        bucketName:
          type: string
          description: The name of the bucket associated with the workspace
        createdDate:
          type: string
          description: The date the workspace was created in yyyy-MM-ddTHH:mm:ss.SSSZZ
            format
          format: date-time
        lastModified:
          type: string
          description: The date the workspace was last modified in yyyy-MM-ddTHH:mm:ss.SSSZZ
            format
          format: date-time
        createdBy:
          type: string
          description: The user who created the workspace
        attributes:
          type: object
          additionalProperties:
            type: string
          description: Map[String, Attribute]
        accessLevels:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/RawlsGroupRef'
          description: Map[String, RawlsGroupRef]
        authDomainACLs:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/RawlsGroupRef'
          description: Map[String, RawlsGroupRef]
        isLocked:
          type: boolean
          description: Can the Workspace currently be modified?
      description: ""
    WorkspaceACL:
      required:
        - acl
      type: object
      properties:
        acl:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/WorkspaceAccessEntry'
          description: Map[String, WorkspaceAccessEntry]
      description: ""
    WorkspaceACLUpdate:
      required:
        - accessLevel
        - email
      type: object
      properties:
        email:
          type: string
          description: email address of the user or group whose permissions will be
            changed
        accessLevel:
          type: string
          description: The access level to grant to this user or group (OWNER, READER,
            WRITER, NO ACCESS)
        canShare:
          type: boolean
          description: Set to true if you want this user to be able to share the workspace
            with other users, only meaningful for readers and writers, default false
        canCompute:
          type: boolean
          description: Set to true if you want this user to be able to launch compute
            in this workspace, may not be true for readers, default false for reader,
            true otherwise
      description: ""
    WorkspaceACLUpdateResponse:
      required:
        - accessLevel
        - subjectId
      type: object
      properties:
        subjectId:
          type: string
          description: id of the user or group whose permissions will be changed
        accessLevel:
          type: string
          description: The access level granted to this user or group (OWNER, READER,
            WRITER, NO ACCESS)
      description: ""
    WorkspaceACLUpdateResponseList:
      required:
        - invitesSent
        - invitesUpdated
        - usersNotFound
        - usersUpdated
      type: object
      properties:
        usersUpdated:
          type: array
          description: the users or groups who were updated
          items:
            $ref: '#/components/schemas/WorkspaceACLUpdateResponse'
        invitesSent:
          type: array
          description: the list of invites that were sent
          items:
            $ref: '#/components/schemas/WorkspaceACLUpdate'
        invitesUpdated:
          type: array
          description: the list of invites that were updated
          items:
            $ref: '#/components/schemas/WorkspaceACLUpdate'
        usersNotFound:
          type: array
          description: the users or groups who were not found
          items:
            $ref: '#/components/schemas/WorkspaceACLUpdate'
      description: ""
    WorkspaceAccessEntry:
      required:
        - accessLevel
        - canCompute
        - canShare
        - pending
      type: object
      properties:
        accessLevel:
          type: string
          description: The access level granted to this user or group (OWNER, READER,
            WRITER, NO ACCESS)
        pending:
          type: boolean
          description: The status of the users access
        canShare:
          type: boolean
          description: True if the user can share the workspace with others, false
            otherwise
        canCompute:
          type: boolean
          description: True if the user can launch compute in this workspace, false
            otherwise
      description: ""
    WorkspaceAccessLevel:
      type: string
      description: The level of access a user or group has on a Workspace. NoAccess,
        Read, Write, Owner, ProjectOwner
      enum:
        - PROJECT_OWNER
        - OWNER
        - WRITER
        - READER
        - NO ACCESS
    WorkspaceBucketOptions:
      required:
        - requesterPays
      type: object
      properties:
        requesterPays:
          type: boolean
          description: Whether the bucket is requester pays
      description: Extra information about a GCS bucket attached to a workspace
    WorkspaceCatalog:
      required:
        - catalog
        - email
      type: object
      properties:
        email:
          type: string
          description: email address of the user or group whose permissions will be
            changed
        catalog:
          type: boolean
          description: Set to true if you want this user to be able to perform library
            related operations on the workspace
      description: ""
    WorkspaceCatalogResponse:
      required:
        - catalog
        - subjectId
      type: object
      properties:
        subjectId:
          type: string
          description: subject id of the user or group whose permissions were changed
        catalog:
          type: boolean
          description: Set to true if you want this user to be able to perform library
            related operations on the workspace
      description: ""
    WorkspaceCatalogUpdateResponseList:
      required:
        - emailsNotFound
        - usersUpdated
      type: object
      properties:
        usersUpdated:
          type: array
          description: the users or groups who were updated
          items:
            $ref: '#/components/schemas/WorkspaceCatalogResponse'
        emailsNotFound:
          type: array
          description: the emails of users or groups who were not found
          items:
            type: string
      description: ""
    WorkspaceDeletionResult:
      type: object
      description: Workspace deletion metadata
      properties:
        gcpContext:
          $ref: '#/components/schemas/GcpWorkspaceDeletionContext'
        jobId:
          type: string
          description: Deletion job ID
    GcpWorkspaceDeletionContext:
      type: object
      description: Workspace deletion context information for a GCP workspace
      properties:
        bucketName:
          type: string
          description: Name of the workspace's GCP bucket, if present
    WorkspaceDetails:
      required:
        - bucketName
        - createdBy
        - createdDate
        - isLocked
        - lastModified
        - name
        - namespace
        - workspaceId
        - googleProject
        - workspaceVersion
        - state
      type: object
      properties:
        attributes:
          type: object
          properties: { }
          description: Map[String, Attribute]
        authorizationDomain:
          type: array
          description: The list of groups in the Authorization Domain (empty if no
            AD is set)
          items:
            $ref: '#/components/schemas/ManagedGroupRef'
        bucketName:
          type: string
          description: The name of the bucket associated with the workspace
        createdBy:
          type: string
          description: The user who created the workspace
        createdDate:
          type: string
          description: The date the workspace was created in yyyy-MM-ddTHH:mm:ss.SSSZZ
            format
          format: date-time
        isLocked:
          type: boolean
          description: Can the Workspace currently be modified?
        lastModified:
          type: string
          description: The date the workspace was last modified in yyyy-MM-ddTHH:mm:ss.SSSZZ
            format
          format: date-time
        name:
          type: string
          description: The name of the workspace
        namespace:
          type: string
          description: The namespace the workspace belongs to
        workflowCollectionName:
          type: string
          description: The name of the workflow collection associated with the workspace
        workspaceId:
          type: string
          description: A UUID associated with the workspace
        googleProject:
          type: string
          description: Identifies the google project used by the workspace for compute and storage
        googleProjectNumber:
          type: string
          description: A different google project identifier for the same project identified by the googleProject; required by google for certain actions
        workspaceVersion:
          type: string
          description: internal use
        billingAccount:
          type: string
          description: The current billing account being charged for activity within this workspace. For desired billing account, look to the billing account specified on this workspace's billing project
        billingAccountErrorMessage:
          type: string
          description: Error message received during most recent attempt to update the current billing account on workspace's Google project. Empty if update was successful.
        completedCloneWorkspaceFileTransfer:
          type: string
          description: The date all files were successfully transferred to the workspace bucket if applicable
            in yyyy-MM-ddTHH:mm:ss.SSSZZ format
          format: date-time
        cloudPlatform:
          type: string
          description: The cloud platform of the workspace
          enum:
            - GCP
            - AZURE
        state:
          type: string
          description: The lifecycle state of the workspace
          enum:
            - Creating
            - CreateFailed
            - Ready
            - Updating
            - UpdateFailed
            - Deleting
            - DeleteFailed
      description: ""
    WorkspaceListResponse:
      type: object
      properties:
        accessLevel:
          $ref: '#/components/schemas/WorkspaceAccessLevel'
        public:
          type: boolean
        canShare:
          type: boolean
          description: True if the user can share the workspace with others, false otherwise
        canCompute:
          type: boolean
          description: True if the user can launch compute in this workspace, false otherwise
        workspace:
          $ref: '#/components/schemas/WorkspaceDetails'
        workspaceSubmissionStats:
          description: GCP workspace submission statistics, deprecated as part of the list response due to slow performance. This field will continue to be supported on individual workspace details.
          deprecated: true
      description: ""
    WorkspaceName:
      required:
        - name
        - namespace
      type: object
      properties:
        namespace:
          type: string
          description: The namespace (billing project) the workspace belongs to
        name:
          type: string
          description: The name of the workspace
      description: ""
    WorkspaceRequest:
      required:
        - attributes
        - name
        - namespace
      type: object
      properties:
        namespace:
          type: string
          description: The namespace (billing project) the workspace belongs to
        name:
          type: string
          description: The name of the workspace
        authorizationDomain:
          type: array
          description: The list of groups in the Authorization Domain (empty if no
            AD is set)
          items:
            $ref: '#/components/schemas/ManagedGroupRef'
        attributes:
          type: object
          properties: {}
        noWorkspaceOwner:
          type: boolean
          description: Optional, false if not specified. If true, the workspace is created with a Billing Project owner but no workspace owner. Requires being a Billing Project owner.
          default: false
        bucketLocation:
          type: string
          description: Region (NOT multi-region) in which bucket attached to the workspace should be created. If not provided, the bucket will be created in the 'US' multi-region.
      description: ""
    WorkspaceRequestClone:
      required:
        - attributes
        - name
        - namespace
      type: object
      properties:
        namespace:
          type: string
          description: The namespace (billing project) the workspace belongs to
        name:
          type: string
          description: The name of the workspace
        authorizationDomain:
          type: array
          description: The list of groups in the Authorization Domain (empty if no
            AD is set)
          items:
            $ref: '#/components/schemas/ManagedGroupRef'
        attributes:
          type: object
          properties: {}
        copyFilesWithPrefix:
          type: string
          description: Used for clone operations only; the prefix for files to copy between source and destination workspace buckets
        noWorkspaceOwner:
          type: boolean
          description: Optional, false if not specified. If true, the workspace is created with a Billing Project owner but no workspace owner. Requires being a Billing Project owner.
          default: false
        bucketLocation:
          type: string
          description: Region (NOT multi-region) in which bucket attached to the workspace should be created. If not provided, the bucket will be created in the 'US' multi-region.
      description: ""
    WorkspaceResponse:
      type: object
      properties:
        accessLevel:
          $ref: '#/components/schemas/WorkspaceAccessLevel'
        bucketOptions:
          $ref: '#/components/schemas/WorkspaceBucketOptions'
        canShare:
          type: boolean
          description: True if the user can share the workspace with others, false otherwise
        canCompute:
          type: boolean
          description: True if the user can launch compute in this workspace, false otherwise
        catalog:
          type: boolean
        owners:
          type: array
          description: |
            Owners of this workspace. This API only lists owners; use the get-workspace-ACL API to get the full list of all users at all permission levels.
          items:
            type: string
        workspace:
          $ref: '#/components/schemas/WorkspaceDetails'
        workspaceSubmissionStats:
          $ref: '#/components/schemas/WorkspaceSubmissionStats'
      description: ""
    WorkspaceSettingsResponse:
      required:
        - successes
        - failures
      type: object
      properties:
        successes:
          type: array
          description: The settings that were successfully applied
          items:
            $ref: '#/components/schemas/WorkspaceSetting'
        failures:
          $ref: '#/components/schemas/FailedWorkspaceSettingsResponse'
    FailedWorkspaceSettingsResponse:
      type: object
      description: The settings that failed to apply. The key is the setting type that failed.
      additionalProperties:
        $ref: '#/components/schemas/ErrorReport'
    WorkspaceSetting:
      required:
        - settingType
        - config
      type: object
      properties:
        settingType:
          type: string
          description: The type of the workspace setting
          enum:
            - GcpBucketLifecycle
            - GcpBucketSoftDelete
            - GcpBucketRequesterPays
            - SeparateSubmissionFinalOutputs
        config:
          description: The configuration of the workspace setting
          oneOf:
            - $ref: '#/components/schemas/WorkspaceSettingGcpBucketLifecycleConfig'
            - $ref: '#/components/schemas/WorkspaceSettingGcpBucketSoftDeleteConfig'
            - $ref: '#/components/schemas/WorkspaceSettingGcpBucketRequesterPaysConfig'
            - $ref: '#/components/schemas/WorkspaceSettingSeparateSubmissionFinalOutputs'
    WorkspaceSettingGcpBucketLifecycleConfig:
      required:
        - rules
      type: object
      properties:
        rules:
          type: array
          description: The lifecycle rules for the workspace bucket
          items:
            $ref: '#/components/schemas/GcpBucketLifecycleRule'
    GcpBucketLifecycleRule:
      required:
        - action
        - conditions
      type: object
      properties:
        action:
          $ref: '#/components/schemas/GcpBucketLifecycleAction'
        conditions:
          $ref: '#/components/schemas/GcpBucketLifecycleCondition'
    GcpBucketLifecycleAction:
      required:
        - actionType
      type: object
      properties:
        actionType:
          type: string
          description: The type of the lifecycle action
          enum:
            - Delete
    GcpBucketLifecycleCondition:
      type: object
      minProperties: 1
      properties:
        age:
          type: integer
          description: The age of the object in days
        matchesPrefix:
          type: array
          description: Object name prefixes that this rule applies to
          items:
            type: string
    WorkspaceSettingGcpBucketSoftDeleteConfig:
      required:
        - retentionDurationInSeconds
      type: object
      properties:
        retentionDurationInSeconds:
          type: integer
          description: The length of time to retain soft-deleted objects for, in seconds
    WorkspaceSettingGcpBucketRequesterPaysConfig:
      required:
        - enabled
      type: object
      properties:
        enabled:
          type: boolean
          description: Enabled status to set for requester pays
    WorkspaceSettingSeparateSubmissionFinalOutputs:
      required:
        - enabled
      type: object
      properties:
        enabled:
          type: boolean
          description: Whether submission final outputs should be separated from intermediate outputs
    WorkspaceSubmissionStats:
      required:
        - runningSubmissionsCount
      type: object
      properties:
        lastSuccessDate:
          type: string
          description: The date of the last successful submission
          format: date-time
        lastFailureDate:
          type: string
          description: The date of the last failed submission
          format: date-time
        runningSubmissionsCount:
          type: integer
          description: Count of all the running submissions
      description: Statistics about submissions in a workspace (only supported for GCP workspaces)
    WorkspaceTag:
      required:
        - count
        - tag
      type: object
      properties:
        tag:
          type: string
          description: tag string
          example: a tag
        count:
          type: integer
          description: number of usages of the tag
          format: int32
          example: 5
    WorkspaceMigrationMetadata:
      description: Represents the status of a workspace migration
      type: object
      required:
        - id
        - created
        - updated
      properties:
        id:
          type: integer
          description: migration attempt number for this workspace
        created:
          type: string
          format: date-time
          description: when the migration was scheduled
        started:
          type: string
          format: date-time
          description: when the system started the migration
        updated:
          type: string
          format: date-time
          description: when the system last updated the migration
        finished:
          type: string
          format: date-time
          description: when the system finished executing the migration
        outcome:
          $ref: '#/components/schemas/WorkspaceMigrationOutcome'
    WorkspaceMigrationOutcome:
      description: Represents the result of a workspace migration attempt
      oneOf:
        - $ref: '#/components/schemas/WorkspaceMigrationSuccess'
        - $ref: '#/components/schemas/WorkspaceMigrationFailure'
    WorkspaceMigrationSuccess:
      type: string
      enum:
        - success
    WorkspaceMigrationFailure:
      type: object
      required:
        - failure
      properties:
        failure:
          description: Supplementary failure information
          type: string
    BatchMigrateRequestBody:
      description: List of workspace names
      type: array
      items:
        $ref: '#/components/schemas/WorkspaceName'
    MultiregionalBucketMigrationProgress:
      description: Represents the progress of a workspace bucket through the multiregional bucket migration pipeline
      type: object
      required:
        - migrationStep
      properties:
        migrationStep:
          description: User facing step of migration
          type: string
          enum:
            - ScheduledForMigration
            - PreparingTransferToTempBucket
            - TransferringToTempBucket
            - PreparingTransferToFinalBucket
            - TransferringToFinalBucket
            - FinishingUp
            - Finished
        outcome:
          $ref: '#/components/schemas/WorkspaceMigrationOutcome'
        tempBucketTransferProgress:
          $ref: '#/components/schemas/StorageTransferJobProgress'
        finalBucketTransferProgress:
          $ref: '#/components/schemas/StorageTransferJobProgress'
    StorageTransferJobProgress:
      description: Represents the progress of a single Storage Transfer Service job to move a bucket
      type: object
      required:
        - totalBytesToTransfer
        - bytesTransferred
        - totalObjectsToTransfer
        - objectsTransferred
      properties:
        totalBytesToTransfer:
          description: total bytes that this job will transfer
          type: integer
        bytesTransferred:
          description: bytes that this job has transferred so far
          type: integer
        totalObjectsToTransfer:
          description: total objects that this job will transfer
          type: integer
        objectsTransferred:
          description: objects that this job has transferred so far
          type: integer
    ConfigurationPayload:
      type: object
      properties:
        name:
          type: string
          description: Name of this config
          default: cancer_exome_pipeline_v2
        namespace:
          type: string
          description: Namespace of this config
          default: broad-dsde-dev
        methodRepoMethod:
          type: object
          properties:
            methodName:
              type: string
              description: Name of referenced method
              default: cancer_exome_pipeline_v2
            methodNamespace:
              type: string
              description: Namespace of referenced method
              default: broad-dsde-dev,
            methodVersion:
              type: integer
              description: Snapshot ID of referenced method
              format: int32
              default: 1
        outputs:
          type: object
          additionalProperties:
            type: string
          description: Map[String, AttributeString] from method's WDL outputs to fields
            in the workspace data model
        inputs:
          type: object
          additionalProperties:
            type: string
          description: Map[String, AttributeString] from method's WDL inputs to fields
            in the workspace data model
        rootEntityType:
          type: string
          default: pair
        prerequisites:
          type: object
          additionalProperties:
            type: string
          description: Map[String, AttributeString]
        methodConfigVersion:
          type: integer
          description: Snapshot ID of this config
          format: int32
          default: 1
        deleted:
          type: boolean
          description: Has this config been deleted?
          default: false
    WorkflowQueryResponse:
      required:
        - results
      type: object
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/WorkflowQueryResult'
      description: Response to a workflow query
    WorkflowQueryResult:
      required:
        - id
        - name
        - start
        - status
      type: object
      properties:
        id:
          type: string
          description: Workflow ID
        name:
          type: string
          description: Workflow name
        status:
          type: string
          description: Workflow status
        start:
          type: string
          description: Workflow start datetime
          format: date-time
        end:
          type: string
          description: Workflow end datetime
          format: date-time
      description: Result for an individual workflow returned by a workflow query
    WorkflowQueryParameter:
      type: object
      properties:
        start:
          type: string
          description: |
            Returns only workflows with an equal or later start datetime.  Can be specified at most once. If both start and end date are specified, start date must be before or equal to end date.
          format: date-time
        end:
          type: string
          description: |
            Returns only workflows with an equal or earlier end datetime.  Can be specified at most once. If both start and end date are specified, start date must be before or equal to end date.
          format: date-time
        status:
          type: string
          description: |
            Returns only workflows with the specified status.  If specified multiple times, returns workflows in any of the specified statuses.
          enum:
            - Submitted
            - Running
            - Aborting
            - Failed
            - Succeeded
            - Aborted
        name:
          pattern: ^[a-zA-Z][a-zA-Z0-9_]*$
          type: string
          description: |
            Returns only workflows with the specified name.  If specified multiple times, returns workflows with any of the specified names.
        id:
          pattern: ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$
          type: string
          description: |
            Returns only workflows with the specified workflow id.  If specified multiple times, returns workflows with any of the specified workflow ids.
      description: Workflow query parameters
    VersionResponse:
      type: object
      properties:
        cromwell:
          type: string
          description: The version of the Cromwell Engine
      description: Returns the version of Cromwell
    StatusResponse:
      type: object
      properties:
        serviceName:
          type: object
          properties:
            ok:
              type: boolean
            messages:
              type: array
              items:
                type: string
      description: Returns the status of monitored subsystems.
    WorkflowCacheDiffResponse:
      type: object
      properties:
        callA:
          $ref: '#/components/schemas/WorkflowCallDiff'
        callB:
          $ref: '#/components/schemas/WorkflowCallDiff'
        hashDifferential:
          type: array
          items:
            $ref: '#/components/schemas/WorkflowCallDiffCallHashDiff'
    WorkflowCallDiff:
      type: object
      properties:
        allowResultReuse:
          type: boolean
        callFqn:
          type: string
        executionStatus:
          type: string
        jobIndex:
          type: number
        workflowId:
          $ref: '#/components/parameters/workflowIdParam'
    WorkflowCallDiffCallHashDiff:
      type: object
      properties:
        hashKey:
          type: string
        callA:
          type: string
        callB:
          type: string
    WorkflowStatusResponse:
      required:
        - id
        - status
      type: object
      properties:
        id:
          type: string
          description: The identifier of the workflow
        status:
          type: string
          description: The status of the workflow
    WorkflowMetadataResponse:
      required:
        - id
        - status
        - submission
      type: object
      properties:
        id:
          type: string
          description: The identifier of the workflow
        status:
          type: string
          description: The status of the workflow
        submission:
          type: string
          description: Submission datetime of the workflow in ISO8601 format with
            milliseconds
          format: date-time
        start:
          type: string
          description: Start datetime of the workflow in ISO8601 format with milliseconds
          format: date-time
        end:
          type: string
          description: End datetime of the workflow in ISO8601 format with milliseconds
          format: date-time
        inputs:
          type: object
          additionalProperties:
            type: object
          description: Map of input keys to input values
        outputs:
          type: object
          additionalProperties:
            type: object
          description: Map of output keys to output values
        calls:
          $ref: '#/components/schemas/CallMetadata'
        failures:
          $ref: '#/components/schemas/FailureMessage'
      description: Workflow and call level metadata
    FailureMessage:
      required:
        - failure
        - timestamp
      type: object
      properties:
        failure:
          type: string
          description: The failure message
        timestamp:
          type: string
          description: The time at which this failure occurred
          format: date-time
      description: Failure messages
    WorkflowDescription:
      required:
        - errors
        - inputs
        - name
        - outputs
        - submittedDescriptorType
        - valid
      type: object
      properties:
        valid:
          type: boolean
          description: Whether the workflow and inputs as submitted passed validation
        errors:
          type: array
          description: The set of validation failure messages
          example:
            - The 'errors' field will be filled if 'valid' is false
            - We might also provide warnings to a 'valid' workflow here
            - Otherwise, 'errors' will be the empty array
          items:
            type: string
        name:
          type: string
          description: For a source file with one workflow and zero or more tasks,
            the name of the workflow. For a single task, the name of the task. For
            a source file with multiple tasks but no workflows, the empty string.
        inputs:
          type: array
          description: A list of inputs for this tool
          example:
            - name: my_wf.string_input
              valueType:
                typeName: String
              optional: false
              typeDisplayName: String
            - name: my_wf.array_input
              valueType:
                typeName: Array
                arrayType:
                  typeName: String
              optional: false
              typeDisplayName: Array[String]
            - name: my_wf.optional_input
              valueType:
                typeName: Optional
                optionalType:
                  typeName: String
              optional: true
              default: hello
              typeDisplayName: String?
            - name: my_wf.map_input
              valueType:
                typeName: Map
                mapType:
                  keyType:
                    typeName: String
                  valueType:
                    typeName: Int
              optional: false
              typeDisplayName: Map[String, Int]
            - name: my_wf.object_input
              valueType:
                typeName: Object
                objectFieldTypes:
                  - fieldName: int_field
                    fieldType:
                      typeName: Int
                  - fieldName: int_array_field
                    fieldType:
                      typeName: Array
                      arrayType:
                        typeName: Int
              optional: false
              typeDisplayName: Object
            - name: my_wf.int_string_pair_input
              valueType:
                typeName: Pair
                pairTypes:
                  - leftType:
                      - typeName: Int
                  - rightType:
                      - typeName: String
              optional: false
              typeDisplayName: Pair[Int, String]
          items:
            $ref: '#/components/schemas/ToolInputParameter'
        outputs:
          type: array
          description: A list of outputs for this tool
          example:
            - name: my_wf.string_output
              valueType:
                typeName: String
              typeDisplayName: String
            - name: my_wf.array_output
              valueType:
                typeName: Array
                arrayType:
                  typeName: String
              typeDisplayName: Array[String]
            - name: my_wf.map_output
              valueType:
                typeName: Map
                mapType:
                  keyType:
                    typeName: String
                  valueType:
                    typeName: Int
              typeDisplayName: Map[String, Int]
            - name: my_wf.object_output
              valueType:
                typeName: Object
                objectFieldTypes:
                  - fieldName: int_field
                    fieldType:
                      typeName: Int
                  - fieldName: int_array_field
                    fieldType:
                      typeName: Array
                      arrayType:
                        typeName: Int
              typeDisplayName: Object
            - name: my_wf.int_string_pair_output
              valueType:
                typeName: Pair
                tupleTypes:
                  - typeName: Int
                  - typeName: String
              typeDisplayName: Pair[Int, String]
          items:
            $ref: '#/components/schemas/ToolOutputParameter'
        submittedDescriptorType:
          $ref: '#/components/schemas/DescriptorTypeAndVersion'
    ToolInputParameter:
      required:
        - default
        - name
        - optional
        - valueType
      type: object
      properties:
        name:
          type: string
          description: The name of this input value (formatted as expected by the
            tool)
        valueType:
          $ref: '#/components/schemas/ValueType'
        optional:
          type: boolean
          description: Whether the tool allows this value to not be specified
        default:
          type: string
          description: The in-language expression used to evaluate a default value
            for this parameter, if none is supplied.
      description: An input parameter for a tool or workflow.
    ToolOutputParameter:
      required:
        - name
        - valueType
      type: object
      properties:
        name:
          type: string
          description: The name of this input value (formatted as expected by the
            tool)
        valueType:
          $ref: '#/components/schemas/ValueType'
      description: An output parameter for a tool or workflow.
    ValueType:
      type: object
      properties:
        typeName:
          type: string
          description: The type of this value
          enum:
            - String
            - File
            - Directory
            - Float
            - Int
            - Boolean
            - Optional
            - Array
            - Tuple
            - Map
            - Object
        optionalType:
          $ref: '#/components/schemas/ValueType'
        arrayType:
          $ref: '#/components/schemas/ValueType'
        mapType:
          $ref: '#/components/schemas/MapValueType'
        tupleTypes:
          type: array
          items:
            $ref: '#/components/schemas/ValueType'
        objectFieldTypes:
          type: array
          items:
            type: object
            properties:
              fieldName:
                type: string
              fieldType:
                $ref: '#/components/schemas/ValueType'
      description: The type expected for a given value.
    MapValueType:
      required:
        - keyType
        - valueType
      type: object
      properties:
        keyType:
          $ref: '#/components/schemas/ValueType'
        valueType:
          $ref: '#/components/schemas/ValueType'
      description: A type representing a map from one type to another.
    DescriptorTypeAndVersion:
      required:
        - descriptorType
        - descriptorTypeVersion
      type: object
      properties:
        descriptorType:
          $ref: '#/components/schemas/DescriptorType'
        descriptorTypeVersion:
          type: string
          example: "1.0"
      description: A workflow descriptor file type and version.
    DescriptorType:
      type: string
      description: One from a list of descriptor type strings (e.g. CWL, WDL). Note
        that these files can also include associated Docker/container files and test
        parameters that further describe a version of a tool
      example: WDL
      enum:
        - CWL
        - WDL
    LabelsResponse:
      required:
        - id
        - labels
      type: object
      properties:
        id:
          type: string
          description: The identifier of the workflow
        labels:
          type: string
          description: The custom labels as json
    WorkspaceBillingAccount:
      required:
        - workspaceName
      type: object
      properties:
        workspaceName:
          type: string
          description: the name of the workspace
        currentBillingAccountOnGoogleProject:
          type: string
          description: the billing project associated with the workspace
    TermsOfServiceDetails:
      required:
        - isEnabled
        - isGracePeriodEnabled
        - currentVersion
        - userAcceptedVersion
      type: object
      properties:
        isEnabled:
          type: boolean
          description: true if terms of service is enforced in Sam
        isGracePeriodEnabled:
          type: boolean
          description: true if there is currently a grace period enabled,
            letting users use the system without accepting the terms of service
        currentVersion:
          type: string
          description: the current version of terms of service for the system
        userAcceptedVersion:
          type: string
          description: the version of the terms of service the user has accepted
  parameters:
    AttributeNamePathParam:
      name: attributeName
      in: path
      description: Attribute Name
      required: true
      schema:
        type: string
    billingProjectPathParam:
      name: projectId
      in: path
      description: Billing Project ID
      required: true
      schema:
        type: string
    versionParam:
      name: version
      in: path
      description: Cromwell API Version
      required: true
      schema:
        type: string
        default: v1
    workspaceNamespaceParam:
      name: workspaceNamespace
      in: path
      description: Workspace Namespace
      required: true
      schema:
        type: string
    workspaceNameParam:
      name: workspaceName
      in: path
      description: Workspace Name
      required: true
      schema:
        type: string
    methodNamespaceParam:
      name: namespace
      in: path
      description: Method Namespace
      required: true
      schema:
        type: string
    methodNameParam:
      name: name
      in: path
      description: Method Name
      required: true
      schema:
        type: string
    methodSnapshotId:
      name: snapshotId
      in: path
      description: Method snapshot ID
      required: true
      schema:
        type: string
    configNamespaceParam:
      name: namespace
      in: path
      description: Method Configuration Namespace
      required: true
      schema:
        type: string
    configNameParam:
      name: name
      in: path
      description: Method Configuration Name
      required: true
      schema:
        type: string
    configSnapshotId:
      name: snapshotId
      in: path
      description: Method Configuration snapshot ID
      required: true
      schema:
        type: string
    entityTypeParam:
      name: entityType
      in: path
      description: Entity Type
      required: true
      schema:
        type: string
    entityNameParam:
      name: entityName
      in: path
      description: Entity Name
      required: true
      schema:
        type: string
    submissionIdParam:
      name: submissionId
      in: path
      description: Submission ID
      required: true
      schema:
        type: string
    workflowIdParam:
      name: workflowId
      in: path
      description: Workflow ID
      required: true
      schema:
        type: string
    jobIdParam:
      name: jobId
      in: path
      description: Operations job ID from Google Genomics API
      required: true
      schema:
        type: string
  requestBodies:
    configACLPayload:
      description: the ACLs to upsert
      content:
        'application/json':
          schema:
            $ref: '#/components/schemas/MethodConfigACL'
      required: true
    preferencesParam:
      description: The preferences to set as a Map[String, String]
      content:
        'application/json':
          schema:
            type: object
            additionalProperties:
              type: string
      required: true
  responses:
    RawlsInternalError:
      description: Rawls Internal Error
      content:
        'application/json':
          schema:
            $ref: '#/components/schemas/ErrorReport'
  securitySchemes:
    oidc:
      type: oauth2
      x-tokenName: id_token
      flows:
        authorizationCode:
          authorizationUrl: https://terraprodb2c.b2clogin.com/terraprodb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1a_signup_signin_prod
          scopes: {}
          tokenUrl: https://terraprodb2c.b2clogin.com/terraprodb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1a_signup_signin_prod
    oidc_google_billing_scope:
      type: oauth2
      x-tokenName: id_token
      flows:
        authorizationCode:
          authorizationUrl: https://terraprodb2c.b2clogin.com/terraprodb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1a_signup_signin_billing_prod
          scopes: {}
          tokenUrl: https://terraprodb2c.b2clogin.com/terraprodb2c.onmicrosoft.com/oauth2/v2.0/token?p=b2c_1a_signup_signin_billing_prod
