openapi: 3.0.1
info:
  title: Cirro Data
  description: Cirro Data Platform service API
  contact:
    name: Cirro
    url: https://cirro.bio
    email: support@cirro.bio
  version: latest
  x-logo:
    url: https://static.cirro.bio/Cirro_Logo_Horizontal_Navy.png
servers:
- url: /api
tags:
- name: processes
  description: Dataset Types & Pipelines
- name: dashboards
  description: Used in dashboard feature in the web portal
- name: sharing
  description: Manage dataset sharing
- name: audit
  description: Access to audit events
paths:
  /agents:
    get:
      tags:
      - compute-environment
      summary: Get agents
      description: Get a list of agents
      operationId: getAgents
      responses:
        "200":
          description: getAgents 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/AgentDetail"
      security:
      - accessToken: []
    post:
      tags:
      - compute-environment
      summary: Create agent
      description: Create a new agent
      operationId: createAgent
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AgentInput"
        required: true
      responses:
        "201":
          description: createAgent 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /agents/{agentId}:
    put:
      tags:
      - compute-environment
      summary: Update agent
      description: Update an agent
      operationId: updateAgent
      parameters:
      - name: agentId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AgentInput"
        required: true
      responses:
        "200":
          description: updateAgent 200 response
      security:
      - accessToken: []
    delete:
      tags:
      - compute-environment
      summary: Delete agent
      description: Delete an agent
      operationId: deleteAgent
      parameters:
      - name: agentId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteAgent 200 response
      security:
      - accessToken: []
  /audit-events:
    get:
      tags:
      - audit
      summary: List audit events
      description: Gets a list of audit events
      operationId: listEvents
      parameters:
      - name: username
        in: query
        description: Username of the user who performed the action
        required: false
        schema:
          type: string
      - name: entityType
        in: query
        description: Type of the entity
        required: false
        schema:
          type: string
          enum:
          - Project
          - Sample
          - Dataset
          - User
          - BillingAccount
          - Process
          - NotebookInstance
          - UserProjectAssignment
      - name: entityId
        in: query
        description: ID of the entity
        required: false
        schema:
          type: string
      responses:
        "200":
          description: listEvents 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/AuditEvent"
  /audit-events/{auditEventId}:
    get:
      tags:
      - audit
      summary: Get audit event
      description: Get audit event detailed information
      operationId: getEvent
      parameters:
      - name: auditEventId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getEvent 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuditEvent"
  /billing:
    get:
      tags:
      - billing
      summary: List billing accounts
      description: Gets a list of billing accounts the current user has access to
      operationId: getBillingAccounts
      parameters:
      - name: includeArchived
        in: query
        description: Include billing accounts that are no longer in use
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: getBillingAccounts 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/BillingAccount"
      security:
      - accessToken: []
    post:
      tags:
      - billing
      summary: Create billing account
      description: Creates a billing account
      operationId: createBillingAccount
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BillingAccountRequest"
        required: true
      responses:
        "201":
          description: createBillingAccount 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /billing/{billingAccountId}:
    put:
      tags:
      - billing
      summary: Update billing account
      description: Updates a billing account
      operationId: updateBillingAccount
      parameters:
      - name: billingAccountId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BillingAccountRequest"
        required: true
      responses:
        "200":
          description: updateBillingAccount 200 response
      security:
      - accessToken: []
    delete:
      tags:
      - billing
      summary: Delete billing account
      description: Deletes a billing account
      operationId: deleteBillingAccount
      parameters:
      - name: billingAccountId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteBillingAccount 200 response
      security:
      - accessToken: []
  /governance/classifications:
    get:
      tags:
      - governance
      summary: Get classifications
      description: Retrieve a list of data classifications
      operationId: getClassifications
      responses:
        "200":
          description: getClassifications 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/GovernanceClassification"
      security:
      - accessToken: []
    post:
      tags:
      - governance
      summary: Create classification
      description: Creates a classification
      operationId: createClassification
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ClassificationInput"
        required: true
      responses:
        "201":
          description: createClassification 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceClassification"
      security:
      - accessToken: []
  /governance/classifications/{classificationId}:
    get:
      tags:
      - governance
      summary: Get a classification
      description: Retrieve a data classification
      operationId: getClassification
      parameters:
      - name: classificationId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getClassification 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceClassification"
      security:
      - accessToken: []
    put:
      tags:
      - governance
      summary: Update classification
      description: Updates a classification
      operationId: updateClassification
      parameters:
      - name: classificationId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ClassificationInput"
        required: true
      responses:
        "200":
          description: updateClassification 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceClassification"
      security:
      - accessToken: []
    delete:
      tags:
      - governance
      summary: Delete a classification
      description: "Deletes the classification, and removes it from all projects."
      operationId: deleteClassification
      parameters:
      - name: classificationId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteClassification 200 response
      security:
      - accessToken: []
  /governance/contacts:
    get:
      tags:
      - governance
      summary: Get contacts
      description: Retrieve a list of governance contacts
      operationId: getContacts
      responses:
        "200":
          description: getContacts 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/GovernanceContact"
      security:
      - accessToken: []
    post:
      tags:
      - governance
      summary: Create contact
      description: Creates a contact
      operationId: createContact
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ContactInput"
        required: true
      responses:
        "201":
          description: createContact 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceContact"
      security:
      - accessToken: []
  /governance/contacts/{contactId}:
    get:
      tags:
      - governance
      summary: Get a contact
      description: Retrieve a governance contact
      operationId: getContact
      parameters:
      - name: contactId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getContact 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceContact"
      security:
      - accessToken: []
    put:
      tags:
      - governance
      summary: Update contact
      description: Updates a contact
      operationId: updateContact
      parameters:
      - name: contactId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ContactInput"
        required: true
      responses:
        "200":
          description: updateContact 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceContact"
      security:
      - accessToken: []
    delete:
      tags:
      - governance
      summary: Delete a contact
      description: "Deletes the contact, and removes it from all governance requirements."
      operationId: deleteContact
      parameters:
      - name: contactId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteContact 200 response
      security:
      - accessToken: []
  /governance/projects/{projectId}/requirements:
    get:
      tags:
      - governance
      summary: Get project requirements
      description: Retrieve governance requirements for a project with fulfillment
        information for the current user
      operationId: getRequirementsByProject
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getRequirementsByProject 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ProjectRequirement"
      security:
      - accessToken: []
  /governance/projects/{projectId}/requirements/{requirementId}:fulfill:
    post:
      tags:
      - governance
      summary: Fulfill a project's requirement
      description: Saves a record of the fulfillment of a governance requirement
      operationId: fulfillRequirement
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: requirementId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RequirementFulfillmentInput"
        required: true
      responses:
        "200":
          description: fulfillRequirement 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FulfillmentResponse"
      security:
      - accessToken: []
  /governance/requirements:
    get:
      tags:
      - governance
      summary: Get requirements
      description: Retrieve a list of governance requirements
      operationId: getRequirements
      parameters:
      - name: projectId
        in: query
        description: Return requirements for project only
        required: false
        schema:
          type: string
      responses:
        "200":
          description: getRequirements 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/GovernanceRequirement"
      security:
      - accessToken: []
    post:
      tags:
      - governance
      summary: Create requirement
      description: Creates a requirement
      operationId: createRequirement
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RequirementInput"
        required: true
      responses:
        "201":
          description: createRequirement 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceRequirement"
      security:
      - accessToken: []
  /governance/requirements/{requirementId}:
    get:
      tags:
      - governance
      summary: Get a requirement
      description: Retrieve a governance requirement
      operationId: getRequirement
      parameters:
      - name: requirementId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getRequirement 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceRequirement"
      security:
      - accessToken: []
    put:
      tags:
      - governance
      summary: Update requirement
      description: Updates a requirement
      operationId: updateRequirement
      parameters:
      - name: requirementId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RequirementInput"
        required: true
      responses:
        "200":
          description: updateRequirement 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GovernanceRequirement"
      security:
      - accessToken: []
    delete:
      tags:
      - governance
      summary: Delete a requirement
      description: "Deletes the requirement, and removes it from all governance fulfillments\
        \ and classifications."
      operationId: deleteRequirement
      parameters:
      - name: requirementId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteRequirement 200 response
      security:
      - accessToken: []
  /governance/requirements/{requirementId}/s3-token:
    post:
      tags:
      - file
      summary: Create governance file access token
      description: Generates credentials used for connecting via S3
      operationId: generateGovernanceFileAccessToken
      parameters:
      - name: requirementId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GovernanceFileAccessRequest"
        required: true
      responses:
        "200":
          description: generateGovernanceFileAccessToken 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AWSCredentials"
      security:
      - accessToken: []
  /info:
    get:
      tags:
      - system
      summary: Get system info
      operationId: info
      responses:
        "200":
          description: info 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SystemInfoResponse"
      security:
      - accessToken: []
  /metrics:
    get:
      tags:
      - metrics
      summary: Get all project metrics
      description: Retrieves metrics for all projects.
      operationId: getAllMetrics
      responses:
        "200":
          description: getAllMetrics 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ProjectMetrics"
      security:
      - accessToken: []
  /processes:
    get:
      tags:
      - processes
      summary: List processes
      description: Retrieves a list of available processes
      operationId: getProcesses
      parameters:
      - name: includeArchived
        in: query
        description: Include processes that are no longer in use
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: The list is successfully retrieved
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Process"
      security:
      - accessToken: []
    post:
      tags:
      - processes
      summary: Create custom process
      description: Creates a custom data type or pipeline which you can use in the
        listed projects.
      operationId: createCustomProcess
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomProcessInput"
        required: true
      responses:
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PortalErrorResponse"
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorMessage"
        "201":
          description: createCustomProcess 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /processes/{processId}:
    get:
      tags:
      - processes
      summary: Get process
      description: Retrieves detailed information on a process
      operationId: getProcess
      parameters:
      - name: processId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getProcess 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProcessDetail"
      security:
      - accessToken: []
    put:
      tags:
      - processes
      summary: Update custom process
      description: Updates the custom process
      operationId: updateCustomProcess
      parameters:
      - name: processId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomProcessInput"
        required: true
      responses:
        "200":
          description: updateCustomProcess 200 response
      security:
      - accessToken: []
    delete:
      tags:
      - processes
      summary: Archive custom process
      description: Removes the process from the list of available options
      operationId: archiveCustomProcess
      parameters:
      - name: processId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: archiveCustomProcess 200 response
      security:
      - accessToken: []
  /processes/{processId}/cost:
    post:
      tags:
      - processes
      summary: Calculate pipeline cost
      description: Retrieves the cost of running the pipeline
      operationId: calculatePipelineCost
      parameters:
      - name: processId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CalculatePipelineCostRequest"
        required: true
      responses:
        "200":
          description: calculatePipelineCost 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PipelineCost"
      security:
      - accessToken: []
  /processes/{processId}/parameters:
    get:
      tags:
      - processes
      summary: Get process parameters
      description: Retrieves the input parameters for a process
      operationId: getProcessParameters
      parameters:
      - name: processId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getProcessParameters 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FormSchema"
      security:
      - accessToken: []
  /processes/{processId}/validate-files:
    post:
      tags:
      - processes
      summary: Validate file requirements
      description: Checks the input file names with the expected files for a data
        type (ingest processes only)
      operationId: validateFileRequirements
      parameters:
      - name: processId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ValidateFileRequirementsRequest"
        required: true
      responses:
        "200":
          description: validateFileRequirements 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FileRequirements"
      security:
      - accessToken: []
  /processes/{processId}:sync:
    put:
      tags:
      - processes
      summary: Sync custom process
      description: Updates the process definition from the repository
      operationId: syncCustomProcess
      parameters:
      - name: processId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: syncCustomProcess 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CustomPipelineSettings"
      security:
      - accessToken: []
  /project-requests:
    post:
      tags:
      - project-requests
      summary: Create project request
      description: Request a new project to be created
      operationId: createProjectRequest
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProjectRequest"
        required: true
      responses:
        "201":
          description: createProjectRequest 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects:
    get:
      tags:
      - projects
      summary: Get projects
      description: Retrieve a list of projects
      operationId: getProjects
      responses:
        "200":
          description: getProjects 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Project"
      security:
      - accessToken: []
    post:
      tags:
      - projects
      summary: Create project
      description: Creates a project
      operationId: createProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProjectInput"
        required: true
      responses:
        "201":
          description: createProject 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/discover:
    get:
      tags:
      - projects
      summary: Get discoverable projects
      description: Retrieve a list of projects that a user can request access to
      operationId: getDiscoverableProjects
      responses:
        "200":
          description: getDiscoverableProjects 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Project"
      security:
      - accessToken: []
  /projects/options:
    get:
      tags:
      - projects
      summary: Get project create options
      description: Get allowed options for creating a project
      operationId: getProjectCreateOptions
      responses:
        "200":
          description: getProjectCreateOptions 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProjectCreateOptions"
      security:
      - accessToken: []
  /projects/{projectId}:
    get:
      tags:
      - projects
      summary: Get project
      description: Get detailed project information
      operationId: getProject
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getProject 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProjectDetail"
      security:
      - accessToken: []
    put:
      tags:
      - projects
      summary: Update project
      description: Updates a project
      operationId: updateProject
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProjectInput"
        required: true
      responses:
        "200":
          description: updateProject 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProjectDetail"
      security:
      - accessToken: []
  /projects/{projectId}/access-requests:
    get:
      tags:
      - projects
      summary: Get access requests
      description: Gets users who have requested access to the project
      operationId: getAccessRequests
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: includeClosed
        in: query
        description: Include requests that are closed
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: getAccessRequests 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ProjectAccessRequest"
      security:
      - accessToken: []
    post:
      tags:
      - projects
      summary: Create access request
      description: Creates an access request for the project
      operationId: createAccessRequest
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateProjectAccessRequest"
        required: true
      responses:
        "201":
          description: createAccessRequest 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/access-requests/{accessRequestId}:approve:
    put:
      tags:
      - projects
      summary: Approve access request
      description: Approves an access request for the project
      operationId: approveAccessRequest
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: accessRequestId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ApproveProjectAccessRequest"
        required: true
      responses:
        "200":
          description: approveAccessRequest 200 response
      security:
      - accessToken: []
  /projects/{projectId}/access-requests/{accessRequestId}:deny:
    put:
      tags:
      - projects
      summary: Deny access request
      description: Denies an access request for the project
      operationId: denyAccessRequest
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: accessRequestId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: denyAccessRequest 200 response
      security:
      - accessToken: []
  /projects/{projectId}/compute-environments:
    get:
      tags:
      - compute-environment
      summary: Get compute environments
      description: Get a list of compute environments for a project
      operationId: getComputeEnvironments
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getComputeEnvironments 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ComputeEnvironmentConfiguration"
      security:
      - accessToken: []
    post:
      tags:
      - compute-environment
      summary: Create compute environment
      description: Create a new compute environment for a project
      operationId: createComputeEnvironment
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ComputeEnvironmentConfigurationInput"
        required: true
      responses:
        "201":
          description: createComputeEnvironment 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/compute-environments/{computeEnvironmentId}:
    put:
      tags:
      - compute-environment
      summary: Update compute environment
      description: Update a compute environment for a project
      operationId: updateComputeEnvironment
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: computeEnvironmentId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ComputeEnvironmentConfigurationInput"
        required: true
      responses:
        "200":
          description: updateComputeEnvironment 200 response
      security:
      - accessToken: []
    delete:
      tags:
      - compute-environment
      summary: Delete compute environment
      description: Delete a compute environment for a project
      operationId: deleteComputeEnvironment
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: computeEnvironmentId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteComputeEnvironment 200 response
      security:
      - accessToken: []
  /projects/{projectId}/dashboards:
    get:
      tags:
      - dashboards
      summary: List dashboards
      description: Retrieves a list of dashboards for a given project
      operationId: getDashboards
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getDashboards 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Dashboard"
      security:
      - accessToken: []
    post:
      tags:
      - dashboards
      summary: Create dashboard
      description: Creates a dashboard
      operationId: createDashboard
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DashboardRequest"
        required: true
      responses:
        "201":
          description: createDashboard 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/dashboards/{dashboardId}:
    get:
      tags:
      - dashboards
      summary: Get dashboard
      description: Retrieves a dashboard
      operationId: getDashboard
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: dashboardId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getDashboard 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboard"
      security:
      - accessToken: []
    put:
      tags:
      - dashboards
      summary: Update dashboard
      description: Updates a dashboard
      operationId: updateDashboard
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: dashboardId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DashboardRequest"
        required: true
      responses:
        "200":
          description: updateDashboard 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboard"
      security:
      - accessToken: []
    delete:
      tags:
      - dashboards
      summary: Delete dashboard
      description: Deletes a dashboard
      operationId: deleteDashboard
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: dashboardId
        in: path
        required: true
        schema:
          type: string
      responses:
        "204":
          description: deleteDashboard 204 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Dashboard"
      security:
      - accessToken: []
  /projects/{projectId}/datasets:
    get:
      tags:
      - datasets
      summary: List datasets
      description: Retrieves a list of datasets for a given project
      operationId: getDatasets
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: limit
        in: query
        description: number of records to get
        required: false
        schema:
          type: integer
          format: int32
          default: 5000
      - name: nextToken
        in: query
        description: cursor to request the next page
        required: false
        schema:
          type: string
      responses:
        "200":
          description: getDatasets 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaginatedResponse_DatasetListDto_"
      security:
      - accessToken: []
  /projects/{projectId}/datasets/import:
    post:
      tags:
      - datasets
      summary: Import public dataset
      description: Download data from public repositories
      operationId: importPublicDataset
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ImportDataRequest"
        required: true
      responses:
        "201":
          description: importPublicDataset 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/datasets/upload:
    post:
      tags:
      - datasets
      summary: Upload private dataset
      description: Registers a dataset in the system that you upload files into
      operationId: uploadDataset
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UploadDatasetRequest"
        required: true
      responses:
        "201":
          description: uploadDataset 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UploadDatasetCreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/datasets/{datasetId}:
    get:
      tags:
      - datasets
      summary: Get dataset
      description: Gets detailed information about a dataset
      operationId: getDataset
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getDataset 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DatasetDetail"
      security:
      - accessToken: []
    put:
      tags:
      - datasets
      summary: Update dataset
      description: Update info on a dataset
      operationId: updateDataset
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateDatasetRequest"
        required: true
      responses:
        "200":
          description: updateDataset 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DatasetDetail"
      security:
      - accessToken: []
    delete:
      tags:
      - datasets
      summary: Delete a dataset
      description: "Deletes the dataset, files are saved according to the project's\
        \ retention time."
      operationId: deleteDataset
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: deleteDataset 202 response
      security:
      - accessToken: []
  /projects/{projectId}/datasets/{datasetId}/files:
    get:
      tags:
      - datasets
      summary: Get dataset manifest
      description: "Gets a listing of files, charts, and other assets available for\
        \ the dataset"
      operationId: getDatasetManifest
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: fileOffset
        in: query
        description: Offset to start file listing from
        required: false
        schema:
          type: integer
          format: int32
          default: 0
      - name: fileLimit
        in: query
        description: Limit of files to return
        required: false
        schema:
          type: integer
          format: int32
          default: 20000
      responses:
        "200":
          description: getDatasetManifest 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DatasetAssetsManifest"
      security:
      - accessToken: []
  /projects/{projectId}/datasets/{datasetId}/ingest-samples:
    put:
      tags:
      - datasets
      summary: Rerun sample ingest
      description: Rerun sample ingest.
      operationId: ingestSamples
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: ingestSamples 202 response
      security:
      - accessToken: []
  /projects/{projectId}/datasets/{datasetId}/regenerate-manifest:
    put:
      tags:
      - datasets
      summary: Regenerate dataset manifest
      description: Regenerate dataset file listing.
      operationId: regenerateManifest
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: regenerateManifest 202 response
      security:
      - accessToken: []
  /projects/{projectId}/datasets/{datasetId}/rerun-transform:
    put:
      tags:
      - datasets
      summary: Rerun data transforms
      description: Rerun data transforms and web optimization.
      operationId: rerunTransform
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: rerunTransform 202 response
      security:
      - accessToken: []
  /projects/{projectId}/datasets/{datasetId}/samples:
    get:
      tags:
      - metadata
      summary: Get dataset samples
      description: Retrieves a list of samples associated with a dataset along with
        their metadata
      operationId: getDatasetSamples
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getDatasetSamples 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Sample"
      security:
      - accessToken: []
  /projects/{projectId}/execution:
    get:
      tags:
      - execution
      summary: Get execution summary
      description: Gets an overview of the executions currently running in the project
      operationId: getProjectSummary
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: numberOfDays
        in: query
        description: Number of days of job history to pull
        required: false
        schema:
          type: integer
          format: int32
          default: 1
      responses:
        "200":
          description: "An object with keys as the job queue name, and a list of jobs\
            \ as the value"
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: array
                  items:
                    $ref: "#/components/schemas/Task"
      security:
      - accessToken: []
    post:
      tags:
      - execution
      summary: Run analysis
      description: Run analysis
      operationId: runAnalysis
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RunAnalysisRequest"
        required: true
      responses:
        "200":
          description: runAnalysis 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/execution/{datasetId}/logs:
    get:
      tags:
      - execution
      summary: Get execution logs
      description: Gets live logs from main execution task
      operationId: getExecutionLogs
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: forceLive
        in: query
        description: force retrieving this info from the executor
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: getExecutionLogs 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetExecutionLogsResponse"
      security:
      - accessToken: []
  /projects/{projectId}/execution/{datasetId}/stop:
    put:
      tags:
      - execution
      summary: Stop execution
      description: Terminates all analysis jobs related to this execution
      operationId: stopAnalysis
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: stopAnalysis 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StopExecutionResponse"
      security:
      - accessToken: []
  /projects/{projectId}/execution/{datasetId}/tasks:
    get:
      tags:
      - execution
      summary: Get execution tasks
      description: Gets the tasks submitted by the workflow execution
      operationId: getTasksForExecution
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: forceLive
        in: query
        description: force retrieving this info from the executor
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: getTasksForExecution 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Task"
      security:
      - accessToken: []
  /projects/{projectId}/execution/{datasetId}/tasks/{taskId}/logs:
    get:
      tags:
      - execution
      summary: Get task logs
      description: Gets the log output from an individual task
      operationId: getTaskLogs
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: taskId
        in: path
        required: true
        schema:
          type: string
      - name: forceLive
        in: query
        description: force retrieving this info from the executor
        required: false
        schema:
          type: boolean
          default: false
      responses:
        "200":
          description: getTaskLogs 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetExecutionLogsResponse"
      security:
      - accessToken: []
  /projects/{projectId}/metrics:
    get:
      tags:
      - metrics
      summary: Get project metrics
      description: Retrieves metrics about a project.
      operationId: getProjectMetrics
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getProjectMetrics 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProjectMetrics"
      security:
      - accessToken: []
  /projects/{projectId}/notebook-instances:
    get:
      tags:
      - notebooks
      summary: Get notebook instances
      description: Retrieves a list of notebook instances that the user has access
        to
      operationId: getNotebookInstances
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getNotebookInstances 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/NotebookInstance"
      security:
      - accessToken: []
    post:
      tags:
      - notebooks
      summary: Create notebook instance
      description: Creates a notebook instance within the project
      operationId: createNotebookInstance
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateNotebookInstanceRequest"
        required: true
      responses:
        "201":
          description: createNotebookInstance 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/notebook-instances/{notebookInstanceId}:
    delete:
      tags:
      - notebooks
      summary: Delete notebook instance
      description: Triggers a deletion of the notebook instance
      operationId: deleteNotebookInstance
      parameters:
      - name: notebookInstanceId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: deleteNotebookInstance 202 response
      security:
      - accessToken: []
  /projects/{projectId}/notebook-instances/{notebookInstanceId}:generate-url:
    get:
      tags:
      - notebooks
      summary: Generate notebook instance URL
      description: Creates an authenticated URL to open up the notebook instance in
        your browser
      operationId: generateNotebookInstanceUrl
      parameters:
      - name: notebookInstanceId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: generateNotebookInstanceUrl 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OpenNotebookInstanceResponse"
      security:
      - accessToken: []
  /projects/{projectId}/notebook-instances/{notebookInstanceId}:status:
    get:
      tags:
      - notebooks
      summary: Get notebook instance status
      description: Retrieves the status of the instance
      operationId: getNotebookInstanceStatus
      parameters:
      - name: notebookInstanceId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getNotebookInstanceStatus 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotebookInstanceStatusResponse"
      security:
      - accessToken: []
  /projects/{projectId}/notebook-instances/{notebookInstanceId}:stop:
    post:
      tags:
      - notebooks
      summary: Stop notebook instance
      description: Shuts down a running notebook instance
      operationId: stopNotebookInstance
      parameters:
      - name: notebookInstanceId
        in: path
        required: true
        schema:
          type: string
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: stopNotebookInstance 202 response
      security:
      - accessToken: []
  /projects/{projectId}/permissions:
    get:
      tags:
      - projects
      summary: Get project permissions
      description: Gets users who have access to the project
      operationId: getProjectUsers
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getProjectUsers 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ProjectUser"
      security:
      - accessToken: []
    put:
      tags:
      - projects
      summary: Set role
      description: Sets a user's role within a project
      operationId: setUserProjectRole
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SetUserProjectRoleRequest"
        required: true
      responses:
        "200":
          description: setUserProjectRole 200 response
      security:
      - accessToken: []
  /projects/{projectId}/references:
    get:
      tags:
      - references
      summary: Get project references
      description: List available references for a given project
      operationId: getReferencesForProject
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getReferencesForProject 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Reference"
      security:
      - accessToken: []
    put:
      tags:
      - references
      summary: Refresh project references
      description: Refresh project references (internal)
      operationId: refreshProjectReferences
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: refreshProjectReferences 200 response
      deprecated: true
      security:
      - accessToken: []
      x-deprecated-message: remove once references are stored in database
    post:
      tags:
      - references
      summary: Create project reference
      description: Creates a reference
      operationId: createProjectReference
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateReferenceRequest"
        required: true
      responses:
        "200":
          description: createProjectReference 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Reference"
      security:
      - accessToken: []
    delete:
      tags:
      - references
      summary: Delete project reference
      description: Deletes a reference
      operationId: deleteProjectReference
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteProjectReference 200 response
      security:
      - accessToken: []
  /projects/{projectId}/s3-token:
    post:
      tags:
      - file
      summary: Create project file access token
      description: Generates credentials used for connecting via S3
      operationId: generateProjectFileAccessToken
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProjectFileAccessRequest"
        required: true
      responses:
        "200":
          description: generateProjectFileAccessToken 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AWSCredentials"
      security:
      - accessToken: []
  /projects/{projectId}/samples:
    get:
      tags:
      - metadata
      summary: Get project samples
      description: Retrieves a list of samples associated with a project along with
        their metadata
      operationId: getProjectSamples
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: limit
        in: query
        description: number of records to get
        required: false
        schema:
          type: integer
          format: int32
          default: 5000
      - name: nextToken
        in: query
        description: cursor to request the next page
        required: false
        schema:
          type: string
      responses:
        "200":
          description: getProjectSamples 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaginatedResponse_SampleDto_"
      security:
      - accessToken: []
  /projects/{projectId}/samples/{sampleId}:
    put:
      tags:
      - metadata
      summary: Update sample
      description: Updates metadata on a sample
      operationId: updateSample
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: sampleId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SampleRequest"
        required: true
      responses:
        "200":
          description: updateSample 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Sample"
      security:
      - accessToken: []
  /projects/{projectId}/schema:
    get:
      tags:
      - metadata
      summary: Get project metadata schema
      operationId: getProjectSchema
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getProjectSchema 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FormSchema"
      security:
      - accessToken: []
    put:
      tags:
      - metadata
      summary: Update project metadata schema
      operationId: updateProjectSchema
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/FormSchema"
        required: true
      responses:
        "200":
          description: updateProjectSchema 200 response
      security:
      - accessToken: []
  /projects/{projectId}/sftp-token:
    post:
      tags:
      - file
      summary: Create project SFTP Token
      description: Generates credentials used for connecting via SFTP
      operationId: generateProjectSftpToken
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenerateSftpCredentialsRequest"
        required: true
      responses:
        "200":
          description: generateProjectSftpToken 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SftpCredentials"
      security:
      - accessToken: []
  /projects/{projectId}/shares:
    get:
      tags:
      - sharing
      summary: Get shares
      description: Get shares for a project (both published and shared with the project)
      operationId: getShares
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getShares 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Share"
      security:
      - accessToken: []
    post:
      tags:
      - sharing
      summary: Create share
      description: Create a new share to publish to other projects
      operationId: createShare
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ShareInput"
        required: true
      responses:
        "201":
          description: createShare 201 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateResponse"
      security:
      - accessToken: []
  /projects/{projectId}/shares/discover:
    get:
      tags:
      - sharing
      summary: Get discoverable shares
      description: Get shares that the project can request access to
      operationId: getDiscoverableShares
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getDiscoverableShares 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Share"
      security:
      - accessToken: []
  /projects/{projectId}/shares/{shareId}:
    get:
      tags:
      - sharing
      summary: Get share
      description: Get details on a share that you've published or subscribed to
      operationId: getShare
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: shareId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getShare 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ShareDetail"
      security:
      - accessToken: []
    put:
      tags:
      - sharing
      summary: Update share
      description: Update a share that you've published
      operationId: updateShare
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: shareId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ShareInput"
        required: true
      responses:
        "200":
          description: updateShare 200 response
      security:
      - accessToken: []
    delete:
      tags:
      - sharing
      summary: Delete share
      description: Delete a share that you've published
      operationId: deleteShare
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: shareId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: deleteShare 200 response
      security:
      - accessToken: []
  /projects/{projectId}/shares/{shareId}/datasets:
    get:
      tags:
      - sharing
      summary: Get share datasets
      description: Get dataset listing for a share
      operationId: getSharedDatasets
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: shareId
        in: path
        required: true
        schema:
          type: string
      - name: limit
        in: query
        description: number of records to get
        required: false
        schema:
          type: integer
          format: int32
          default: 5000
      - name: nextToken
        in: query
        description: cursor to request the next page
        required: false
        schema:
          type: string
      responses:
        "200":
          description: getSharedDatasets 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaginatedResponse_DatasetListDto_"
      security:
      - accessToken: []
  /projects/{projectId}/shares/{shareId}:subscribe:
    put:
      tags:
      - sharing
      summary: Subscribe to share
      description: Subscribe to a share that has been shared with your project
      operationId: subscribeShare
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: shareId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: subscribeShare 200 response
      security:
      - accessToken: []
  /projects/{projectId}/shares/{shareId}:unsubscribe:
    put:
      tags:
      - sharing
      summary: Unsubscribe from share
      description: Unsubscribe from a share that has been shared with your project
      operationId: unsubscribeShare
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: shareId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: unsubscribeShare 200 response
      security:
      - accessToken: []
  /projects/{projectId}:archive:
    put:
      tags:
      - projects
      summary: Archive project
      description: Sets the project status to archived
      operationId: archiveProject
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: archiveProject 200 response
      security:
      - accessToken: []
  /projects/{projectId}:re-deploy:
    put:
      tags:
      - projects
      summary: Redeploy project
      description: Redeploys cloud resources for a project
      operationId: redeployProject
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: redeployProject 202 response
      security:
      - accessToken: []
  /projects/{projectId}:tags:
    put:
      tags:
      - projects
      summary: Set project tags
      description: Sets tags on a project
      operationId: updateProjectTags
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: "#/components/schemas/Tag"
        required: true
      responses:
        "200":
          description: updateProjectTags 200 response
      security:
      - accessToken: []
  /projects/{projectId}:unarchive:
    put:
      tags:
      - projects
      summary: Unarchive project
      description: Sets the project status to active
      operationId: unarchiveProject
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: unarchiveProject 200 response
      security:
      - accessToken: []
  /reference-types:
    get:
      tags:
      - references
      summary: Get reference types
      description: List available reference types
      operationId: getReferenceTypes
      responses:
        "200":
          description: getReferenceTypes 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ReferenceType"
      security:
      - accessToken: []
  /references:
    get:
      tags:
      - references
      summary: Get global references
      description: List available references (available to everyone)
      operationId: getReferences
      responses:
        "200":
          description: getReferences 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Reference"
      security:
      - accessToken: []
  /service-connections:
    get:
      tags:
      - system
      summary: Get service connections
      description: List available service connections
      operationId: getServiceConnections
      responses:
        "200":
          description: getServiceConnections 200 response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/ServiceConnection"
      security:
      - accessToken: []
  /tools/move-dataset:
    put:
      tags:
      - tools
      summary: Move a dataset to a different project
      description: Moves a dataset to a different project. The underlying S3 data
        is not transferred and will need to be done manually. It is expected the user
        will also transfer all datasets in the lineage.
      operationId: moveDataset
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/MoveDatasetInput"
        required: true
      responses:
        "200":
          description: moveDataset 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MoveDatasetResponse"
      security:
      - accessToken: []
  /users:
    get:
      tags:
      - users
      summary: List users
      description: "Gets a list of users, matching an optional username pattern"
      operationId: listUsers
      parameters:
      - name: username
        in: query
        description: The username to filter on
        schema:
          type: string
          nullable: true
      - name: limit
        in: query
        description: number of records to get
        required: false
        schema:
          type: integer
          format: int32
          default: 5000
      - name: nextToken
        in: query
        description: cursor to request the next page
        required: false
        schema:
          type: string
      responses:
        "200":
          description: listUsers 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaginatedResponse_UserDto_"
      security:
      - accessToken: []
    post:
      tags:
      - users
      summary: Invite user
      description: Invites a user to the system
      operationId: inviteUser
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InviteUserRequest"
        required: true
      responses:
        "200":
          description: inviteUser 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InviteUserResponse"
      security:
      - accessToken: []
  /users/{username}:
    get:
      tags:
      - users
      summary: Get user
      description: Get user information
      operationId: getUser
      parameters:
      - name: username
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: getUser 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserDetail"
      security:
      - accessToken: []
    put:
      tags:
      - users
      summary: Update user
      description: Update user information
      operationId: updateUser
      parameters:
      - name: username
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateUserRequest"
        required: true
      responses:
        "200":
          description: updateUser 200 response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
      security:
      - accessToken: []
  /users/{username}:signOut:
    put:
      tags:
      - users
      summary: Sign out user
      description: Signs user out from all sessions
      operationId: signOutUser
      parameters:
      - name: username
        in: path
        required: true
        schema:
          type: string
      responses:
        "202":
          description: signOutUser 202 response
      security:
      - accessToken: []
components:
  schemas:
    AWSCredentials:
      required:
      - accessKeyId
      - expiration
      - secretAccessKey
      - sessionToken
      type: object
      properties:
        accessKeyId:
          type: string
        secretAccessKey:
          type: string
        sessionToken:
          type: string
        expiration:
          type: string
          format: date-time
        region:
          type: string
          description: "Region of requested resource (i.e., S3 Bucket)"
    Agent:
      required:
      - status
      type: object
      properties:
        id:
          type: string
          description: The unique ID of the agent
        name:
          type: string
          description: The display name of the agent
        tags:
          type: object
          additionalProperties:
            type: string
          description: Tags associated with the agent
        status:
          $ref: "#/components/schemas/AgentStatus"
      description: Details of the agent
    AgentDetail:
      required:
      - agentRoleArn
      - createdAt
      - createdBy
      - id
      - name
      - status
      - updatedAt
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        agentRoleArn:
          type: string
        status:
          $ref: "#/components/schemas/AgentStatus"
        registration:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/AgentRegistration"
        tags:
          type: object
          additionalProperties:
            type: string
          nullable: true
        environmentConfiguration:
          type: object
          additionalProperties:
            type: string
          nullable: true
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    AgentInput:
      required:
      - agentRoleArn
      - name
      type: object
      properties:
        id:
          type: string
          description: The unique ID of the agent (required on create)
          nullable: true
        name:
          minLength: 1
          type: string
          description: The display name of the agent
        agentRoleArn:
          minLength: 1
          pattern: "arn:aws:iam::\\d{12}:role/.*|arn:aws:iam::\\d{12}:user/.*|arn:aws:sts::\\\
            d{12}:assumed-role/.*"
          type: string
          description: Arn of the AWS IAM role or user that the agent will use (JSONSchema
            format)
        configurationOptionsSchema:
          type: object
          additionalProperties: true
          description: 'The configuration options available for the agent '
          nullable: true
        environmentConfiguration:
          type: object
          additionalProperties:
            type: string
          description: The environment configuration for the agent
          nullable: true
          example:
            PARTITION: restart
        tags:
          type: object
          additionalProperties:
            type: string
          description: The tags associated with the agent displayed to the user
          nullable: true
          example:
            Support Email: it@company.com
    AgentRegistration:
      required:
      - agentVersion
      - hostname
      - localIp
      - os
      - remoteIp
      type: object
      properties:
        localIp:
          type: string
        remoteIp:
          type: string
        agentVersion:
          type: string
        hostname:
          type: string
        os:
          type: string
    AgentStatus:
      type: string
      description: The status of the agent
      enum:
      - ONLINE
      - OFFLINE
    AllowedDataType:
      required:
      - allowedPatterns
      - description
      - errorMsg
      type: object
      properties:
        description:
          type: string
        errorMsg:
          type: string
        allowedPatterns:
          type: array
          items:
            $ref: "#/components/schemas/FileNamePattern"
    ApproveProjectAccessRequest:
      required:
      - role
      type: object
      properties:
        role:
          $ref: "#/components/schemas/ProjectRole"
    Artifact:
      required:
      - path
      - type
      type: object
      properties:
        type:
          $ref: "#/components/schemas/ArtifactType"
        path:
          type: string
      description: A secondary file or resource associated with a dataset
    ArtifactType:
      type: string
      enum:
      - METADATA
      - INGEST_MANIFEST
      - WORKFLOW_REPORT
      - WORKFLOW_LOGS
      - WORKFLOW_DEBUG_LOGS
      - WORKFLOW_DAG
      - WORKFLOW_TIMELINE
      - WORKFLOW_TRACE
      - WORKFLOW_PARAMETERS
      - WORKFLOW_COMPUTE_CONFIG
      - WORKFLOW_OPTIONS
      - SAMPLE_SHEET
      - FILES
      x-enum-descriptions:
      - Snapshot of metadata at the time of execution
      - Files expected to upload
      - Execution report from workflow engine
      - Logs from workflow engine
      - Debug logs from workflow engine
      - Direct acyclic graph of workflow execution
      - Timeline of workflow execution
      - Trace of workflow execution
      - Parameters used in the workflow
      - Compute overrides used in the workflow
      - Options used in the workflow
      - Samples used in the workflow
      - Files used in the workflow
    AuditEvent:
      type: object
      properties:
        id:
          type: string
          description: The unique identifier for the audit event
        eventType:
          type: string
          description: The type of event
          example: CREATE
        projectId:
          type: string
          description: The project ID associated with the event (if applicable)
        entityId:
          type: string
          description: The entity ID associated with the event
        entityType:
          type: string
          description: The entity type associated with the event
          example: Project
        eventDetail:
          type: object
          additionalProperties: true
          description: "The details of the event, such as the request details sent\
            \ from the client"
          nullable: true
        changes:
          type: object
          additionalProperties:
            type: string
          description: The changes made to the entity (if applicable)
          nullable: true
          example:
            ".settings.retentionPolicyDays": 1 -> 2
        username:
          type: string
          description: The username of the user who performed the action
          example: admin@cirro.bio
        ipAddress:
          type: string
          description: The IP address of the user who performed the action
          example: 0.0.0.0
        createdAt:
          type: string
          description: The date and time the event was created
          format: date-time
    AuthInfo:
      required:
      - driveAppId
      - endpoint
      - sdkAppId
      - uiAppId
      - userPoolId
      type: object
      properties:
        userPoolId:
          type: string
        sdkAppId:
          type: string
        uiAppId:
          type: string
        driveAppId:
          type: string
        endpoint:
          type: string
    BillingAccount:
      required:
      - billingMethod
      - contacts
      - customerType
      - id
      - isArchived
      - name
      - organization
      - owner
      - primaryBudgetNumber
      - sharedWith
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        organization:
          type: string
        contacts:
          type: array
          items:
            $ref: "#/components/schemas/Contact"
        customerType:
          $ref: "#/components/schemas/CustomerType"
        billingMethod:
          $ref: "#/components/schemas/BillingMethod"
        primaryBudgetNumber:
          type: string
        owner:
          type: string
        sharedWith:
          type: array
          items:
            type: string
        isArchived:
          type: boolean
    BillingAccountRequest:
      required:
      - billingMethod
      - contacts
      - customerType
      - name
      - owner
      - primaryBudgetNumber
      - sharedWith
      type: object
      properties:
        name:
          minLength: 1
          type: string
        contacts:
          minItems: 1
          type: array
          items:
            $ref: "#/components/schemas/Contact"
        customerType:
          $ref: "#/components/schemas/CustomerType"
        billingMethod:
          $ref: "#/components/schemas/BillingMethod"
        primaryBudgetNumber:
          type: string
        owner:
          type: string
        sharedWith:
          type: array
          items:
            type: string
    BillingMethod:
      type: string
      enum:
      - BUDGET_NUMBER
      - PURCHASE_ORDER
      - CREDIT
    BudgetPeriod:
      type: string
      description: Time period associated with the budget amount
      enum:
      - ANNUALLY
      - QUARTERLY
      - MONTHLY
    CalculatePipelineCostRequest:
      type: object
    ClassificationInput:
      required:
      - description
      - name
      - requirementIds
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
        description:
          type: string
        requirementIds:
          type: array
          items:
            type: string
    CloudAccount:
      required:
      - accountType
      type: object
      properties:
        accountId:
          pattern: "\\d{12}"
          type: string
          description: AWS Account ID
        accountName:
          type: string
          description: "Name used to describe the account, useful when the account\
            \ hosts multiple projects"
        regionName:
          pattern: "^[a-zA-Z0-9-]+$"
          type: string
          description: AWS Region Code (defaults to region of Cirro app)
          example: us-west-2
        accountType:
          $ref: "#/components/schemas/CloudAccountType"
    CloudAccountType:
      type: string
      description: "Type of cloud account (Hosted by Cirro, or Bring your own account)"
      enum:
      - HOSTED
      - BYOA
    ColumnDefinition:
      type: object
      properties:
        col:
          type: string
          description: Column name in asset file
        name:
          type: string
          description: User-friendly column name
        desc:
          type: string
          description: Description of the column
    ComputeEnvironmentConfiguration:
      required:
      - createdAt
      - environmentType
      - updatedAt
      type: object
      properties:
        id:
          type: string
          description: The unique ID of the environment
        name:
          type: string
          description: The display name of the environment
        properties:
          type: object
          additionalProperties:
            type: string
          description: Configuration properties passed to the environment
        environmentType:
          $ref: "#/components/schemas/EnvironmentType"
        agent:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/Agent"
        createdBy:
          type: string
          description: The user who created the environment
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ComputeEnvironmentConfigurationInput:
      required:
      - name
      type: object
      properties:
        name:
          minLength: 1
          type: string
        agentId:
          type: string
          nullable: true
        properties:
          type: object
          additionalProperties:
            type: string
          nullable: true
    Contact:
      required:
      - email
      - name
      - organization
      - phone
      type: object
      properties:
        name:
          minLength: 1
          type: string
        organization:
          type: string
        email:
          type: string
        phone:
          type: string
    ContactInput:
      required:
      - description
      - email
      - name
      - phone
      - title
      type: object
      properties:
        title:
          maxLength: 100
          minLength: 1
          type: string
        description:
          type: string
        name:
          type: string
        phone:
          type: string
        email:
          type: string
    CreateNotebookInstanceRequest:
      required:
      - acceleratorTypes
      - instanceType
      - name
      - volumeSizeGB
      type: object
      properties:
        name:
          minLength: 1
          type: string
        instanceType:
          minLength: 1
          pattern: "ml\\.\\w{2,4}\\.\\w*"
          type: string
          description: AWS EC2 Instance Type (see list of available options)
          example: ml.t3.medium
          externalDocs:
            url: https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-available-instance-types.html
          x-pattern-message: Must be a valid instance type
        acceleratorTypes:
          type: array
          items:
            type: string
        gitRepositories:
          maxItems: 3
          type: array
          description: List of public git repositories to clone into the notebook
            instance.
          nullable: true
          items:
            pattern: "https://[^ ]+"
            type: string
            x-pattern-message: Must start with https://
        volumeSizeGB:
          maximum: 10000
          minimum: 5
          type: integer
          format: int32
        isSharedWithProject:
          type: boolean
          description: Whether the notebook is shared with the project
          default: false
    CreateProjectAccessRequest:
      required:
      - message
      - role
      type: object
      properties:
        role:
          $ref: "#/components/schemas/ProjectRole"
        message:
          maxLength: 1000
          type: string
    CreateReferenceRequest:
      required:
      - description
      - expectedFiles
      - name
      - type
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        type:
          type: string
        expectedFiles:
          minItems: 1
          type: array
          items:
            type: string
            description: List of file names (with relative paths) that will be uploaded
            example: reference.fasta
    CreateResponse:
      required:
      - id
      - message
      type: object
      properties:
        id:
          type: string
        message:
          type: string
    CustomPipelineSettings:
      required:
      - repository
      type: object
      properties:
        repository:
          minLength: 1
          pattern: "^[\\w-]+/[\\w-]+$"
          type: string
          description: GitHub repository that contains the process definition
          example: CirroBio/my-pipeline
          x-pattern-message: Must be a valid repo <organization>/<repo>
        branch:
          type: string
          description: "Branch, tag, or commit hash of the repo that contains the\
            \ process definition"
          default: main
        folder:
          type: string
          description: Folder within the repo that contains the process definition
          default: .cirro
        repositoryType:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/RepositoryType"
        lastSync:
          type: string
          description: Time of last sync
          format: date-time
          nullable: true
        syncStatus:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/SyncStatus"
        commitHash:
          type: string
          description: Commit hash of the last successful sync
          nullable: true
        isAuthorized:
          type: boolean
          description: Whether we are authorized to access the repository
          default: false
      description: Used to describe the location of the process definition dependencies
    CustomProcessInput:
      required:
      - childProcessIds
      - description
      - executor
      - id
      - linkedProjectIds
      - name
      - parentProcessIds
      type: object
      properties:
        id:
          maxLength: 40
          minLength: 4
          pattern: "^[a-z0-9-_]+$"
          type: string
          description: Unique ID of the Process
          example: process-hutch-magic_flute-1_0
          x-pattern-message: "Process ID must only contain lowercase letters, numbers,\
            \ underscores, and dashes"
        name:
          maxLength: 50
          minLength: 4
          pattern: "^\\w[\\w ().'&@!#-/]*$"
          type: string
          description: Friendly name for the process
          example: MAGeCK Flute
          x-pattern-message: "Invalid name, must start with alphanumeric and include\
            \ only alphanumeric characters, spaces, and .&-@!#'()/"
        description:
          maxLength: 500
          minLength: 4
          type: string
          description: Description of the process
          example: MAGeCK Flute enables accurate identification of essential genes
            with their related biological functions
        dataType:
          maxLength: 50
          pattern: "^\\w[\\w ().'&@!#-/]*$"
          type: string
          description: "Name of the data type this pipeline produces (if it is not\
            \ defined, use the name)"
          nullable: true
          x-pattern-message: "Invalid name, must start with alphanumeric and include\
            \ only alphanumeric characters, spaces, and .&-@!#'()/"
        executor:
          $ref: "#/components/schemas/Executor"
        category:
          maxLength: 50
          pattern: "^\\w[\\w ().'&@!#-/]*$"
          type: string
          description: Category of the process
          example: Microbial Analysis
          x-pattern-message: "Invalid name, must start with alphanumeric and include\
            \ only alphanumeric characters, spaces, and .&-@!#'()/"
        childProcessIds:
          type: array
          description: IDs of pipelines that can be run downstream
          items:
            type: string
        parentProcessIds:
          type: array
          description: IDs of processes that can run this pipeline
          items:
            type: string
        documentationUrl:
          type: string
          description: Link to process documentation
          nullable: true
          example: https://docs.cirro.bio/pipelines/catalog_targeted_sequencing/#crispr-screen-analysis
        fileRequirementsMessage:
          type: string
          description: Description of the files to be uploaded (optional)
          nullable: true
        pipelineCode:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/PipelineCode"
        linkedProjectIds:
          type: array
          description: Projects that can run this process
          items:
            type: string
        isTenantWide:
          type: boolean
          description: Whether the process is shared with the tenant
        allowMultipleSources:
          type: boolean
          description: Whether the pipeline is allowed to have multiple dataset sources
        usesSampleSheet:
          type: boolean
          description: Whether the pipeline uses the Cirro-provided sample sheet
        customSettings:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/CustomPipelineSettings"
        fileMappingRules:
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/FileMappingRule"
    CustomerType:
      type: string
      enum:
      - INTERNAL
      - CONSORTIUM
      - EXTERNAL
    Dashboard:
      required:
      - createdAt
      - createdBy
      - dashboardData
      - description
      - id
      - info
      - name
      - processIds
      - updatedAt
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        processIds:
          type: array
          items:
            type: string
        dashboardData:
          type: object
          additionalProperties: true
        info:
          type: object
          additionalProperties: true
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    DashboardRequest:
      required:
      - dashboardData
      - description
      - info
      - name
      - processIds
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
        description:
          type: string
        processIds:
          type: array
          items:
            type: string
        dashboardData:
          type: object
          additionalProperties: true
        info:
          type: object
          additionalProperties: true
    DataFile:
      required:
      - metadata
      - path
      type: object
      properties:
        path:
          type: string
        metadata:
          type: object
          additionalProperties: true
    Dataset:
      required:
      - createdAt
      - createdBy
      - description
      - id
      - name
      - processId
      - projectId
      - sourceDatasetIds
      - status
      - tags
      - updatedAt
      type: object
      properties:
        id:
          minLength: 1
          type: string
        name:
          type: string
        description:
          type: string
        projectId:
          type: string
        processId:
          type: string
        sourceDatasetIds:
          type: array
          items:
            type: string
        status:
          $ref: "#/components/schemas/Status"
        tags:
          type: array
          items:
            $ref: "#/components/schemas/Tag"
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    DatasetAssetsManifest:
      type: object
      properties:
        domain:
          type: string
          description: Base URL for files
          example: s3://project-1a1a/datasets/1a1a
        files:
          type: array
          description: "List of files in the dataset, including metadata"
          items:
            $ref: "#/components/schemas/FileEntry"
        totalFiles:
          type: integer
          description: "Total number of files in the dataset, used for pagination"
          format: int32
        viz:
          type: array
          description: List of viz to render for the dataset
          items:
            $ref: "#/components/schemas/DatasetViz"
        tables:
          type: array
          description: List of web optimized tables for the dataset
          items:
            $ref: "#/components/schemas/Table"
        artifacts:
          type: array
          description: Artifacts associated with the dataset
          items:
            $ref: "#/components/schemas/Artifact"
    DatasetCondition:
      required:
      - field
      - value
      type: object
      properties:
        field:
          $ref: "#/components/schemas/DatasetConditionField"
        value:
          type: string
    DatasetConditionField:
      type: string
      enum:
      - DATASET_ID
      - TAG
      - PROCESS_ID
      - CREATED_BY
    DatasetDetail:
      required:
      - createdAt
      - createdBy
      - description
      - id
      - info
      - isViewRestricted
      - name
      - params
      - processId
      - projectId
      - s3
      - sourceDatasetIds
      - sourceDatasets
      - sourceSampleIds
      - status
      - statusMessage
      - tags
      - updatedAt
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        s3:
          type: string
        processId:
          type: string
        projectId:
          type: string
        sourceDatasetIds:
          type: array
          items:
            type: string
        sourceDatasets:
          type: array
          items:
            $ref: "#/components/schemas/NamedItem"
        sourceSampleIds:
          type: array
          items:
            type: string
        status:
          $ref: "#/components/schemas/Status"
        statusMessage:
          type: string
        tags:
          type: array
          items:
            $ref: "#/components/schemas/Tag"
        params:
          type: object
          additionalProperties: true
        info:
          type: object
          additionalProperties: true
        share:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/NamedItem"
        isViewRestricted:
          type: boolean
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    DatasetViz:
      type: object
      properties:
        name:
          type: string
          description: Name of viz
        desc:
          type: string
          description: Description of viz
        type:
          type: string
          description: Type of viz
          example: vitescce
        config:
          description: Config or path to config used to render viz
    EnvironmentType:
      type: string
      description: The type of compute environment
      enum:
      - NONE
      - LOCAL_AGENT
      - AWS_BATCH
      - AWS_OMICS
    ErrorMessage:
      required:
      - message
      type: object
      properties:
        message:
          type: string
    Executor:
      type: string
      description: How the workflow is executed
      enum:
      - INGEST
      - NEXTFLOW
      - CROMWELL
      - OMICS_READY2RUN
    FeatureFlags:
      required:
      - governanceEnabled
      - projectRequestsEnabled
      - sftpEnabled
      type: object
      properties:
        sftpEnabled:
          type: boolean
        governanceEnabled:
          type: boolean
        projectRequestsEnabled:
          type: boolean
    FileEntry:
      type: object
      properties:
        path:
          type: string
          description: Relative path to file
          example: data/fastq/SRX12875516_SRR16674827_1.fastq.gz
        size:
          type: integer
          description: File size (in bytes)
          example: 1435658507
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Metadata associated with the file
          example:
            read: 1
    FileMappingRule:
      required:
      - description
      - fileNamePatterns
      type: object
      properties:
        description:
          maxLength: 500
          minLength: 1
          type: string
          description: Describes the group of possible files that meet a single file
            type criteria.
        min:
          minimum: 0
          type: integer
          description: Minimum number of files to expect for the file type group.
          format: int32
        max:
          maximum: 50000
          type: integer
          description: Maximum number of files to expect for the file type group.
          format: int32
        isSample:
          type: boolean
          description: Specifies if the file type will be associated with a sample.
        fileNamePatterns:
          type: array
          description: Describes the possible file patterns to expect for the file
            type group.
          items:
            $ref: "#/components/schemas/FileNamePattern"
    FileNamePattern:
      required:
      - description
      - exampleName
      - sampleMatchingPattern
      type: object
      properties:
        exampleName:
          maxLength: 255
          minLength: 1
          type: string
          description: User-readable name for the file type used for display.
        description:
          maxLength: 255
          minLength: 1
          type: string
          description: File description.
        sampleMatchingPattern:
          maxLength: 255
          minLength: 1
          type: string
          description: "File name pattern, formatted as a valid regex, to extract\
            \ sample name and other metadata."
    FileRequirements:
      required:
      - allowedDataTypes
      - errorMsg
      - files
      type: object
      properties:
        files:
          type: array
          items:
            type: string
        errorMsg:
          type: string
        allowedDataTypes:
          type: array
          items:
            $ref: "#/components/schemas/AllowedDataType"
    FormSchema:
      type: object
      properties:
        form:
          type: object
          additionalProperties: true
          description: JSONSchema representation of the parameters
          externalDocs:
            url: https://json-schema.org/draft-07/json-schema-release-notes.html
        ui:
          type: object
          additionalProperties: true
          description: "Describes how the form should be rendered, see rjsf"
          externalDocs:
            url: https://rjsf-team.github.io/react-jsonschema-form/docs/api-reference/uiSchema/
    FulfillmentResponse:
      required:
      - fulfillmentId
      - path
      type: object
      properties:
        fulfillmentId:
          type: string
        path:
          type: string
    GenerateSftpCredentialsRequest:
      type: object
      properties:
        lifetimeDays:
          maximum: 3
          type: integer
          description: Number of days the credentials are valid for
          format: int32
          default: 1
    GetExecutionLogsResponse:
      required:
      - events
      type: object
      properties:
        events:
          type: array
          items:
            $ref: "#/components/schemas/LogEntry"
    GovernanceAccessType:
      type: string
      enum:
      - GOVERNANCE_UPLOAD
      - GOVERNANCE_DOWNLOAD
      - FULFILLMENT_UPLOAD
      - FULFILLMENT_DOWNLOAD
    GovernanceClassification:
      required:
      - createdAt
      - createdBy
      - description
      - id
      - name
      - requirementIds
      - updatedAt
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        requirementIds:
          type: array
          items:
            type: string
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    GovernanceContact:
      required:
      - createdAt
      - createdBy
      - description
      - email
      - id
      - name
      - phone
      - title
      - updatedAt
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
        name:
          type: string
        phone:
          type: string
        email:
          type: string
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    GovernanceExpiry:
      type: object
      properties:
        type:
          description: The type of expiration date
          allOf:
          - $ref: "#/components/schemas/GovernanceExpiryType"
        days:
          minimum: 0
          exclusiveMinimum: true
          type: integer
          description: The number of days for a relative expiration
          format: int32
          nullable: true
        date:
          type: string
          description: The date for an absolute expiration
          format: date-time
          nullable: true
    GovernanceExpiryType:
      type: string
      description: The expiry conditions that can be applied to governance requirements.
      enum:
      - NONE
      - ABSOLUTE
      - RELATIVE_ENACTMENT
      - RELATIVE_COMPLETION
    GovernanceFile:
      type: object
      properties:
        name:
          type: string
          description: The title of the resource visible to users
        description:
          type: string
          description: A description of the resource visible to users
        src:
          type: string
          description: The file name without path or the full link path
        type:
          description: The type of resource
          allOf:
          - $ref: "#/components/schemas/GovernanceFileType"
    GovernanceFileAccessRequest:
      required:
      - accessType
      type: object
      properties:
        accessType:
          $ref: "#/components/schemas/GovernanceAccessType"
        fulfillmentId:
          type: string
          nullable: true
        projectId:
          type: string
          nullable: true
        tokenLifetimeHours:
          type: integer
          format: int32
          nullable: true
    GovernanceFileType:
      type: string
      description: The options for supplementals for governance requirements
      enum:
      - FILE
      - LINK
    GovernanceRequirement:
      required:
      - contactIds
      - createdAt
      - createdBy
      - description
      - expiration
      - id
      - name
      - path
      - scope
      - type
      - updatedAt
      type: object
      properties:
        id:
          minLength: 1
          type: string
          description: The unique identifier for the requirement
        name:
          type: string
          description: ' The name of the requirement'
        description:
          type: string
          description: A brief description of the requirement
        type:
          description: Specifies the type of governance requirement
          allOf:
          - $ref: "#/components/schemas/GovernanceType"
        path:
          type: string
          description: S3 prefix where files for the requirement are saved
        scope:
          description: Specifies the level at which it was created
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        projectId:
          type: string
          description: The project ID if the requirement is project scope
        acceptance:
          description: Specifies the level at which it is satisfied
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        contactIds:
          type: array
          description: The IDs of governance contacts assigned to the requirement.
          items:
            type: string
        expiration:
          $ref: "#/components/schemas/GovernanceExpiry"
        enactmentDate:
          type: string
          description: The date of enactment for a requirement
          format: date-time
          nullable: true
        supplementalDocs:
          type: array
          description: "Optional files with extra information, e.g. templates for\
            \ documents, links, etc"
          nullable: true
          items:
            $ref: "#/components/schemas/GovernanceFile"
        file:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceFile"
        authorship:
          description: Who needs to supply the agreement document
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        verificationMethod:
          description: The value indicating how the completion of the training is
            verified.
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceTrainingVerification"
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    GovernanceScope:
      type: string
      description: The levels at which governance requirements can be enforced
      enum:
      - TENANT
      - PROJECT
    GovernanceTrainingVerification:
      type: string
      description: The ways in which the completion of training can be verified.
      enum:
      - SELF
      - CERTIFICATE
    GovernanceType:
      type: string
      description: The types of governance requirements that can be enforced
      enum:
      - DOCUMENT
      - AGREEMENT
      - TRAINING
    ImportDataRequest:
      required:
      - name
      - publicIds
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
          description: Name of the dataset
        description:
          type: string
          description: Description of the dataset
        publicIds:
          maxItems: 512
          minItems: 1
          type: array
          items:
            type: string
            description: SRA/ENA/DDBJ/GEO/Synapse IDs
            example: SRR9984183
        tags:
          type: array
          description: List of tags to apply to the dataset
          nullable: true
          items:
            $ref: "#/components/schemas/Tag"
    InviteUserRequest:
      required:
      - email
      - name
      - organization
      type: object
      properties:
        name:
          maxLength: 70
          minLength: 3
          type: string
        organization:
          maxLength: 40
          minLength: 2
          type: string
        email:
          maxLength: 50
          minLength: 2
          type: string
          format: email
    InviteUserResponse:
      required:
      - message
      type: object
      properties:
        message:
          type: string
    LogEntry:
      required:
      - message
      type: object
      properties:
        timestamp:
          type: integer
          description: "UNIX timestamp in milliseconds, might be blank if we don't\
            \ have this info"
          format: int64
        message:
          type: string
    LoginProvider:
      required:
      - description
      - id
      - logoUrl
      - name
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        logoUrl:
          type: string
    MetricRecord:
      required:
      - unit
      type: object
      properties:
        date:
          type: string
          description: Date in ISO 8601 format
          format: date
        unit:
          type: string
        services:
          type: object
          additionalProperties:
            type: number
            format: double
          description: Map of service names to metric value
          example:
            Amazon Simple Storage Service: 24.91
    MoveDatasetInput:
      required:
      - datasetId
      - sourceProjectId
      - targetProjectId
      type: object
      properties:
        datasetId:
          type: string
        sourceProjectId:
          type: string
        targetProjectId:
          type: string
    MoveDatasetResponse:
      required:
      - s3CopyCommand
      - s3DeleteCommand
      - samplesNotMoved
      type: object
      properties:
        s3CopyCommand:
          type: string
        s3DeleteCommand:
          type: string
        samplesNotMoved:
          type: array
          items:
            type: string
    NamedItem:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: string
        name:
          type: string
    NotebookInstance:
      required:
      - acceleratorTypes
      - createdAt
      - createdBy
      - gitRepositories
      - id
      - instanceType
      - isSharedWithProject
      - name
      - status
      - statusMessage
      - updatedAt
      - volumeSizeGB
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        status:
          $ref: "#/components/schemas/Status"
        statusMessage:
          type: string
        instanceType:
          type: string
        acceleratorTypes:
          type: array
          items:
            type: string
        gitRepositories:
          type: array
          items:
            type: string
        volumeSizeGB:
          type: integer
          format: int32
        isSharedWithProject:
          type: boolean
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    NotebookInstanceStatusResponse:
      required:
      - status
      - statusMessage
      type: object
      properties:
        status:
          type: string
        statusMessage:
          type: string
    OpenNotebookInstanceResponse:
      required:
      - message
      - url
      type: object
      properties:
        url:
          type: string
        message:
          type: string
    PaginatedResponse_DatasetListDto_:
      required:
      - data
      - nextToken
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Dataset"
        nextToken:
          type: string
    PaginatedResponse_SampleDto_:
      required:
      - data
      - nextToken
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Sample"
        nextToken:
          type: string
    PaginatedResponse_UserDto_:
      required:
      - data
      - nextToken
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/User"
        nextToken:
          type: string
    PipelineCode:
      required:
      - entryPoint
      - repositoryPath
      - repositoryType
      - version
      type: object
      properties:
        repositoryPath:
          minLength: 1
          pattern: "^[\\w-]+/[\\w-]+$"
          type: string
          description: GitHub repository which contains the workflow code
          example: nf-core/rnaseq
          x-pattern-message: Must be a valid repo <organization>/<repo>
        version:
          minLength: 1
          type: string
          description: "Branch, tag, or commit hash of the pipeline code"
          example: main
        repositoryType:
          $ref: "#/components/schemas/RepositoryType"
        entryPoint:
          minLength: 1
          type: string
          description: Main script for running the pipeline
          example: main.nf
      description: "Used to describe the pipeline analysis code, not required for\
        \ ingest processes"
    PipelineCost:
      type: object
      properties:
        totalCost:
          type: number
          description: The total cost of running the pipeline
          nullable: true
        isEstimate:
          type: boolean
          description: Is this an estimate of the cost?
        description:
          type: string
          description: Description of the cost calculation
    PortalErrorResponse:
      required:
      - errorCode
      - errorDetail
      - errors
      - statusCode
      type: object
      properties:
        statusCode:
          type: integer
          format: int32
        errorCode:
          type: string
        errorDetail:
          type: string
        errors:
          type: array
          items:
            $ref: "#/components/schemas/ErrorMessage"
    Process:
      required:
      - allowMultipleSources
      - childProcessIds
      - dataType
      - description
      - executor
      - id
      - isArchived
      - isTenantWide
      - linkedProjectIds
      - name
      - parentProcessIds
      - usesSampleSheet
      type: object
      properties:
        id:
          minLength: 1
          type: string
          description: Unique ID of the Process
          example: process-hutch-magic_flute-1_0
        name:
          minLength: 1
          type: string
          description: Friendly name for the process
          example: MAGeCK Flute
        description:
          minLength: 1
          type: string
          description: Description of the process
          example: MAGeCK Flute enables accurate identification of essential genes
            with their related biological functions
        dataType:
          minLength: 1
          type: string
          description: "Name of the data type this pipeline produces (if it is not\
            \ defined, use the name)"
        executor:
          $ref: "#/components/schemas/Executor"
        category:
          type: string
          description: Category of the process
          example: Microbial Analysis
        pipelineType:
          type: string
          description: Type of pipeline
          example: nf-core
        documentationUrl:
          type: string
          description: Link to process documentation
          example: https://docs.cirro.bio/pipelines/catalog_targeted_sequencing/#crispr-screen-analysis
        fileRequirementsMessage:
          type: string
          description: Description of the files to be uploaded (optional)
        childProcessIds:
          type: array
          description: IDs of pipelines that can be run downstream
          items:
            type: string
        parentProcessIds:
          type: array
          description: IDs of processes that can run this pipeline
          items:
            type: string
        owner:
          type: string
          description: Username of the pipeline creator (blank if Cirro curated)
          nullable: true
        linkedProjectIds:
          type: array
          description: Projects that can run this process
          items:
            type: string
        isTenantWide:
          type: boolean
          description: Whether the process is shared with the tenant
        allowMultipleSources:
          type: boolean
          description: Whether the pipeline is allowed to have multiple dataset sources
        usesSampleSheet:
          type: boolean
          description: Whether the pipeline uses the Cirro-provided sample sheet
        isArchived:
          type: boolean
          description: Whether the process is marked as archived
        createdAt:
          type: string
          description: When the process was created (does not reflect the pipeline
            code)
          format: date-time
        updatedAt:
          type: string
          description: When the process was updated (does not reflect the pipeline
            code)
          format: date-time
      description: Identifies a data type or pipeline in Cirro
    ProcessDetail:
      required:
      - allowMultipleSources
      - childProcessIds
      - dataType
      - description
      - executor
      - id
      - isArchived
      - isTenantWide
      - linkedProjectIds
      - name
      - parentProcessIds
      - usesSampleSheet
      type: object
      properties:
        id:
          minLength: 1
          type: string
          description: Unique ID of the Process
          example: process-hutch-magic_flute-1_0
        name:
          minLength: 1
          type: string
          description: Friendly name for the process
          example: MAGeCK Flute
        description:
          minLength: 1
          type: string
          description: Description of the process
          example: MAGeCK Flute enables accurate identification of essential genes
            with their related biological functions
        dataType:
          minLength: 1
          type: string
          description: "Name of the data type this pipeline produces (if it is not\
            \ defined, use the name)"
        executor:
          $ref: "#/components/schemas/Executor"
        category:
          type: string
          description: Category of the process
          example: Microbial Analysis
        pipelineType:
          type: string
          description: Type of pipeline
          example: nf-core
        childProcessIds:
          type: array
          description: IDs of pipelines that can be run downstream
          items:
            type: string
        parentProcessIds:
          type: array
          description: IDs of processes that can run this pipeline
          items:
            type: string
        documentationUrl:
          type: string
          description: Link to process documentation
          example: https://docs.cirro.bio/pipelines/catalog_targeted_sequencing/#crispr-screen-analysis
        fileRequirementsMessage:
          type: string
          description: Description of the files to be uploaded (optional)
        pipelineCode:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/PipelineCode"
        owner:
          type: string
          description: Username of the pipeline creator (blank if Cirro curated)
          nullable: true
        linkedProjectIds:
          type: array
          description: Projects that can run this process
          items:
            type: string
        isTenantWide:
          type: boolean
          description: Whether the process is shared with the tenant
        allowMultipleSources:
          type: boolean
          description: Whether the pipeline is allowed to have multiple dataset sources
        usesSampleSheet:
          type: boolean
          description: Whether the pipeline uses the Cirro-provided sample sheet
        isArchived:
          type: boolean
          description: Whether the process is marked as archived
        customSettings:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/CustomPipelineSettings"
        fileMappingRules:
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/FileMappingRule"
        createdAt:
          type: string
          description: When the process was created (does not reflect the pipeline
            code)
          format: date-time
        updatedAt:
          type: string
          description: When the process was updated (does not reflect the pipeline
            code)
          format: date-time
      description: Identifies a data type or pipeline in Cirro
    Project:
      required:
      - billingAccountId
      - classificationIds
      - description
      - id
      - name
      - organization
      - status
      - tags
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        status:
          $ref: "#/components/schemas/Status"
        tags:
          type: array
          items:
            $ref: "#/components/schemas/Tag"
        organization:
          type: string
        classificationIds:
          type: array
          items:
            type: string
        billingAccountId:
          type: string
    ProjectAccessRequest:
      required:
      - createdAt
      - expiry
      - id
      - message
      - projectId
      - reviewerUsername
      - role
      - status
      - username
      type: object
      properties:
        id:
          type: string
        username:
          type: string
        projectId:
          type: string
        role:
          $ref: "#/components/schemas/ProjectRole"
        message:
          type: string
        status:
          $ref: "#/components/schemas/RequestStatus"
        reviewerUsername:
          type: string
        createdAt:
          type: string
          format: date-time
        expiry:
          type: string
          format: date-time
    ProjectAccessType:
      type: string
      enum:
      - DATASET_UPLOAD
      - SHARED_DATASET_DOWNLOAD
      - SAMPLESHEET_UPLOAD
      - REFERENCE_UPLOAD
      - PROJECT_DOWNLOAD
    ProjectCreateOptions:
      required:
      - enabledAccountTypes
      - portalAccountId
      - portalRegion
      - templateUrl
      - wizardUrl
      type: object
      properties:
        enabledAccountTypes:
          type: array
          items:
            $ref: "#/components/schemas/CloudAccountType"
        portalAccountId:
          type: string
        portalRegion:
          type: string
        templateUrl:
          type: string
        wizardUrl:
          type: string
    ProjectDetail:
      required:
      - billingAccountId
      - classificationIds
      - contacts
      - createdAt
      - createdBy
      - description
      - id
      - name
      - organization
      - settings
      - status
      - statusMessage
      - tags
      - updatedAt
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        billingAccountId:
          type: string
        contacts:
          type: array
          items:
            $ref: "#/components/schemas/Contact"
        organization:
          type: string
        status:
          $ref: "#/components/schemas/Status"
        settings:
          $ref: "#/components/schemas/ProjectSettings"
        account:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/CloudAccount"
        statusMessage:
          type: string
        tags:
          type: array
          items:
            $ref: "#/components/schemas/Tag"
        classificationIds:
          type: array
          items:
            type: string
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ProjectFileAccessRequest:
      required:
      - accessType
      type: object
      properties:
        accessType:
          $ref: "#/components/schemas/ProjectAccessType"
        datasetId:
          type: string
          nullable: true
        tokenLifetimeHours:
          type: integer
          format: int32
          nullable: true
    ProjectInput:
      required:
      - billingAccountId
      - contacts
      - description
      - name
      - settings
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 3
          pattern: "^\\w[\\w ().'&@!#-]*$"
          type: string
          x-pattern-message: "Invalid name, must start with alphanumeric and include\
            \ only alphanumeric characters, spaces, and .&-@!#'()"
        description:
          type: string
        billingAccountId:
          minLength: 1
          type: string
        settings:
          $ref: "#/components/schemas/ProjectSettings"
        contacts:
          maxItems: 10
          minItems: 1
          type: array
          items:
            $ref: "#/components/schemas/Contact"
        account:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/CloudAccount"
        classificationIds:
          type: array
          nullable: true
          items:
            type: string
        tags:
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/Tag"
    ProjectMetrics:
      required:
      - projectId
      type: object
      properties:
        projectId:
          type: string
        costs:
          type: array
          description: Costs by service by month
          example:
          - date: 2022-11-01
            unit: $
            service:
              Other: 26.47
              EC2 - Other: 3.66
              Amazon Elastic Compute Cloud - Compute: 140.59
              Amazon Simple Storage Service: 24.91
              AmazonCloudWatch: 2.09
          items:
            $ref: "#/components/schemas/MetricRecord"
        storageMetrics:
          type: array
          description: Storage usage by tier by day
          example:
          - date: 2023-12-12
            unit: GB
            service:
              IntelligentTieringAIAStorage: 4198.95
              IntelligentTieringFAStorage: 1516.48
              StandardStorage: 1.9
              IntelligentTieringIAStorage: 2154.6
          items:
            $ref: "#/components/schemas/MetricRecord"
    ProjectRequest:
      required:
      - adminUsername
      - billingInfo
      - classificationIds
      - description
      - message
      - name
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 3
          pattern: "^\\w[\\w ().'&@!#-]*$"
          type: string
          x-pattern-message: "Invalid name, must start with alphanumeric and include\
            \ only alphanumeric characters, spaces, and .&-@!#'()"
        description:
          type: string
        classificationIds:
          type: array
          items:
            type: string
        billingInfo:
          type: string
        adminUsername:
          type: string
        message:
          type: string
    ProjectRequirement:
      required:
      - contacts
      - description
      - id
      - isFulfilled
      - name
      - path
      - scope
      - type
      type: object
      properties:
        id:
          minLength: 1
          type: string
          description: The unique identifier for the requirement
        name:
          type: string
          description: The name of the requirement
        description:
          type: string
          description: A brief description of the requirement
        type:
          description: Specifies the type of governance requirement
          allOf:
          - $ref: "#/components/schemas/GovernanceType"
        path:
          type: string
          description: S3 prefix where files for the requirement are saved
        scope:
          description: Specifies the level at which it was created
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        acceptance:
          description: Specifies the level at which it is satisfied
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        contacts:
          type: array
          description: The governance contacts assigned to the requirement.
          items:
            $ref: "#/components/schemas/GovernanceContact"
        enactmentDate:
          type: string
          description: The date of enactment for the requirement
          format: date-time
          nullable: true
        expirationType:
          description: The method of calculating the expiration date
          allOf:
          - $ref: "#/components/schemas/GovernanceExpiryType"
        expirationDaysAfterCompletion:
          type: integer
          description: The number of days for a relative to completion expiration
          format: int32
          nullable: true
        expirationDate:
          type: string
          description: The date of expiration for the requirement
          format: date-time
          nullable: true
        supplementalDocs:
          type: array
          description: "Optional files with extra information, e.g. templates for\
            \ documents, links, etc"
          nullable: true
          items:
            $ref: "#/components/schemas/GovernanceFile"
        file:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceFile"
        authorship:
          description: Who needs to supply the agreement document
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        verificationMethod:
          description: The value indicating how the completion of the training is
            verified.
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceTrainingVerification"
        isFulfilled:
          type: boolean
          description: Whether the current user has fulfilled the requirement for
            this project
        fulfillmentId:
          type: string
          description: The id for the requirement fulfillment
          nullable: true
        fulfillmentDate:
          type: string
          description: The date the requirement was fulfilled by the user
          format: date-time
          nullable: true
        fulfillmentFile:
          type: string
          description: The optional file uploaded to fulfill the requirement
          nullable: true
        fulfillmentPath:
          type: string
          description: The path to the optional fulfillment file
          nullable: true
    ProjectRole:
      type: string
      enum:
      - OWNER
      - ADMIN
      - CONTRIBUTOR
      - COLLABORATOR
      - NONE
    ProjectSettings:
      required:
      - budgetAmount
      - budgetPeriod
      type: object
      properties:
        budgetAmount:
          minimum: 0
          exclusiveMinimum: true
          type: integer
          description: Total allowed cost for the budget period
          format: int32
        budgetPeriod:
          $ref: "#/components/schemas/BudgetPeriod"
        dragenAmi:
          pattern: "^ami-[a-z0-9]*$"
          type: string
          description: AMI ID for the DRAGEN compute environment (if enabled)
          nullable: true
        enableCompute:
          type: boolean
          description: Enables the default compute environment
          default: true
        enableDragen:
          type: boolean
          description: Enables the DRAGEN compute environment
          default: false
        enableBackup:
          type: boolean
          description: Enables the AWS Backup service for S3
          default: false
        enableSftp:
          type: boolean
          description: Enables access to files over SFTP
          default: false
        maxF1VCPU:
          maximum: 1000
          minimum: 0
          type: integer
          description: Service quota limit for On Demand F1 instances
          format: int32
          default: 0
        maxSpotVCPU:
          maximum: 10000
          minimum: 0
          type: integer
          description: Service quota limit for Spot instances
          format: int32
          default: 0
        maxGPUVCPU:
          maximum: 2000
          minimum: 0
          type: integer
          description: Service quota limit for GPU Spot instances
          format: int32
          default: 0
        retentionPolicyDays:
          minimum: 0
          exclusiveMinimum: true
          type: integer
          description: Days to keep deleted datasets before being permanently erased
          format: int32
          default: 7
        temporaryStorageLifetimeDays:
          minimum: 0
          exclusiveMinimum: true
          type: integer
          description: Days to keep temporary storage space (workflow executor cache)
          format: int32
          default: 14
        serviceConnections:
          type: array
          description: List of service connections to enable
          items:
            type: string
        vpcId:
          pattern: "^vpc-[a-z0-9]*$"
          type: string
          description: VPC that the compute environment will use
          nullable: true
          example: vpc-00000000000000000
        batchSubnets:
          type: array
          description: List of subnets that the compute environment will use
          nullable: true
          example:
          - subnet-00000000000000000
          items:
            pattern: "^subnet-[a-z0-9]*$"
            type: string
        sagemakerSubnets:
          type: array
          description: List of subnets that the sagemaker instances will use
          nullable: true
          example:
          - subnet-00000000000000000
          items:
            pattern: "^subnet-[a-z0-9]*$"
            type: string
        kmsArn:
          pattern: "^arn:aws:kms:[\\w-]*:\\d*:key/[\\w-]*$"
          type: string
          description: "KMS Key ARN to encrypt S3 objects, if not provided, default\
            \ bucket encryption will be used"
          nullable: true
        isDiscoverable:
          type: boolean
          description: Enables the project to be discoverable by other users
          nullable: true
          default: false
        isShareable:
          type: boolean
          description: Enables the project to be shared with other projects
          nullable: true
          default: false
    ProjectUser:
      required:
      - department
      - email
      - name
      - organization
      - role
      - username
      type: object
      properties:
        name:
          type: string
        username:
          type: string
        organization:
          type: string
        department:
          type: string
        email:
          type: string
        role:
          $ref: "#/components/schemas/ProjectRole"
    Reference:
      required:
      - createdAt
      - createdBy
      - description
      - files
      - id
      - name
      - type
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        type:
          type: string
        files:
          type: array
          items:
            $ref: "#/components/schemas/FileEntry"
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
    ReferenceType:
      required:
      - description
      - directory
      - name
      - validation
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        directory:
          type: string
        validation:
          type: array
          items:
            type: object
            additionalProperties: true
    RepositoryType:
      type: string
      description: Type of repository
      enum:
      - NONE
      - AWS
      - GITHUB_PUBLIC
      - GITHUB_PRIVATE
    RequestStatus:
      type: string
      enum:
      - PENDING
      - ACCEPTED
      - DENIED
    RequirementFulfillmentInput:
      type: object
      properties:
        file:
          type: string
          nullable: true
        completedOn:
          type: string
          description: "If not provided, defaults to the current instant"
          format: date-time
          nullable: true
    RequirementInput:
      required:
      - contactIds
      - description
      - expiration
      - name
      - scope
      - type
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
        description:
          type: string
        type:
          $ref: "#/components/schemas/GovernanceType"
        scope:
          $ref: "#/components/schemas/GovernanceScope"
        projectId:
          type: string
          nullable: true
        acceptance:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        contactIds:
          type: array
          items:
            type: string
        expiration:
          $ref: "#/components/schemas/GovernanceExpiry"
        enactmentDate:
          type: string
          format: date-time
          nullable: true
        supplementalDocs:
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/GovernanceFile"
        file:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceFile"
        authorship:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceScope"
        verificationMethod:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/GovernanceTrainingVerification"
    ResourcesInfo:
      required:
      - commit
      - date
      - repository
      - sourceVersion
      type: object
      properties:
        commit:
          type: string
        date:
          type: string
          format: date-time
        repository:
          type: string
        sourceVersion:
          type: string
    RunAnalysisRequest:
      required:
      - name
      - notificationEmails
      - params
      - processId
      - sourceDatasetIds
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
          description: Name of the dataset
        description:
          type: string
          description: Description of the dataset (optional)
          nullable: true
        processId:
          minLength: 1
          type: string
          description: Process ID of the workflow
          example: process-nf-core-rnaseq-3_8
        sourceDatasetIds:
          type: array
          description: These datasets contain files that are inputs to this workflow.
          items:
            type: string
        sourceSampleIds:
          type: array
          description: "Samples within the source datasets that will be used as inputs\
            \ to this workflow. If not specified, all samples will be used."
          nullable: true
          items:
            type: string
        resumeDatasetId:
          type: string
          description: "Used for caching task execution. If the parameters are the\
            \ same as the dataset specified here, it will re-use the output to minimize\
            \ duplicate work"
          nullable: true
        params:
          type: object
          additionalProperties: true
          description: Parameters used in workflow (can be empty)
        notificationEmails:
          maxItems: 5
          type: array
          description: Emails to notify upon workflow success or failure
          items:
            type: string
        computeEnvironmentId:
          type: string
          description: "The compute environment where to run the workflow, if not\
            \ specified, it will run in AWS"
          nullable: true
    Sample:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        metadata:
          type: object
          additionalProperties: true
          nullable: true
        files:
          type: array
          description: Files associated with this sample
          nullable: true
          items:
            $ref: "#/components/schemas/DataFile"
        datasetIds:
          type: array
          nullable: true
          items:
            type: string
        createdAt:
          type: string
          format: date-time
          nullable: true
        updatedAt:
          type: string
          format: date-time
          nullable: true
    SampleRequest:
      required:
      - metadata
      - name
      type: object
      properties:
        name:
          maxLength: 150
          minLength: 1
          type: string
        metadata:
          type: object
          additionalProperties: true
    ServiceConnection:
      required:
      - description
      - name
      type: object
      properties:
        name:
          type: string
        description:
          type: string
    SetUserProjectRoleRequest:
      required:
      - role
      - username
      type: object
      properties:
        username:
          type: string
        role:
          $ref: "#/components/schemas/ProjectRole"
        suppressNotification:
          type: boolean
          default: false
    SftpCredentials:
      required:
      - expiresAt
      - password
      - projectId
      - username
      type: object
      properties:
        username:
          type: string
        password:
          type: string
        projectId:
          type: string
        expiresAt:
          type: string
          format: date-time
    Share:
      required:
      - classificationIds
      - conditions
      - createdAt
      - createdBy
      - description
      - id
      - keywords
      - name
      - originatingProjectId
      - shareType
      - updatedAt
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        originatingProjectId:
          type: string
          description: The ID of the project that owns the share
        shareType:
          $ref: "#/components/schemas/ShareType"
        conditions:
          type: array
          items:
            $ref: "#/components/schemas/DatasetCondition"
        classificationIds:
          type: array
          items:
            type: string
        keywords:
          type: array
          items:
            type: string
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ShareDetail:
      required:
      - classificationIds
      - conditions
      - createdAt
      - createdBy
      - description
      - id
      - isSubscribed
      - isViewRestricted
      - keywords
      - name
      - originatingProject
      - shareType
      - sharedProjects
      - updatedAt
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        originatingProject:
          $ref: "#/components/schemas/NamedItem"
        shareType:
          $ref: "#/components/schemas/ShareType"
        sharedProjects:
          type: array
          items:
            $ref: "#/components/schemas/NamedItem"
        conditions:
          type: array
          description: The conditions under which the dataset is shared
          items:
            $ref: "#/components/schemas/DatasetCondition"
        keywords:
          type: array
          items:
            type: string
        classificationIds:
          type: array
          items:
            type: string
        isSubscribed:
          type: boolean
        isViewRestricted:
          type: boolean
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ShareInput:
      required:
      - classificationIds
      - conditions
      - description
      - name
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
        description:
          type: string
        classificationIds:
          type: array
          description: Data classification IDs for the share
          items:
            type: string
        conditions:
          minItems: 1
          type: array
          description: The conditions under which the dataset is shared
          items:
            $ref: "#/components/schemas/DatasetCondition"
        keywords:
          type: array
          description: Search keywords for the share
          items:
            type: string
        sharedProjectIds:
          type: array
          description: The project IDs that can access this share
          items:
            type: string
        isViewRestricted:
          type: boolean
          description: Whether files within the share are restricted from viewing
            or downloading
          default: false
    ShareType:
      type: string
      enum:
      - PUBLISHER
      - SUBSCRIBER
      - AVAILABLE
      x-enum-descriptions:
      - The project owns this share
      - The project can view this share
      - The share is available for subscription
    Status:
      type: string
      enum:
      - COMPLETED
      - PENDING
      - RUNNING
      - ARCHIVED
      - DELETED
      - DELETING
      - SUSPENDED
      - DELETE
      - FAILED
      - UNKNOWN
    StopExecutionResponse:
      type: object
      properties:
        success:
          type: array
          description: List of job IDs that were successful in termination
          items:
            type: string
        failed:
          type: array
          description: List of job IDs that were not successful in termination
          items:
            type: string
    SyncStatus:
      type: string
      description: Status of the last sync operation
      enum:
      - SUCCESSFUL
      - FAILED
    SystemInfoResponse:
      required:
      - agentEndpoint
      - auth
      - commitHash
      - liveEndpoint
      - maintenanceModeEnabled
      - referencesBucket
      - region
      - resourcesBucket
      - resourcesInfo
      - systemMessage
      - tenantInfo
      - version
      type: object
      properties:
        resourcesBucket:
          type: string
        referencesBucket:
          type: string
        liveEndpoint:
          type: string
        agentEndpoint:
          type: string
        region:
          type: string
        systemMessage:
          type: string
        maintenanceModeEnabled:
          type: boolean
        commitHash:
          type: string
        version:
          type: string
        resourcesInfo:
          $ref: "#/components/schemas/ResourcesInfo"
        tenantInfo:
          $ref: "#/components/schemas/TenantInfo"
        auth:
          $ref: "#/components/schemas/AuthInfo"
    Table:
      required:
      - desc
      type: object
      properties:
        name:
          type: string
          description: User-friendly name of asset
        desc:
          type: string
        type:
          type: string
          description: Type of file
          example: parquet
        rows:
          type: integer
          description: Number of rows in table
          format: int32
        path:
          type: string
          description: Relative path to asset
        cols:
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/ColumnDefinition"
    Tag:
      required:
      - value
      type: object
      properties:
        editable:
          type: boolean
          description: Whether the tag value is editable
          default: true
        key:
          type: string
          nullable: true
          deprecated: true
        value:
          minLength: 1
          type: string
          description: The value of the tag
    Task:
      required:
      - name
      - nativeJobId
      - requestedAt
      - status
      type: object
      properties:
        name:
          type: string
        nativeJobId:
          type: string
        status:
          type: string
        requestedAt:
          type: string
          format: date-time
        startedAt:
          type: string
          format: date-time
        stoppedAt:
          type: string
          format: date-time
        containerImage:
          type: string
        commandLine:
          type: string
        logLocation:
          type: string
    TenantInfo:
      required:
      - contactEmail
      - description
      - features
      - id
      - location
      - loginProviders
      - name
      - privacyPolicyUrl
      - tenantLogoUrl
      - termsOfServiceUrl
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        location:
          type: string
        contactEmail:
          type: string
        tenantLogoUrl:
          type: string
        termsOfServiceUrl:
          type: string
        privacyPolicyUrl:
          type: string
        loginProviders:
          type: array
          items:
            $ref: "#/components/schemas/LoginProvider"
        features:
          $ref: "#/components/schemas/FeatureFlags"
    UpdateDatasetRequest:
      required:
      - description
      - name
      - processId
      - tags
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
        description:
          type: string
        processId:
          minLength: 1
          type: string
        tags:
          type: array
          items:
            $ref: "#/components/schemas/Tag"
    UpdateUserRequest:
      required:
      - email
      - name
      type: object
      properties:
        name:
          maxLength: 75
          minLength: 3
          type: string
          description: Display name of the user
        email:
          maxLength: 75
          minLength: 2
          type: string
          description: Email address of the user
          format: email
        phone:
          maxLength: 40
          minLength: 2
          type: string
          description: Phone number of the user
        department:
          maxLength: 75
          minLength: 2
          type: string
          description: Department or lab the user belongs to
        jobTitle:
          maxLength: 75
          minLength: 2
          type: string
          description: Job title or role of the user
        organization:
          maxLength: 75
          minLength: 2
          type: string
          description: "The organization the user belongs to, only editable by administrators"
        settings:
          nullable: true
          allOf:
          - $ref: "#/components/schemas/UserSettings"
        groups:
          type: array
          description: "Groups the user belongs to, only editable by administrators"
          items:
            type: string
    UploadDatasetCreateResponse:
      required:
      - bucket
      - id
      - message
      - uploadPath
      type: object
      properties:
        id:
          type: string
        message:
          type: string
        uploadPath:
          type: string
        bucket:
          type: string
    UploadDatasetRequest:
      required:
      - expectedFiles
      - name
      - processId
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          type: string
          description: Name of the dataset
        description:
          type: string
          description: Description of the dataset
        processId:
          minLength: 1
          type: string
          description: ID of the ingest process
          example: paired_dnaseq
        expectedFiles:
          minItems: 1
          type: array
          items:
            type: string
            description: List of file names (with relative paths) that will be uploaded
            example: sample1.fastq
        tags:
          type: array
          description: List of tags to apply to the dataset
          nullable: true
          items:
            $ref: "#/components/schemas/Tag"
    User:
      required:
      - department
      - name
      - organization
      - username
      type: object
      properties:
        name:
          type: string
        username:
          type: string
        organization:
          type: string
        department:
          type: string
    UserDetail:
      required:
      - department
      - email
      - groups
      - invitedBy
      - jobTitle
      - name
      - organization
      - phone
      - projectAssignments
      - settings
      - username
      type: object
      properties:
        username:
          type: string
        name:
          type: string
        phone:
          type: string
        email:
          type: string
        organization:
          type: string
        jobTitle:
          type: string
        department:
          type: string
        invitedBy:
          type: string
        signUpTime:
          type: string
          format: date-time
          nullable: true
        projectAssignments:
          type: array
          items:
            $ref: "#/components/schemas/UserProjectAssignment"
        groups:
          type: array
          items:
            type: string
        settings:
          $ref: "#/components/schemas/UserSettings"
    UserProjectAssignment:
      required:
      - createdBy
      - projectId
      - role
      type: object
      properties:
        projectId:
          type: string
        role:
          $ref: "#/components/schemas/ProjectRole"
        createdBy:
          type: string
        createdAt:
          type: string
          format: date-time
          nullable: true
    UserSettings:
      required:
      - analysisUpdateNotificationsEnabled
      type: object
      properties:
        analysisUpdateNotificationsEnabled:
          type: boolean
      additionalProperties: true
      description: Additional settings for the user
    ValidateFileRequirementsRequest:
      required:
      - fileNames
      - sampleSheet
      type: object
      properties:
        fileNames:
          type: array
          items:
            type: string
        sampleSheet:
          type: string
  securitySchemes:
    accessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
