openapi: 3.0.0
info:
  version: Generic
  title: External APIs for Customer Integration
  description: >-
    APIs to create and fetch Cleanroom and related details from Habu for Customer Integration.
  contact:
    name: Habu
    url: https://habu.com/
    email: platform@habu.com
security:
  - application: [ ]
paths:
  /cleanrooms:
    post:
      summary: Create Cleanroom
      operationId: createCleanroom
      description: >-
        This operation creates a new Cleanroom.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CleanRoomRequest'
          application/xml:
            schema:
              $ref: '#/components/schemas/CleanRoomRequest'
      responses:
        '200':
          description: Cleanroom created successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoom"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/ResourceConflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanrooms
    get:
      summary: Fetch a list of all Cleanrooms
      operationId: getAllCleanrooms
      description: >-
        This operation fetches a list of all the Cleanrooms that are created for the Customer Integration.
      parameters:
        - name: limit
          in: query
          description: The number of Cleanrooms returned per page - default is 500
          schema:
            type: integer
            default: 500
        - name: offset
          in: query
          description: The offset - default is 0
          schema:
            type: integer
            default: 0
      responses:
        '200':
          description: Successfully fetched Cleanroom details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRooms'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRooms'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanrooms

  /cleanrooms/{cleanroomId}/invitations:
    get:
      summary: List Cleanroom Partner Invitations For a Cleanroom Inviter
      operationId: listPartnerInvitationsForInviter
      description: >-
        This operation lists a invitation list for a CleanRoom Inviter.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID to see invitations
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Fetched Cleanroom Partner invitations successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InvitationDetail"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners
        - Invitations
    delete:
      summary: Cancel Cleanroom Partner Invitation
      operationId: cancelPartnerInvitationByEmail
      description: >-
        This operation cancels a invitation for a CleanRoom Inviter.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID of inviter's clean-room
          schema:
            type: string
          required: true
        - in: query
          name: partnerEmail
          description: the email for the partner whose invitation is getting canceled
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Canceled Cleanroom Partner invitation successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InvitationDetail"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners
        - Invitations

  /cleanrooms/{cleanroomId}/invitations/{invitationId}:
    delete:
      summary: Cancel Cleanroom Partner Invitation
      operationId: cancelPartnerInvitationById
      description: >-
        This operation cancels a invitation for a CleanRoom Inviter.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID of inviter's clean-room
          schema:
            type: string
          required: true
        - in: path
          name: invitationId
          description: the ID of the invitation getting canceled
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Canceled Cleanroom Partner invitation successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InvitationDetail"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners
        - Invitations


  /cleanrooms/{cleanroomId}:
    get:
      summary: Fetch a Cleanroom by ID
      operationId: getCleanroomById
      description: >-
        This operation fetches a Cleanroom by ID.
      parameters:
        - name: cleanroomId
          in: path
          description: The cleanroom ID to fetch a single Cleanroom's details
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoom'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoom'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanrooms

    put:
      summary: Update Cleanroom
      operationId: updateCleanroom
      description: >-
        This operation updates an existing cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID to be updated
          schema:
            type: string
          required: true
      requestBody:
          description: Cleanroom details to be updated
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomRequest"
      responses:
        '200':
          description: Cleanroom updated successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoom"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanrooms

    delete:
      summary: Delete Cleanroom
      operationId: deleteCleanroom
      description: >-
        This operation deletes an existing cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID to be deleted
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Cleanroom deleted successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanrooms

  /cleanrooms/cleanroom-types:
    get:
      summary: Fetch all Cleanroom Types
      operationId: getCleanroomTypes
      description: >-
        This operation fetches all the available Cleanroom Types.
      responses:
        '200':
          description: Successfully fetched Cleanroom Types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomTypes'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoomTypes'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanrooms

  /cleanrooms/{cleanroomId}/cleanroom-questions:
    post:
      summary: Add Cleanroom Question
      operationId: addCleanroomQuestion
      description: >-
        This operation adds a question to an existing cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the Cleanroom Question
          schema:
            type: string
          required: true
        - in: query
          name: questionId
          description: Question ID
          required: true
          schema:
            type: string
        - in: query
          name: isEditable
          description: Whether the resultant Cleanroom Question can be edited further
          schema:
            type: boolean
            default: true
          required: false
      responses:
        '200':
          description: Cleanroom Question created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions

    get:
      summary: Fetch a list of all Cleanroom Questions for a Cleanroom
      operationId: getAllCleanroomQuestions
      description: >-
        This operation fetches a list of all the Cleanroom Questions that are tied to a Cleanroom.
      parameters:
        - name: cleanroomId
          in: path
          description: The cleanroom ID to fetch all the underlying Cleanroom Questions
          schema:
            type: string
          required: true
        - name: startDate
          in: query
          description: A filter applied on the CreatedOn field for a Cleanroom Question that marks as the beginning of the range of dates. Default is empty - meaning no filter applied. The format is yyyy-MM-dd
          schema:
            type: string
            format: date
            example: 2024-01-01
        - name: endDate
          in: query
          description: A filter applied on the CreatedOn field for a Cleanroom Question that marks as the end of the range of dates. Default is empty - meaning no filter applied. The format is yyyy-MM-dd
          schema:
            type: string
            format: date
            example: 2024-01-01
        - name: limit
          in: query
          description: The number of Cleanroom Questions returned per page - default is 500
          schema:
            type: integer
            default: 500
        - name: offset
          in: query
          description: The offset - default is 0
          schema:
            type: integer
            default: 0
        - name: questionType
          in: query
          description: List or Analytical
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched Cleanroom Question details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestions'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestions'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions

  /cleanroom-questions/{cleanroomQuestionId}:
    get:
      summary: Fetch a Cleanroom Question by ID
      operationId: getCleanroomQuestionById
      description: >-
        This operation fetches a Cleanroom Question by ID.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: The Cleanroom Question ID to fetch a single Cleanroom Question's details
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Question details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestion'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestion'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions

    delete:
      summary: Delete Cleanroom Question
      operationId: deleteCleanroomQuestion
      description: >-
        This operation deletes an existing cleanroom question.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: Cleanroom Question ID to be deleted
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully deleted the cleanroom question.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions

  /cleanroom-questions/{cleanroomQuestionId}/compute-capacity:
    patch:
      summary: Update the compute capacity for a cleanroom question
      operationId: updateCleanroomQuestionComputeCapacity
      description: >-
        This operation updates the compute capacity for a cleanroom question. This is currently only supported for Snowflake and Hybrid Cleanrooms
      parameters:
        - in: path
          name: cleanroomQuestionId
          description: ID of the cleanroom question
          schema:
            type: string
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCleanroomQuestionComputeCapacityRequest'
          application/xml:
            schema:
              $ref: '#/components/schemas/UpdateCleanroomQuestionComputeCapacityRequest'
      responses:
        '200':
          description: Cleanroom Question created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateCleanroomQuestionComputeCapacityResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions


  /cleanrooms/{cleanroomId}/questions/{questionId}:
    get:
      summary: Get Cleanroom Question by Cleanroom ID and Question ID
      operationId: getCleanroomQuestion
      description: >-
        This operation fetches a Cleanroom Question for a given Cleanroom ID and Question ID.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the Cleanroom Question
          schema:
            type: string
          required: true
        - in: path
          name: questionId
          description: Question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom Question fetched successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: Cleanroom question ID
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions

  /cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-result-shares:
    get:
      summary: Get the possible sharing options for the result of a Cleanroom Question
      operationId: getCleanroomQuestionResultShares
      description: >-
        This operation fetches a the possible sharing options for the result of a Cleanroom Question.
      parameters:
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Result Shares
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestionResultShares'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestionResultShares'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Result Shares

    put:
      summary: Upsert clean room question result shares
      operationId: upsertCleanRoomQuestionResultShares
      description: >-
        This operation shares the results of a cleanroom question.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: The Cleanroom Question ID for which result share is being shared
          schema:
            type: string
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertCleanRoomQuestionResultSharesApiInput'
          application/xml:
            schema:
              $ref: '#/components/schemas/UpsertCleanRoomQuestionResultSharesApiInput'
      responses:
        '200':
          description: Successfully upserted Cleanroom Question Result Shares
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpsertCleanRoomQuestionResultShareResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/UpsertCleanRoomQuestionResultShareResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Result Shares

  /cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-tags:
    get:
      summary: Get the tags for a Cleanroom Question
      operationId: getCleanroomQuestionTags
      description: >-
        This operation fetches a the tags for a Cleanroom Question.
      parameters:
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Tags
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestionTags'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestionTags'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Tags

  /cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-parameters:
    get:
      summary: Get the parameters for a Cleanroom Question
      operationId: getCleanroomQuestionParameters
      description: >-
        This operation fetches a the parameters for a Cleanroom Question.
      parameters:
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCleanRoomQuestionParametersResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetCleanRoomQuestionParametersResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Tags

  /cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-run-schedules/{cleanroomQuestionRunScheduleId}:
    get:
      summary: Get a Cleanroom Question Run Schedule by ID
      operationId: getCleanroomQuestionRunScheduleById
      description: >-
        This operation fetches a the a Cleanroom Question Run Schedule by ID.
      parameters:
        - in: path
          name: cleanroomQuestionRunScheduleId
          description: Cleanroom Question Run Schedule ID
          required: true
          schema:
            type: string
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Run Schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCleanroomQuestionRunScheduleResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetCleanroomQuestionRunScheduleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Run Schedule
    delete:
      summary: delete a Cleanroom Question Run Schedule by ID
      operationId: deleteCleanroomQuestionRunScheduleById
      description: >-
        This operation deletes a Cleanroom Question Run Schedule by ID.
      parameters:
        - in: path
          name: cleanroomQuestionRunScheduleId
          description: Cleanroom Question Run Schedule ID
          required: true
          schema:
            type: string
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully deleted Cleanroom Question Run Schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteCleanroomQuestionRunScheduleResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/DeleteCleanroomQuestionRunScheduleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Run Schedule
    patch:
      summary: Update a run schedule for a cleanroom question
      operationId: patchCleanroomQuestionRunScheduleById
      description: >-
        This operation modifies a run schedule for a cleanroom question
      parameters:
        - in: path
          name: cleanroomQuestionRunScheduleId
          description: Cleanroom Question Run Schedule ID
          required: true
          schema:
            type: string
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleInput'
          application/xml:
            schema:
              $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleInput'
      responses:
        '200':
          description: Successfully updated a Cleanroom Question Run Schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Run Schedule

  /cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-run-schedules:
    get:
      summary: Get all Cleanroom Question Run Schedules for a Cleanroom Question
      operationId: getCleanroomQuestionRunSchedules
      description: >-
        This operation fetches all run schedules for a cleanroom question
      parameters:
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Run Schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAllRunSchedulesForCleanroomQuestionResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetAllRunSchedulesForCleanroomQuestionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Run Schedule
    post:
      summary: Create a new run schedule for a cleanroom question
      operationId: createCleanroomQuestionRunSchedule
      description: >-
        This operation creates a new run schedule for a cleanroom question
      parameters:
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleInput'
          application/xml:
            schema:
              $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleInput'
      responses:
        '200':
          description: Successfully created a Cleanroom Question Run Schedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/CreateCleanroomQuestionRunScheduleResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Run Schedule



  /cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-runs:
    get:
      summary: Fetch a list of all Cleanroom Question Runs for a Cleanroom Question
      operationId: getAllCleanroomQuestionRuns
      description: >-
        This operation fetches a list of all the Cleanroom Question Runs (including metadata) for a given Cleanroom Question. The Customer can optionally use the status parameter to filter the list of Cleanroom Question Runs.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: The Cleanroom Question ID to fetch all the associated Cleanroom Question Runs
          schema:
            type: string
          required: true
        - name: status
          in: query
          description: The status of the Cleanroom Question Run
          schema:
            type: string
            enum: [ QUEUED, RUNNING, COMPLETED, FAILED, PARTNER_QUEUED, PARTNER_RUNNING, PARTNER_COMPLETED, PARTNER_FAILED ]
          required: false
        - name: startDate
          in: query
          description: A filter applied on the SubmitAt field for a Cleanroom Question Run that marks as the beginning of the range of dates. Default is empty - meaning no filter applied. The format is yyyy-MM-dd
          schema:
            type: string
            format: date
            example: 2024-01-01
        - name: endDate
          in: query
          description: A filter applied on the SubmitAt field for a Cleanroom Question Run that marks as the end of the range of dates. Default is empty - meaning no filter applied. The format is yyyy-MM-dd
          schema:
            type: string
            format: date
            example: 2024-01-01
        - name: limit
          in: query
          description: The number of Cleanroom Question Runs returned per page - default is 30 and maximum is 100
          schema:
            type: integer
            default: 30
            maximum: 100
        - name: offset
          in: query
          description: The offset - default is 0
          schema:
            type: integer
            default: 0
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Run details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionRunsMetadata'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionRunsMetadata'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-questions/{cleanroomQuestionId}/create-run:
    post:
      summary: Create a Cleanroom Question Run for a Cleanroom Question
      operationId: createCleanroomQuestionRun
      description: >-
        This operation facilitates creation of a Cleanroom Question Run for a given Cleanroom Question.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: The Cleanroom Question ID for which the Cleanroom Question Run is being created
          schema:
            type: string
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuestionRunCreateParameters'
          application/xml:
            schema:
              $ref: '#/components/schemas/QuestionRunCreateParameters'
      responses:
        '200':
          description: Successfully created Cleanroom Question Run
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionRunMetadata'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionRunMetadata'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-questions/{cleanroomQuestionId}/segmentation:
    post:
      summary: Enable segmentation for a Cleanroom Question
      operationId: enableCleanroomQuestionSegmentation
      description: >-
        This operation enables segmentation for a Cleanroom Question.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: The Cleanroom Question ID for which segmentation is being enabled
          schema:
            type: string
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SegmentationRequest'
      responses:
        '200':
          description: Segmentation enabled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SegmentationResponse'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions

    put:
      summary: Update segmentation for a Cleanroom Question
      operationId: updateCleanroomQuestionSegmentation
      description: >-
        This operation updates segmentation for a Cleanroom Question.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: The Cleanroom Question ID for which segmentation is being updated
          schema:
            type: string
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SegmentationRequest'
      responses:
        '200':
          description: Segmentation updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SegmentationResponse'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Questions

  /cleanroom-question-runs/{cleanroomQuestionRunId}:
    get:
      summary: Fetch a Cleanroom Question Run by ID
      operationId: getCleanroomQuestionRunById
      description: >-
        This operation fetches a Cleanroom Question Run (including metadata) by Cleanroom Question Run ID.
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID to fetch a single Cleanroom Question Run's details
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Run details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionRunMetadata'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionRunMetadata'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

    put:
      summary: Update Question Run Status
      operationId: updateCleanroomQuestionRunStatus
      description: >-
        This operation lets the Customer share an update on the status of an in-progress Cleanroom Question Run with Habu. It also lets them send the status and details for a completed/failed Cleanroom Question Run to Habu.
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID for which the update request is being sent
          schema:
            type: string
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuestionRunStatus'
          application/xml:
            schema:
              $ref: '#/components/schemas/QuestionRunStatus'
      responses:
        '200':
          $ref: '#/components/responses/QuestionRunStatusUpdate'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

    delete:
      summary: Delete Cleanroom Question Run
      operationId: deleteCleanroomQuestionRun
      description: >-
        This operation lets the Customer delete a Cleanroom Question Run by ID.
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Cleanroom Question Run deleted successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-question-runs/{cleanroomQuestionRunId}/data:
    get:
      summary: Get the result data for Cleanroom Question Run
      operationId: getCleanroomQuestionRunData
      description: >-
        This operation is to get the result data for the Cleanroom Question Run.
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID corresponding to this run
          schema:
            type: string
          required: true
        - name: limit
          in: query
          description: The number of Cleanroom Question Run results data returned per page - default is 500
          schema:
            type: integer
            default: 500
        - name: offset
          in: query
          description: The offset - default is 0
          schema:
            type: integer
            default: 0
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Run Result Data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionRunResultData'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionRunResultData'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-question-runs/{cleanroomQuestionRunId}/download/{fileName}:
    get:
      summary: Get the output file for Cleanroom Question Run
      operationId: getCleanroomQuestionRunOutputFile
      description: >-
        This operation is to get the output file for the Cleanroom Question Run.
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID corresponding to this run
          schema:
            type: string
          required: true
        - name: fileName
          in: path
          description: Output File Name
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Run Output File
          content:
            application/json:
              schema:
                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-question-runs/{cleanroomQuestionRunId}/data/count:
    get:
      summary: Get the count of result data for Cleanroom Question Run
      operationId: getCleanroomQuestionRunDataCount
      description: >-
        This operation is to get the count of result data for the Cleanroom Question Run.
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID corresponding to this run
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched count of result data
          content:
            application/json:
              schema:
                type: integer
            application/xml:
              schema:
                type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-question-runs/{cleanroomQuestionRunId}/audit:
    get:
      summary: Get audit details for Cleanroom Question Run
      operationId: getCleanroomQuestionRunAudit
      description: >-
        This operation is to get the audit details for the Cleanroom Question Run.
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID corresponding to this run
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Run Audit Details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanroomQuestionRunAuditDetails'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanroomQuestionRunAuditDetails'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-question-runs/{cleanroomQuestionRunId}/activation-summary:
    get:
      summary: Fetch the Activation Summary for a Cleanroom question run
      operationId: getCleanroomQuestionRunActivationSummaries
      description: >-
        This operation fetches a list the Activation Summary for a Cleanroom question run
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID to fetch the associated Activation Summary
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Activation Summary
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanroomQuestionRunActivationSummary'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanroomQuestionRunActivationSummary'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs

  /cleanroom-question-runs/{cleanroomQuestionRunId}/partition-parameters:
    get:
      summary: Fetch the Partition Parameters for a Cleanroom question run
      operationId: getCleanroomQuestionRunPartitionParameters
      description: >-
        This operation fetches a list of the partition parameters for a Cleanroom question run
      parameters:
        - name: cleanroomQuestionRunId
          in: path
          description: The Cleanroom Question Run ID to fetch the associated partition parameters
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Partition Parameteres
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanroomQuestionRunPartitionParameters'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanroomQuestionRunPartitionParameters'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Runs


  /cleanrooms/{cleanroomId}/partners:
    post:
      summary: Add Cleanroom Partner
      operationId: addCleanroomPartner
      description: >-
        This operation adds a new partner to an existing cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the partner
          schema:
            type: string
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCleanRoomPartnerRequest'
          application/xml:
            schema:
              $ref: '#/components/schemas/AddCleanRoomPartnerRequest'
      responses:
        '200':
          description: Cleanroom Partner invitation sent successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InvitationDetail"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners
        - Invitations

    get:
      summary: Fetch a list of all Cleanroom Partners
      operationId: getAllCleanroomPartners
      description: >-
        This operation fetches a list of all the Cleanroom partners in a cleanroom and their respective users.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the partners
          schema:
            type: string
          required: true
      responses:
        '200':
          description: A list of Cleanroom Partners fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomPartners"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners

  /cleanrooms/{cleanroomId}/partners/{cleanroomPartnerId}:
    get:
      summary: Fetch a Cleanroom Partner by Partner ID
      operationId: getCleanroomPartnerById
      description: >-
        This operation fetches a Cleanroom Partner by Partner ID.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with this partner
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomPartnerId
          description: Cleanroom Partner ID
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Cleanroom Partner fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomPartnerResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners

    delete:
      summary: Delete Cleanroom Partner
      operationId: deleteCleanroomPartner
      description: >-
        This operation deletes an existing partner from a cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with this partner
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomPartnerId
          description: Cleanroom Partner ID to be removed
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Clean Room Partner removed successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners

  /cleanrooms/{cleanroomId}/partners/{cleanroomPartnerId}/cleanRoomRoles:
    get:
      summary: Get Cleanroom Partner Roles in Cleanroom
      operationId: getCleanroomPartnerRoles
      description: >-
        This operation fetches the Cleanroom partner roles in a cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with this user
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomPartnerId
          description: Cleanroom Partner ID associated with this user
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Clean Room Partner roles fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomRoles"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners

  /cleanrooms/{cleanroomId}/partners/{cleanroomPartnerId}/cleanRoomRoles/{cleanRoomRoleId}:
    get:
      summary: Get Cleanroom Partner Role by ID
      operationId: getCleanroomPartnerRoleByID
      description: >-
        This operation fetches the Cleanroom partner role by Id.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with this user
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomPartnerId
          description: Cleanroom Partner ID
          schema:
            type: string
          required: true
        - in: path
          name: cleanRoomRoleId
          description: Cleanroom Partner Role ID
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Clean Room Partner role fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomRole"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners


  /cleanrooms/{cleanroomId}/partners/{cleanroomPartnerId}/users/{cleanroomUserId}:
    delete:
      summary: Remove Cleanroom Partner User
      operationId: deleteCleanroomPartnerUser
      description: >-
        This operation removes an existing partner user from a cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with this user
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomPartnerId
          description: Cleanroom Partner ID associated with this user
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomUserId
          description: Cleanroom User ID to be removed
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Partner user removed from the cleanroom successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners

  /cleanrooms/{cleanroomId}/partners/{cleanroomPartnerId}/users/{cleanroomUserId}/cleanRoomRoles/{cleanRoomRoleId}:
    put:
      summary: Update a partner cleanroom user role
      operationId: updateCleanroomPartnerUserRole
      description:
        This operation updates a partner cleanroom user role except Administrator and Partner Administrator Role.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the users
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomPartnerId
          description: Cleanroom Partner ID
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomUserId
          description: Cleanroom User ID
          schema:
            type: string
          required: true
        - in: path
          name: cleanRoomRoleId
          description: Cleanroom User Role ID
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Partner cleanroom user role updated successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomUser"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Partners

  /cleanrooms/{cleanroomId}/cleanRoomRoles:
    get:
      summary: Fetch a list of cleanRoom roles
      operationId: getCleanroomRoles
      description:
        This operation fetches a list of roles applicable to the given cleanroom in this organization.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the users
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Cleanroom role list fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomRoles"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Roles

  /cleanrooms/{cleanroomId}/cleanRoomRoles/{cleanRoomRoleId}:
    get:
      summary: Fetch a cleanroom role by ID
      operationId: getCleanroomRoleById
      description:
        This operation fetches a Cleanroom role by ID.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the users
          schema:
            type: string
          required: true
        - in: path
          name: cleanRoomRoleId
          description: Cleanroom Role ID
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Cleanroom role fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomRole"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Roles

  /cleanrooms/{cleanroomId}/users:
    post:
      summary: Add Cleanroom User
      operationId: addCleanroomUser
      description: >-
        This operation adds a new user to an existing cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the user
          schema:
            type: string
          required: true
      requestBody:
        description: "The following fields are required: email, role; all others are optional"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AddCleanRoomUserRequest"
      responses:
        '200':
          description: User added to the cleanroom successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomUser"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/ResourceConflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Users

    get:
      summary: Fetch a list of Cleanroom Users
      operationId: getCleanroomUsers
      description: >-
        This operation fetches a list of the Cleanroom users in a cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the users
          schema:
            type: string
          required: true
        - in: query
          name: cleanroomUserEmail
          description: Email for a particular cleanroom user
          schema:
            type: string
          required: false
      responses:
        '200':
          description: Cleanroom User list fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomUsers"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Users

  /cleanrooms/{cleanroomId}/users/{cleanroomUserId}:
    get:
      summary: Fetch a Cleanroom User by ID
      operationId: getCleanroomUserById
      description: >-
        This operation fetches a Cleanroom user by ID.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the user
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomUserId
          description: Cleanroom User ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: User fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomUser"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Users

    delete:
      summary: Remove Cleanroom User
      operationId: deleteCleanroomUser
      description: >-
        This operation removes an existing user from a cleanroom.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the user
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomUserId
          description: Cleanroom User ID to be removed
          schema:
            type: string
          required: true
      responses:
        '200':
          description: User removed from the cleanroom successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Users

  /cleanrooms/{cleanroomId}/users/{cleanroomUserId}/cleanRoomRoles/{cleanRoomRoleId}:
    put:
      summary: Update Cleanroom User Role
      operationId: updateCleanroomUserRole
      description: >-
        This operation updates cleanroom user role.
      parameters:
        - in: path
          name: cleanroomId
          description: Cleanroom ID associated with the user
          schema:
            type: string
          required: true
        - in: path
          name: cleanroomUserId
          description: Cleanroom User ID
          schema:
            type: string
          required: true
        - in: path
          name: cleanRoomRoleId
          description: Cleanroom User Role ID
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Cleanroom role updated successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomUser"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Users

  /data-connections:
    post:
      summary: Create Data Connection
      operationId: createDataConnection
      description: >-
        This operation creates a new data connection.
      requestBody:
        description: "The following fields are required: name, category, credentialId, dataType.[displayName], jobParameter.[name, value]; all others are optional"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DataConnectionDetails"
      responses:
        '200':
          description: New data connection created successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataConnectionResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections

    get:
      summary: Fetch a list of all Data Connections
      operationId: getAllDataConnections
      description: >-
        This operation fetches a list of all the data connections created as part of this Customer Integration.
      responses:
        '200':
          description: Data connections fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataConnections"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections

  /data-connections/{dataConnectionId}:
    get:
      summary: Fetch a Data Connection by ID
      operationId: getDataConnectionById
      description: >-
        This operation fetches a data connection by ID.
      parameters:
        - name: dataConnectionId
          in: path
          description: Data Connection ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched the data connection.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataConnectionResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections

    put:
      summary: Update a Data Connection by ID
      operationId: updateDataConnection
      description: >-
        This operation updates a data connection by ID.
      parameters:
        - name: dataConnectionId
          in: path
          description: Data Connection ID
          required: true
          schema:
            type: string
      requestBody:
          description: "The following fields are required: name, category, credentialId, dataType.[displayName, displayName], jobParameter.[name, value]; all others are optional"
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataConnectionDetails"
      responses:
        '200':
          description: Successfully updated the data connection.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataConnectionResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections

    delete:
      summary: Delete a Data Connection by ID
      operationId: deleteDataConnection
      description: >-
        This operation deletes a data connection by ID.
      parameters:
        - in: path
          name: dataConnectionId
          description: DataConnection ID to be deleted
          schema:
            type: string
          required: true
      responses:
        '200':
          description: DataConnection deleted successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections

  /data-connections/{dataConnectionId}/field-configurations:
    get:
      summary: Fetch a list of all Field Configurations
      operationId: getAllFieldConfigurations
      description: >-
        This operation fetches a list of all the Field Configurations for the given Data Connection.
      parameters:
        - name: dataConnectionId
          in: path
          description: Data Connection ID associated with the Field Configurations
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Field Configurations fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FieldConfigurations"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections

    post:
      summary: Map Field Configurations
      operationId: mapFieldConfigurations
      description: >-
        This operation maps the Field Configurations for the given Data Connection.
      parameters:
        - in: path
          name: dataConnectionId
          description: Data Connection ID associated with the Field Configurations
          required: true
          schema:
            type: string
      requestBody:
          description: "The following fields are required: fieldName, dataType, identifierType, delimiter, isPii, isUserIdField, isExcluded; all others are optional Request GET method to fetch list of available data connection fields"
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FieldConfigurations"
      responses:
        '200':
          description: Field Configurations mapped successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/FieldConfigurations"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections

  /cleanrooms/{cleanroomId}/datasets:
    get:
      summary: Fetch a list of all Cleanroom Datasets
      operationId: getCleanroomDatasets
      description: >-
        This operation fetches a list of all the Datasets that can be assigned or configured for a Cleanroom.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID associated with the datasets
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom Datasets fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomDatasets"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Datasets

  /cleanrooms/{cleanroomId}/datasets/{datasetId}:
    get:
      summary: Get a Cleanroom Dataset by ID
      operationId: getCleanroomDatasetById
      description: >-
        This operation gets a Cleanroom Dataset by ID.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID associated with the dataset
          required: true
          schema:
            type: string
        - name: datasetId
          in: path
          description: Dataset ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom Dataset fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomDataset"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Datasets

    put:
      summary: Update a Cleanroom Dataset by ID
      operationId: updateCleanroomDatasetById
      description: >-
        This operation updates the field mappings and field filters for a Cleanroom Dataset.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID associated with the dataset
          required: true
          schema:
            type: string
        - name: datasetId
          in: path
          description: Dataset ID
          required: true
          schema:
            type: string
      requestBody:
        description: Cleanroom Dataset Details
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CleanRoomDatasetUpdateRequest"
      responses:
        '200':
          description: Cleanroom Dataset updated successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomDataset"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Datasets

  /cleanrooms/{cleanroomId}/datasets/configure:
    post:
      summary: Configure a Cleanroom Dataset by Data Connection ID
      operationId: configureCleanroomDataset
      description: >-
        This operation configures a Cleanroom Dataset based on Data Connection ID.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID associated with the dataset
          required: true
          schema:
            type: string
        - name: dataConnectionId
          in: query
          description: Data Connection ID
          required: true
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfigureCleanRoomDatasetRequest'
      responses:
        '200':
          description: Cleanroom Dataset configured successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomDataset"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Datasets

  /cleanrooms/{cleanroomId}/datasets/partner-assignment:
    post:
      summary: Configure whether a partner can assign a Cleanroom Dataset
      operationId: updateCleanroomDatasetPartnerAssignment
      description: >-
        This operation configure whether a partner can assign a Cleanroom Dataset
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID associated with the dataset
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCleanroomDatasetPartnerAssignmentRequest'
      responses:
        '200':
          description: Cleanroom Dataset partner assignment updated successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateCleanroomDatasetPartnerAssignmentResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Datasets

  /identifier-types:
    get:
      summary: Fetch a list of all Identifier Types for Field Mapping
      operationId: getAllIdentifierTypes
      description: >-
        This operation fetches a list of all the Identifier Types to select from for mapping a Field - this is applicable during the mapping step of a Data Connection.
      responses:
        '200':
          description: Identifier Types fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/IdentifierTypes"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Connections
        - Cleanroom Datasets

  /cleanrooms/{cleanroomId}/stakeholders:
    get:
      summary: Fetch a list of stakeholders for this cleanroom
      operationId: getCleanroomStakeholders
      description: >-
        This operation fetches a list of stakeholders for this Cleanroom that need datasets assigned while managing datasets for Cleanroom Question.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom Stakeholders returned successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomStakeholders"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Datasets

  /cleanrooms/{cleanroomId}/assets:
    get:
      summary: Get comprehensive asset details for cleanroom operations
      operationId: getCleanroomAssetDetails
      description: >-
        This operation fetches comprehensive asset details including questions, datasets, compute capacity options, field types, and stakeholders for cleanroom operations.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom asset details returned successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanroomAssetDetails"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanrooms

  /cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-permissions:
    post:
      summary: Configure the permissions for a Cleanroom Question
      operationId: configureCleanRoomQuestionPermissions
      description: >-
        This operation configures cleanroom question permissions
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: Cleanroom Question ID for which permissions need to be updated
          required: true
          schema:
            type: string
        - name: cleanroomQuestionPermissions
          in: query
          description: List of Updated Cleanroom Question Permissions
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateCleanRoomQuestionPermissionsRequest"
      responses:
        '200':
          description: Cleanroom Question Datasets configured and assigned successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomQuestionPermissionsResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Permissions

    get:
      summary: Get the permissions for a Cleanroom Question
      operationId: getCleanroomQuestionPermissions
      description: >-
        This operation fetches the existing permissions for a Cleanroom Question.
      parameters:
        - in: path
          name: cleanroomQuestionId
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched Cleanroom Question Result Shares
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestionPermissionsResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoomQuestionPermissionsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Permissions

  /cleanroom-questions/{cleanroomQuestionId}/data-type-options:
    get:
      summary: Fetch a list of data type options for this cleanroom question
      operationId: getCleanroomQuestionDataTypeOptions
      description: >-
        This operation fetches a list of DataTypeOptions for this Cleanroom Question.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: Cleanroom Question ID
          required: true
          schema:
            type: string
        - name: dataType
          in: query
          description: Data Type
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom Question Data Type Options returned successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/QuestionDataTypeOptions"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Datasets

  /cleanroom-questions/{cleanroomQuestionId}/datasets-ownership:
    post:
      summary: Assign Cleanroom Question Datasets Ownership
      operationId: assignCleanroomQuestionDatasetsOwnership
      description: >-
        This operation assigns ownership to a Cleanroom Question Datasets.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: Cleanroom Question ID associated with the datasets
          required: true
          schema:
            type: string
        - name: AssignCleanroomQuestionDatasetRequests
          in: query
          description: request body to assign cleanroom question dataset ownership
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AssignCleanroomQuestionDatasetRequest"
      responses:
        '200':
          description: Cleanroom Question Datasets ownership assigned successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomQuestionDatasets"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Datasets

  /cleanroom-questions/{cleanroomQuestionId}/datasets:
    post:
      summary: Configure Cleanroom Question Datasets
      operationId: configureCleanroomQuestionDatasets
      description: >-
        This operation configures and assigns Datasets to a Cleanroom Question.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: Cleanroom Question ID associated with the datasets
          required: true
          schema:
            type: string
      requestBody:
        description: "The following fields are required: datasetId, macro, field.[name, value]; all others are optional. Clean-room owner must assign dataset ownership first"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CleanRoomQuestionDatasets"
      responses:
        '200':
          description: Cleanroom Question Datasets configured and assigned successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomQuestionDatasets"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Datasets

    get:
      summary: Fetch a list of all Cleanroom Question Datasets
      operationId: getAllCleanroomQuestionDatasets
      description: >-
        This operation fetches a list of all Cleanroom Question Datasets.
      parameters:
        - name: cleanroomQuestionId
          in: path
          description: Cleanroom Question ID associated with the datasets
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom Question Datasets fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CleanRoomQuestionDatasets"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Question Datasets

  /users:
    get:
      summary: Fetch a list of all Organization Users
      operationId: getAllOrganizationUsers
      description: >-
        This operation fetches a list of all the users created for this organization.
      parameters:
        - name: limit
          in: query
          description: The number of organization users returned per page - default is 500
          schema:
            type: integer
            default: 500
        - name: offset
          in: query
          description: The offset - default is 0
          schema:
            type: integer
            default: 0
      responses:
        '200':
          description: Organization Users fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrganizationUsers"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Organization Users

  /organization-credentials:
    get:
      summary: Fetch a list of all Organization Credentials
      operationId: getAllOrganizationCredentials
      description: >-
        This operation fetches a list of all the Organization Credentials created for this Customer Integration. Ensure that the credentials are configured on the Habu platform before they can be accessed via external APIs. Creation of credentials is not exposed via external APIs to prevent potential security issues with transmitting raw credential values.
      responses:
        '200':
          description: Organization Credentials fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrganizationCredentialDetails"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Organization Credentials
    post:
      summary: Create Organization Credentials
      operationId: createOrganizationCredential
      description: >-
        This operation creates a new credential.
      requestBody:
        description: "The following fields are required: name, credentialSourceName, credentials; all others are optional"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OrganizationCredentialDetail"
      responses:
        '200':
          description: New credential created successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrganizationCredentialDetail"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Organization Credentials

  /organization-credentials/{organizationCredentialId}:
    get:
      summary: Fetch an Organization Credential by ID
      operationId: getOrganizationCredentialById
      description: >-
        This operation fetches an Organization Credential by ID.
      parameters:
        - name: organizationCredentialId
          in: path
          description: Organization Credential ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched the Organization Credential.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrganizationCredentialDetail"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Organization Credentials

    put:
      summary: Update Organization Credentials
      operationId: updateOrganizationCredential
      description: >-
        This operation updates an existing credential.
      parameters:
        - name: organizationCredentialId
          in: path
          description: Organization Credential ID
          required: true
          schema:
            type: string
      requestBody:
          description: "The following fields are required: name, credentialSourceName, credentials; all others are optional"
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrganizationCredentialDetail"
      responses:
        '200':
          description: Update an existing credential successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrganizationCredentialDetail"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Organization Credentials

    delete:
      summary: Delete an Organization Credential by ID
      operationId: deleteOrganizationCredential
      description: >-
        This operation deletes an organization credential by ID.
      parameters:
        - in: path
          name: organizationCredentialId
          description: Organization Credential ID to be deleted
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Organization Credential deleted successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Organization Credentials


  /credential-sources:
    get:
      summary: Fetch a list of all Credential Sources
      operationId: getAllCredentialSources
      description: >-
        This operation fetches a list of all the Credential Sources created for this Customer Integration.
      responses:
        '200':
          description: Credential Sources fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CredentialSources"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Credential Sources

  /credential-sources/{credentialSourceId}:
    get:
      summary: Fetch a Credential Source by ID
      operationId: getCredentialSourceById
      description: >-
        This operation fetches a Credential Source by ID.
      parameters:
        - name: credentialSourceId
          in: path
          description: Credential Source ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched the Credential Source.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CredentialSource"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Credential Sources

  /credential-sources/credential-name/{name}:
    get:
      summary: Fetch a Credential Source by Name
      operationId: getCredentialSourceByName
      description: >-
        This operation fetches a Credential Source by Name.
      parameters:
        - name: name
          in: path
          description: Credential Source Name
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Credential Sources fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CredentialSources"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Credential Sources

  /data-sources:
    get:
      summary: Fetch a list of all Data Sources
      operationId: getAllDataSources
      description: >-
        This operation fetches a list of all the Data Sources that are available to create a new Data Connection for this Customer Integration.
      responses:
        '200':
          description: Data Sources fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataSources"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Sources

  /data-sources/{dataSourceId}:
    get:
      summary: Fetch a Data Source by ID
      operationId: getDataSourceById
      description: >-
        This operation fetches a Data Source by ID.
      parameters:
        - name: dataSourceId
          in: path
          description: Data Source ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched the Data Source.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataSource"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Sources

  /data-sources/{dataSourceId}/data-types:
    get:
      summary: Fetch a list of Data Types
      operationId: getAllDataTypes
      description: >-
        This operation fetches a list of all the Data Types for a Data Source ID.
      parameters:
        - name: dataSourceId
          in: path
          description: Data Source ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Data Types fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataTypes"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Types

  /data-sources/data-types/{dataTypeId}:
    get:
      summary: Fetch a Data Type by ID
      operationId: getDataTypeById
      description: >-
        This operation fetches a Data Type by ID.
      parameters:
        - name: dataTypeId
          in: path
          description: Data Type ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched the Data Type.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataType"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Types

  /data-sources/{dataSourceId}/data-types/{dataTypeId}/data-source-parameters:
    get:
      summary: Fetch all Data Source Parameters
      operationId: getAllDataSourceParameters
      description: >-
        This operation fetches all the Data Source Parameters for the given data source and data type.
      parameters:
        - name: dataSourceId
          in: path
          description: Data Source ID
          required: true
          schema:
            type: string
        - name: dataTypeId
          in: path
          description: Data Type ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched the Data Source Parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DataSourceParameters"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Data Source Parameters

  /question/{questionID}:
    get:
      summary: Fetch question details
      operationId: getQuestionDetails
      description: >-
        This operation fetches the details of a question by the question ID.
      parameters:
        - name: questionID
          in: path
          description: The question ID to fetch a single Question's details
          schema:
            type: string
          required: true
        - name: cleanRoomID
          in: query
          description: The cleanroom ID for where the question is
          schema:
            type: string
          required: false
        - name: version
          in: query
          description: The version of the question
          schema:
            type: integer
          required: false
      responses:
        '200':
          description: Successfully fetched question details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Question'
            application/xml:
              schema:
                $ref: '#/components/schemas/Question'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Questions
    delete:
      summary: Delete question
      operationId: deleteQuestion
      description: >-
        This operation deletes a question given its ID
      parameters:
        - name: questionID
          in: path
          description: The question ID to fetch a single Question's details
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched question details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteQuestionResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/DeleteQuestionResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Questions
    put:
      summary: Update question
      operationId: updateQuestion
      description: >-
        This operation updates a question.
      parameters:
        - name: questionID
          in: path
          description: The question ID of the question to be updated
          schema:
            type: string
          required: true
        - name: cleanRoomID
          in: query
          description: The cleanroom ID for where the question is
          schema:
            type: string
          required: false
      requestBody:
        description: Question details
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Question"
      responses:
        '200':
          description: Successfully updated a question
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionUpdateResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionUpdateResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Questions

  /question:
    post:
      summary: Create question
      operationId: createQuestion
      description: >-
        This operation creates a question.
      parameters:
        - name: cleanRoomID
          in: query
          description: The cleanroom ID for where the question is
          schema:
            type: string
          required: false
      requestBody:
        description: Question details
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Question"
      responses:
        '200':
          description: Successfully created a question
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionCreationResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionCreationResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Questions
  /question/{questionID}/data-types:
    get:
      summary: Fetch question data types
      operationId: getQuestionDataTypes
      description: >-
        This operation fetches the question types by the question ID.
      parameters:
        - name: questionID
          in: path
          description: The question ID to fetch a question data types
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched question data types
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionDataType'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionDataType'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Questions

  /data-connections/import-data-types:
    get:
      summary: Fetch a list of all Import Data Types
      operationId: getAllImportDataTypes
      description: >-
        This operation fetches a list of all the Import Data Types that are available to the organization.
      responses:
        '200':
          description: Import Data Types fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ImportDataTypes"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Import Data Types

  /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}:
    get:
      summary: Get a Cleanroom Flow by ID
      operationId: getCleanroomFlow
      description: >-
        This operation fetches a Cleanroom Flow by its ID, including flow structure (nodes, edges) and version information.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved the Cleanroom Flow.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flows

  /cleanrooms/{cleanroomId}/cleanroom-flows:
    post:
      summary: Create or update a cleanroom flow
      operationId: createOrUpdateCleanroomFlow
      description: >-
        This operation creates or updates a Cleanroom Flow.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateFlowRequest"
      responses:
        '200':
          description: Successfully created or updated the Cleanroom Flow.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateFlowResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/CreateFlowResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flows

  /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/version/{version}:
    put:
      summary: Set Cleanroom Flow Version
      operationId: setCleanroomFlowVersion
      description: >-
        This operation changes a cleanroom flow to use a specific existing flow version. Use this for rollback or switching between flow versions.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
        - name: version
          in: path
          description: The target flow version to set
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: Successfully updated the Cleanroom Flow version.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flows

  /cleanrooms/{cleanroomId}/cleanroom-flows/list:
    post:
      summary: List Cleanroom Flows
      operationId: listCleanroomFlows
      description: >-
        List cleanroom flows for a cleanroom with pagination, filters and search.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ListCleanroomFlowsRequest'
      responses:
        '200':
          description: Successfully fetched cleanroom flows
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCleanroomFlowsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flows

  /cleanrooms/{cleanroomId}/cleanroom-flow-runs/{cleanroomFlowRunId}/resume-flow-run:
    post:
      summary: Resume a Cleanroom Flow Run
      operationId: resumeCleanroomFlowRun
      description: >-
        This operation resumes a Cleanroom Flow Run.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowRunId
          in: path
          description: Cleanroom Flow Run ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ResumeCleanroomFlowRunInput"
      responses:
        '200':
          description: Successfully created or updated the Cleanroom Flow.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResumeCleanroomFlowRunApiResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/ResumeCleanroomFlowRunApiResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/cleanroom-flow-runs/{cleanroomFlowRunId}/replay-flow-run:
    post:
      summary: replay a Cleanroom Flow Run
      operationId: replayCleanroomFlowRun
      description: >-
        This operation replays a Cleanroom Flow Run.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowRunId
          in: path
          description: Cleanroom Flow Run ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReplayCleanroomFlowRunInput"
      responses:
        '200':
          description: Successfully replayed the Cleanroom Flow Run.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReplayCleanroomFlowRunApiResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/ReplayCleanroomFlowRunApiResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/cleanroom-flow-runs/{cleanroomFlowRunId}/status:
    get:
      summary: get the status of a Cleanroom Flow Run
      operationId: getCleanroomFlowRunStatus
      description: >-
        This operation fetches the status of a Cleanroom Flow Run.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowRunId
          in: path
          description: Cleanroom Flow Run ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully fetched the status of the Cleanroom Flow Run.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowRunStatusResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowRunStatusResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs


  /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/cleanroom-flow-runs:
    post:
      summary: Create a Cleanroom Flow Run
      operationId: createOrUpdateCleanroomFlowRun
      description: >-
        This operation creates a Cleanroom Flow Run.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateCleanroomFlowRunInput"
      responses:
        '200':
          description: Successfully created the Cleanroom Flow Run.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlowRunMetadata'
            application/xml:
              schema:
                $ref: '#/components/schemas/FlowRunMetadata'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/flow-run-parameters:
    get:
      summary: Get Flow Run Parameters
      operationId: getCleanroomFlowRunparameters
      description: >-
        This operation gets run parameters for a cleanroom flow
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved the Cleanroom Flow Run parameters.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowRunParametersResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetCleanroomFlowRunParametersResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/assign-datasets:
    post:
      summary: Assign datasets and fields to a cleanroom flow
      operationId: assignCleanroomFlowDatasets
      description: >-
        This operation assigns datasets and field mappings to nodes in a cleanroom flow using dataset and organization names instead of IDs.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/AssignFlowDatasetsRequest"
      responses:
        '200':
          description: Successfully assigned datasets to the cleanroom flow.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssignFlowDatasetsResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/AssignFlowDatasetsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flows

  /cleanrooms/{cleanroomId}/dataset-organizations:
    post:
      summary: Get organization information for datasets by UUID or name
      operationId: getDatasetOrganizations
      description: >-
        This operation retrieves organization information for datasets by UUID or name within a cleanroom context.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID to scope the dataset search
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GetDatasetOrganizationsRequest"
      responses:
        '200':
          description: Successfully retrieved dataset organization information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetDatasetOrganizationsResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/GetDatasetOrganizationsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flows

  /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/node-details:
    get:
      summary: Get comprehensive node details for a cleanroom flow
      operationId: getCleanroomFlowNodeDetails
      description: >-
        This operation retrieves comprehensive details for all nodes in a cleanroom flow including question metadata and flow position information.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved cleanroom flow node details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanroomFlowNodeDetails'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanroomFlowNodeDetails'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flows

  /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/decision-configurations:
    get:
      summary: Get decision configuration for a cleanroom flow
      operationId: getFlowDecisionConfiguration
      description: >-
        Fetches decision configuration for a cleanroom flow. If nodeIdentifier is provided,
        returns configuration for that specific node only. Otherwise returns all decision
        configurations for the flow.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
        - name: nodeIdentifier
          in: query
          description: Optional node identifier (UUID or label) to fetch configuration for a specific node
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successfully retrieved decision configuration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetFlowDecisionConfigurationResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Flow Decision Configurations
    post:
      summary: Create or update decision configuration for a cleanroom flow
      operationId: createOrUpdateFlowDecisionConfiguration
      description: >-
        Creates or updates decision configuration for one or more nodes in a cleanroom flow.
        Each decision node includes conditions, retry configuration, and gated edges.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrUpdateFlowDecisionConfigurationRequest'
      responses:
        '200':
          description: Successfully created or updated decision configuration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateOrUpdateFlowDecisionConfigurationResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Flow Decision Configurations
    delete:
      summary: Delete decision configuration for a cleanroom flow
      operationId: deleteFlowDecisionConfiguration
      description: >-
        Deletes decision configuration for a cleanroom flow. If nodeIdentifier is provided,
        deletes configuration for that specific node only. Otherwise deletes all decision
        configurations for the flow.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanroomFlowId
          in: path
          description: Cleanroom Flow ID
          required: true
          schema:
            type: string
        - name: nodeIdentifier
          in: query
          description: Optional node identifier (UUID or label) to delete configuration for a specific node
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successfully deleted decision configuration.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteFlowDecisionConfigurationResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Flow Decision Configurations

  /cleanrooms/{cleanroomId}/cleanroom-flow-runs/{cleanroomFlowRunId}:
    get:
      summary: Fetch a Cleanroom Flow Run by ID
      operationId: getCleanroomFlowRunByID
      description: >-
        This operation fetches a Cleanroom Flow Run (including metadata) by Cleanroom Flow Run ID and Clean Room ID.
      parameters:
        - name: cleanroomId
          in: path
          description: The Cleanroom ID to which the flow run belongs
          schema:
            type: string
          required: true
        - name: cleanroomFlowRunId
          in: path
          description: The Cleanroom Flow Run ID to fetch a single Cleanroom Flow Run's details
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Flow Run details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlowRunMetadata'
            application/xml:
              schema:
                $ref: '#/components/schemas/FlowRunMetadata'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/cleanroom-flow-runs/{cleanroomFlowRunId}/report:
    get:
      summary: Fetch a Cleanroom Flow Run Report
      operationId: getCleanroomFlowRunReport
      description: >-
        This operation fetches a Cleanroom Flow Run Report (including metadata) by Cleanroom Flow Run ID and Clean Room ID.
      parameters:
        - name: cleanroomId
          in: path
          description: The Cleanroom ID to which the flow run belongs
          schema:
            type: string
          required: true
        - name: cleanroomFlowRunId
          in: path
          description: The Cleanroom Flow Run ID to fetch a single Cleanroom Flow Run's details
          schema:
            type: string
          required: true
        - name: node
          in: query
          description: Identifier of the node in the flow. You can pass either the node’s UUID (recommended), or the node’s Question Display ID–based label (for example, Q-004368). If the same question is used multiple times as different nodes in the same flow, the label is suffixed with a number (for example, Q-004368_1, Q-004368_2). In those cases, using the UUID is the safest way to avoid ambiguity.
          schema:
            type: string
          required: true
        - name: limit
          in: query
          description: The number of Cleanroom Flow Run results data returned per page - default is 500
          schema:
            type: integer
            default: 500
          required: false
        - name: offset
          in: query
          description: The offset - default is 0
          schema:
            type: integer
            default: 0
          required: false
      responses:
        '200':
          description: Successfully fetched Cleanroom Flow Run Result Data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionRunResultData'
            application/xml:
              schema:
                $ref: '#/components/schemas/QuestionRunResultData'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/cleanroom-flow-runs/{cleanroomFlowRunId}/output-nodes:
    get:
      summary: Fetch output nodes for a Cleanroom Flow Run Report
      operationId: getCleanroomFlowRunOutputNodes
      description: >-
        This operation fetches the output nodes for a cleanroom flow run. It is the canonical way to list all nodes in the run and retrieve their UUIDs (the recommended identifier). Note: The label field in this response represents the node's display name (e.g., "Brand Awareness") and cannot be used as a node identifier. API clients should use the returned UUID for all node-specific operations to ensure uniqueness and stability.
      parameters:
        - name: cleanroomId
          in: path
          description: The Cleanroom ID to which the flow run belongs
          schema:
            type: string
          required: true
        - name: cleanroomFlowRunId
          in: path
          description: The Cleanroom Flow Run ID to fetch a single Cleanroom Flow Run's details
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully fetched Cleanroom Flow Run details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanroomFlowRunOutputNodes'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanroomFlowRunOutputNodes'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/cleanroom-flow-runs/{cleanroomFlowRunId}/node/{nodeIdentifier}/download/{fileName}:
    get:
      summary: Download output file for a Cleanroom Flow Run node
      operationId: getCleanroomFlowRunNodeOutputFile
      description: >-
        This operation downloads an output file for a specific node in a cleanroom flow run
      parameters:
        - name: cleanroomId
          in: path
          description: The Cleanroom ID to which the flow run belongs
          schema:
            type: string
          required: true
        - name: cleanroomFlowRunId
          in: path
          description: The Cleanroom Flow Run ID
          schema:
            type: string
          required: true
        - name: nodeIdentifier
          in: path
          description: Identifier of the node in the flow. You can pass either the node’s UUID (recommended), or the node’s Question Display ID–based label (for example, Q-004368). If the same question is used multiple times as different nodes in the same flow, the label is suffixed with a number (for example, Q-004368_1, Q-004368_2). In those cases, using the UUID is the safest way to avoid ambiguity.
          schema:
            type: string
          required: true
        - name: fileName
          in: path
          description: The name of the output file to download
          schema:
            type: string
          required: true
      responses:
        '200':
          description: Successfully downloaded the output file
          content:
            application/json:
              schema:
                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Flow Runs

  /cleanrooms/{cleanroomId}/create-cleanroom-execution-instance:
    post:
      summary: Create Cleanroom Execution Instance
      operationId: createCleanRoomExecutionTemplateInstance
      description: >-
        This operation creates clean room execution template instance.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CleanRoomExecutionInstanceInput"
      responses:
        '200':
          description: Successfully created measurement report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeasurementExecutionTemplateResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/MeasurementExecutionTemplateResponse'

        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom

  /cleanrooms/{cleanroomId}/cleanroom-execution-instance/{cleanRoomMeasurementExecutionInstanceId}:
    get:
      summary: Get status of clean room measurement execution instance
      operationId: getCleanRoomMeasurementExecutionInstance
      description: >-
        This operation gets the status of clean room measurement execution instance.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
              type: string
        - name: cleanRoomMeasurementExecutionInstanceId
          in: path
          description: Clean Room Measurement Execution Instance ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully got the status clean room measurement execution instance.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CleanRoomMeasurementExecutionInstanceStatusResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/CleanRoomMeasurementExecutionInstanceStatusResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom

    post:
      summary: Cancels a clean room measurement execution instance
      operationId: cancelCleanRoomMeasurementExecutionInstance
      description: >-
        This operation cancels a clean room measurement execution instance.
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
        - name: cleanRoomMeasurementExecutionInstanceId
          in: path
          description: Clean Room Measurement Execution Instance ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Successfully got the status clean room measurement execution instance.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom

  /cleanrooms/{cleanroomId}/exports/jobs:
    get:
        summary: Fetch a list of all Cleanroom Exports
        operationId: getAllDataExportJobs
        description: >-
            This operation fetches a list of all the Cleanroom Exports that are available to the organization.
        parameters:
            - name: cleanroomId
              in: path
              description: Cleanroom ID
              required: true
              schema:
                type: string
        responses:
            '200':
              description: Cleanroom Exports fetched successfully.
              content:
                application/json:
                  schema:
                    $ref: "#/components/schemas/DataExportJobs"
            '400':
              $ref: '#/components/responses/BadRequest'
            '401':
              $ref: '#/components/responses/Unauthorized'
            '404':
              $ref: '#/components/responses/NotFound'
            '500':
              $ref: '#/components/responses/InternalServerError'
        tags:
            - Cleanroom Exports
    post:
      summary: Create cleanroom export job
      operationId: createDataExportJobs
      description: >-
        This operation creates new data export jobs
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
      requestBody:
        description: Export Jobs details
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateDataExportJobRequest"
      responses:
        '200':
          description: Cleanroom Exports fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreateDataExportJobResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Exports

  /cleanrooms/{cleanroomId}/destinations:
    post:
      summary: Provision destinations to a cleanroom
      operationId: provisionCleanroomDestinations
      description: >-
        This operation provisions a destination to a cleanroom
      parameters:
        - name: cleanroomId
          in: path
          description: Cleanroom ID
          required: true
          schema:
            type: string
      requestBody:
        description: Request object to provision destinations to a cleanroom
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProvisionCleanroomDestinationRequest"
      responses:
        '200':
          description: Cleanroom Destination Provisioned Successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProvisionCleanroomDestinationResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Cleanroom Destinations

  /exports/jobs/{exportJobId}/runs:
    get:
      summary: Fetch a list of all Cleanroom Exports
      operationId: getDataExportJobRuns
      description: >-
        This operation fetches the runs for a data export job
      parameters:
        - name: exportJobId
          in: path
          description: Export Job ID
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cleanroom Export Job runs fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListDataExportJobRunsResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
                  - Cleanroom Exports

  /destinations/partners:
    get:
      summary: List destination partners
      operationId: listDestinationPartners
      description: >-
        This operation fetches the list of destination partners available.
      responses:
        '200':
          description: Destination partners fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListDestinationPartnersResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Destinations

  /destinations:
    get:
      summary: List destination connections
      operationId: listDestinations
      description: >-
        This operation fetches a list destination connections (partner accounts) for the organisation.
      parameters:
        - name: limit
          in: query
          description: The number of destination connections returned per page - default is 30, minimum is 1, maximum is 100
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 30
        - name: offset
          in: query
          description: The offset - default is 0, minimum is 0
          schema:
            type: integer
            minimum: 0
            default: 0
      responses:
        '200':
          description: Destination connections fetched successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListDestinationsResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Destinations

  /destinations/{partnerAccountId}:
    delete:
      summary: Delete destination connection
      operationId: deleteDestinationConnection
      description: >-
        Deletes a destination connection (partner account) for the organization.
      parameters:
        - name: partnerAccountId
          in: path
          description: Partner Account ID for the destination connection to be deleted
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Destination connection deleted successfully.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeleteResponse"
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
        - Destinations

components:
  responses:
    BadRequest:
      description: Bad Request - Incorrect syntax or request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ReturnObject'
        application/xml:
          schema:
            $ref: '#/components/schemas/ReturnObject'
    NotFound:
      description: The specified resource was not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ReturnObject'
        application/xml:
          schema:
            $ref: '#/components/schemas/ReturnObject'
    Unauthorized:
      description: Authorization information was missing or invalid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ReturnObject'
        application/xml:
          schema:
            $ref: '#/components/schemas/ReturnObject'
    Forbidden:
      description: This action is not allowed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ReturnObject'
        application/xml:
          schema:
            $ref: '#/components/schemas/ReturnObject'
    ResourceConflict:
      description: Conflict with the current state of the resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ReturnObject'
        application/xml:
          schema:
            $ref: '#/components/schemas/ReturnObject'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ReturnObject'
        application/xml:
          schema:
            $ref: '#/components/schemas/ReturnObject'
    QuestionRunStatusUpdate:
      description: Successfully sent the updated Cleanroom Question Run status
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ReturnObject'
        application/xml:
          schema:
            $ref: '#/components/schemas/ReturnObject'

  schemas:
    ProvisionCleanroomDestinationRequest:
      type: object
      properties:
        destinations:
          type: array
          items:
            type: string

    ProvisionCleanroomDestinationResponse:
      type: array
      items:
        $ref: '#/components/schemas/ActivationChannelProvision'

    ActivationChannelProvision:
      type: object
      properties:
        timeAudit:
          $ref: '#/components/schemas/TimeAudit'
        userAudit:
          $ref: '#/components/schemas/UserAudit'
        cleanroomId:
          type: string
        partnerAccountId:
          type: string
        channelStatus:
          type: string

    CreateDataExportJobRequest:
      type: object
      properties:
        cleanroomQuestionId:
          type: string
        partnerAccountIds:
          type: array
          items:
            type: string
        exportParameters:
          type: array
          items:
            $ref: '#/components/schemas/ExportJobParameter'
        cleanroomDatasetId:
          type: string

    ExportJobParameter:
      type: object
      properties:
        name:
          type: string
        value:
          type: string

    CreateDataExportJobResponse:
      type: array
      items:
        type: string

    ListDataExportJobRunsResponse:
      type: object
      properties:
        organization:
          type: string
        question:
          type: string
        jobRunsByDate:
          type: array
          items:
            $ref: '#/components/schemas/ExportJobRunByDate'
        exportDetailParameters:
          type: array
          items:
            $ref: '#/components/schemas/ExportJobParameter'


    ExportJobRunByDate:
      type: object
      properties:
        date:
          type: string
        organization:
          type: string
        jobRuns:
          type: array
          items:
            $ref: '#/components/schemas/ExportJobRun'

    ExportJobRun:
      type: object
      properties:
        id:
          type: string
        jobId:
          type: string
        status:
          $ref: "#/components/schemas/JobRunStatus"
        submitTime:
          type: string
          format: date-time
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        totalRecords:
          type: integer
        consentedRecords:
          type: integer
        cumulativeRecords:
          type: integer
        sourceJobRunID:
          type: string
        jobRunType:
          $ref: "#/components/schemas/JobRunType"
        details:
          $ref: "#/components/schemas/JobDetails"
        errorMessage:
          type: string

    JobRunStatus:
      type: string
      enum:
        - UNKNOWN_JOB_RUN_STATUS
        - QUEUED
        - PROCESSING
        - COMPLETE
        - FAILED
        - PARTIALLY_FAILED
        - THRESHOLD_WARNING
        - NO_NEW_USERS

    JobRunType:
      type: string
      enum:
        - UNKNOWN_JOB_RUN_TYPE
        - FULL_REFRESH
        - INCREMENTAL

    JobDetails:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        jobDetailParameters:
          type: array
          items:
            $ref: '#/components/schemas/JobDetailParameter'

    JobDetailParameter:
      type: object
      properties:
        label:
          type: string
        value:
          type: string


    DataExportJobs:
      type: array
      items:
        $ref: '#/components/schemas/DataExportJob'

    DataExportJob:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        organizationID:
          type: string
        dataExportJobType:
          type: string
        status:
          $ref: '#/components/schemas/DataOutJobStatus'
        partnerAccount:
          $ref: '#/components/schemas/PartnerAccount'
        jobType:
          $ref: '#/components/schemas/PicanmixType'
        timeAudit:
          $ref: '#/components/schemas/TimeAudit'
        userAudit:
          $ref: '#/components/schemas/UserAudit'
        questionID:
          type: string
        questionName:
          type: string
        questionDisplayName:
          type: string
        jobLastRunTime:
          type: string
          format: date-time
        partnerAccountCrChannelStatus:
          type: string

    PartnerAccount:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        organizationID:
          type: string
        partner:
          $ref: '#/components/schemas/Partner'
        credential:
          $ref: '#/components/schemas/PrimageOrganizationCredential'
        timeAudit:
          $ref: '#/components/schemas/TimeAudit'
        userAudit:
          $ref: '#/components/schemas/UserAudit'
        jobCount:
          type: array
          items:
            $ref: '#/components/schemas/JobCount'
        latestJobRunStatusCount:
          $ref: '#/components/schemas/LatestJobRunStatusCount'
        configStatus:
          $ref: '#/components/schemas/ConfigStatus'
        errorMessage:
          type: string
        publicKey:
          type: string

    ConfigStatus:
      type: string
      enum:
        - UNKNOWN_CONFIG_STATUS
        - CONFIG_PENDING
        - CONFIG_CONFIGURED
        - CONFIG_FAILED
        - CONFIG_AVAILABLE

    LatestJobRunStatusCount:
      type: object
      properties:
        numSuccess:
          type: integer
          format: int32
          minimum: 0
        numProcessing:
          type: integer
          format: int32
          minimum: 0
        numThresholdWarning:
          type: integer
          format: int32
          minimum: 0
        numPartiallyFailed:
          type: integer
          format: int32
          minimum: 0
        numFailed:
          type: integer
          format: int32
          minimum: 0
        numQueued:
          type: integer
          format: int32
          minimum: 0

    JobCount:
      type: object
      properties:
        jobType:
          type: string
        count:
          type: integer
          format: int32
          minimum: 0

    PrimageOrganizationCredential:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        credentials:
          type: array
          items:
            $ref: '#/components/schemas/PrimageCredential'

    PrimageCredential:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        value:
          type: string

    Partner:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        displayName:
          type: string
        logoUrl:
          type: string
        credentialSourceName:
          type: string
        partnerConfigArray:
          $ref: '#/components/schemas/PartnerConfigs'
        timeAudit:
          $ref: '#/components/schemas/TimeAudit'
        userAudit:
          $ref: '#/components/schemas/UserAudit'
        type:
          $ref: '#/components/schemas/PicanmixType'
        credentialSources:
          type: array
          items:
            type: string
        partnerConfigMap:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/PartnerConfigs'

    ListDestinationPartnersResponse:
      type: object
      properties:
        partners:
          type: array
          items:
            $ref: '#/components/schemas/Partner'

    ListDestinationsResponse:
      type: object
      properties:
        partnerAccounts:
          type: array
          items:
            $ref: '#/components/schemas/PartnerAccount'
        total:
          type: integer
          description: Total count of destination connections
        limit:
          type: integer
          description: The number of destination connections returned per page
        offset:
          type: integer
          description: The offset used for pagination

    PartnerConfigs:
      type: array
      items:
        $ref: '#/components/schemas/PartnerConfig'

    PartnerConfig:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        index:
          type: integer
          format: int32
        type:
          type: string
        encrypted:
          type: boolean


    DataOutJobStatus:
      type: string
      enum:
        - UNKNOWN_JOB_STATUS
        - ACTIVE
        - PAUSED

    PicanmixType:
      type: string
      enum:
        - UNKNOWN_PICANMIX_TYPE
        - USER_LIST
        - OFFLINE_CONVERSIONS
        - EXPORTS
        - QUESTION_USER_LIST


    CreateFlowResponse:
      type: object
      properties:
        flowID:
          type: string
          description: The ID of the created flow
        success:
          type: boolean
          description: Whether the flow creation was successful
        message:
          type: string
          description: Additional information about the flow creation

    CreateFlowRequest:
      type: object
      required:
        - flowName
        - nodes
      properties:
        flowName:
          type: string
          description: The name of the flow.
        description:
          type: string
          description: A description of the flow.
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/APINode'
        createNewVersion:
          type: boolean
          description: Whether to create a new version of the flow
          default: false
        versionMessage:
          type: string
          description: Version description provided by user

    GetFlowDecisionConfigurationResponse:
      type: object
      properties:
        decisionNodes:
          type: array
          items:
            $ref: '#/components/schemas/DecisionNodeResponse'

    CreateOrUpdateFlowDecisionConfigurationRequest:
      type: object
      required:
        - decisionNodes
      properties:
        decisionNodes:
          type: array
          items:
            $ref: '#/components/schemas/DecisionNodeInput'

    CreateOrUpdateFlowDecisionConfigurationResponse:
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
        decisionNodes:
          type: array
          items:
            $ref: '#/components/schemas/DecisionNodeInput'

    DeleteFlowDecisionConfigurationResponse:
      type: object
      properties:
        success:
          type: boolean
        message:
          type: string
        deletedNodesCount:
          type: integer

    DecisionNodeResponse:
      type: object
      properties:
        nodeID:
          type: string
        nodeLabel:
          type: string
        conditionLogic:
          type: string
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/DecisionConditionResponse'
        retryConfig:
          $ref: '#/components/schemas/RetryConfigResponse'
        gatedEdges:
          $ref: '#/components/schemas/GatedEdgesResponse'

    DecisionConditionResponse:
      type: object
      properties:
        id:
          type: string
        sourceNodeID:
          type: string
        fieldName:
          type: string
        operator:
          type: string
        expectedValue:
          type: string
        expectedValueEnd:
          type: string
        expectedValues:
          type: array
          items:
            type: string
        aggregation:
          type: string
        conditionOrder:
          type: integer

    RetryConfigResponse:
      type: object
      properties:
        maxRetries:
          type: integer
        retryNodeIDs:
          type: array
          items:
            type: string
        retryFromLevel:
          type: integer
        configurations:
          type: array
          items:
            $ref: '#/components/schemas/NodeConfigurationResponse'

    NodeConfigurationResponse:
      type: object
      properties:
        id:
          type: string
        nodeID:
          type: string
        name:
          type: string
        configIndex:
          type: integer
        parameters:
          type: object
          additionalProperties:
            type: string

    GatedEdgesResponse:
      type: object
      properties:
        truePath:
          type: array
          items:
            $ref: '#/components/schemas/EdgeReferenceResponse'

    EdgeReferenceResponse:
      type: object
      properties:
        edgeID:
          type: string
        parentNodeID:
          type: string
        childNodeID:
          type: string

    DecisionNodeInput:
      type: object
      required:
        - nodeIdentifier
      properties:
        nodeIdentifier:
          type: string
          description: Node UUID or label
        conditionLogic:
          type: string
          description: Logic for combining conditions (AND only supported currently)
          default: AND
        conditions:
          type: array
          items:
            $ref: '#/components/schemas/DecisionConditionInput'
        retryConfig:
          $ref: '#/components/schemas/RetryConfigInput'
        gatedEdges:
          $ref: '#/components/schemas/GatedEdgesInput'

    DecisionConditionInput:
      type: object
      required:
        - fieldName
        - operator
        - aggregation
      properties:
        id:
          type: string
          description: Condition ID (omit for create, include for update)
        fieldName:
          type: string
        operator:
          type: string
        expectedValue:
          type: string
        expectedValueEnd:
          type: string
        expectedValues:
          type: array
          items:
            type: string
        aggregation:
          type: string
          default: FIRST
        conditionOrder:
          type: integer
          default: 0

    RetryConfigInput:
      type: object
      properties:
        maxRetries:
          type: integer
          default: 0
        retryNodeIdentifiers:
          type: array
          items:
            type: string
          description: Node UUIDs or labels for retry
        configurations:
          type: array
          items:
            $ref: '#/components/schemas/NodeConfigurationInput'

    NodeConfigurationInput:
      type: object
      properties:
        id:
          type: string
          description: Configuration ID (omit for create, include for update)
        name:
          type: string
        configIndex:
          type: integer
        parameters:
          type: object
          additionalProperties:
            type: string

    GatedEdgesInput:
      type: object
      properties:
        truePath:
          type: array
          items:
            $ref: '#/components/schemas/EdgeReferenceInput'
        falsePath:
          type: array
          items:
            $ref: '#/components/schemas/EdgeReferenceInput'

    EdgeReferenceInput:
      type: object
      required:
        - parentNodeIdentifier
        - childNodeIdentifier
      properties:
        parentNodeIdentifier:
          type: string
          description: Parent node UUID or label
        childNodeIdentifier:
          type: string
          description: Child node UUID or label

    ListCleanroomFlowsRequest:
      type: object
      properties:
        filters:
          type: array
          items:
            type: object
        sortBy:
          type: object
          additionalProperties: true
        limit:
          type: integer
          format: int32
          default: 0
        offset:
          type: integer
          format: int32
          default: 0
        search:
          type: string

    ListCleanroomFlowsResponse:
      type: object
      properties:
        cleanRoomFlows:
          type: array
          items:
            $ref: '#/components/schemas/ListItemCleanroomFlow'
        count:
          type: integer
          format: int32

    GetCleanroomFlowResponse:
      type: object
      description: Response object containing the cleanroom flow details
      properties:
        cleanRoomFlow:
          $ref: '#/components/schemas/ListItemCleanroomFlow'

    ListItemCleanroomFlow:
      type: object
      properties:
        ID:
          type: string
        displayID:
          type: string
        cleanRoomID:
          type: string
        flowID:
          type: string
        status:
          type: string
        stage:
          type: string
        timeAudit:
          $ref: '#/components/schemas/TimeAudit'
        userAudit:
          $ref: '#/components/schemas/NestedUserAudit'
        flow:
          $ref: '#/components/schemas/ListItemFlow'
        runCount:
          type: integer
          format: int32
        CryptoKeyID:
          type: string
        flowVersion:
          type: integer
          format: int32
        isProvisioned:
          type: boolean
        billableConfigID:
          type: string
        isBillable:
          type: boolean

    ListItemFlow:
      type: object
      properties:
        ID:
          type: string
        displayID:
          type: string
        name:
          type: string
        description:
          type: string
        organizationID:
          type: string
        status:
          type: string
        timeAudit:
          $ref: '#/components/schemas/TimeAudit'
        userAudit:
          $ref: '#/components/schemas/NestedUserAudit'
        nodes:
          type: array
          items:
            type: object
        edges:
          type: array
          items:
            type: object
        version:
          type: integer
          format: int32

    NestedUserAudit:
      type: object
      properties:
        createdByUser:
          $ref: '#/components/schemas/UserRefInfo'
        updatedByUser:
          $ref: '#/components/schemas/UserRefInfo'

    UserRefInfo:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        email:
          type: string

    APINode:
      type: object
      required:
        - nodeIdentifier
      properties:
        nodeIdentifier:
          type: string
          description: Unique identifier for the node within the flow.
        edges:
          type: array
          description: Edges connecting this node to other nodes with dataset mappings
          items:
            $ref: '#/components/schemas/APIEdge'
        settings:
          $ref: '#/components/schemas/NodeSettings'
        tags:
          type: string
          description: Comma-separated list of branch tags for the node

    APIEdge:
      type: object
      required:
        - datasetMacro
        - parentID
      properties:
        datasetMacro:
          type: string
          description: The dataset macro/type identifier
        parentID:
          type: string
          description: The nodeIdentifier of the parent node
        fieldMappings:
          type: array
          description: Field mappings between parent and current node
          items:
            $ref: '#/components/schemas/APIFieldMapping'

    APIFieldMapping:
      type: object
      required:
        - datasetFieldName
        - parentFieldName
      properties:
        datasetFieldName:
          type: string
          description: The field name in the dataset
        parentFieldName:
          type: string
          description: The field name from the parent node

    NodeSettings:
      type: object
      properties:
        computeCapacity:
          type: string
          description: Compute capacity for the node
        access:
          type: array
          items:
            type: string
          description: List of organization IDs that have access to this node.

    AssignFlowDatasetsRequest:
      type: object
      required:
        - nodeDatasets
      properties:
        nodeDatasets:
          type: array
          description: Dataset assignments for each node
          items:
            $ref: '#/components/schemas/NodeDatasetAssignment'

    AssignFlowDatasetsResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Success indicator
        message:
          type: string
          description: Status message
        assignedDatasets:
          type: array
          description: Assigned datasets with resolved information
          items:
            $ref: '#/components/schemas/AssignedDatasetResult'

    NodeDatasetAssignment:
      type: object
      properties:
        nodeIdentifier:
          type: string
          description: Node display ID or name
        datasets:
          type: array
          description: Dataset assignments for this node
          items:
            $ref: '#/components/schemas/DatasetAssignment'

    DatasetAssignment:
      type: object
      properties:
        datasetName:
          type: string
          description: Dataset name (will be resolved to ID)
        datasetMacro:
          type: string
          description: Dataset macro/type
        organizationName:
          type: string
          description: Organization name from stakeholders list (will be resolved to ownership)
        fieldMappings:
          type: array
          description: Field mappings using field names
          items:
            $ref: '#/components/schemas/FieldMapping'

    FieldMapping:
      type: object
      properties:
        questionFieldName:
          type: string
          description: Question field name in the node
        datasetFieldName:
          type: string
          description: Dataset field name to map to

    AssignedDatasetResult:
      type: object
      properties:
        nodeIdentifier:
          type: string
          description: Node display ID
        datasetName:
          type: string
          description: Dataset name that was assigned
        datasetID:
          type: string
          description: Dataset ID (resolved)
        organizationName:
          type: string
          description: Organization name from request
        ownership:
          $ref: '#/components/schemas/DatasetOwnership'
          description: Resolved ownership (OWNER, PARTNER)
        datasetMacro:
          type: string
          description: Dataset macro/type
        status:
          type: string
          description: Assignment status

    DatasetOwnership:
      type: string
      enum:
        - OWNER
        - PARTNER
      description: Dataset ownership type

    GetDatasetOrganizationsRequest:
      type: object
      required:
        - datasetIdentifiers
      properties:
        datasetIdentifiers:
          type: array
          description: List of dataset identifiers (UUIDs or names)
          items:
            type: string

    GetDatasetOrganizationsResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Success indicator
        message:
          type: string
          description: Status message
        datasetOrganizations:
          type: array
          description: Dataset organization information
          items:
            $ref: '#/components/schemas/DatasetOrganizationInfo'

    DatasetOrganizationInfo:
      type: object
      properties:
        requestedIdentifier:
          type: string
          description: Dataset identifier from request (UUID or name)
        datasetID:
          type: string
          description: Dataset ID (resolved UUID)
        datasetName:
          type: string
          description: Dataset name
        organizationID:
          type: string
          description: Organization ID that owns the dataset
        organizationName:
          type: string
          description: Organization name that owns the dataset
        found:
          type: boolean
          description: Whether the dataset was found
        errorMessage:
          type: string
          description: Error message if not found or inaccessible

    CreateCleanroomFlowRunInput:
      type: object
      properties:
        name:
          type: string
          description: Name of the flow run
        pauseLevelID:
          type: string
          description: Optional pause level ID at which to pause execution
        nodes:
          type: array
          description: Nodes with parameters
          items:
            $ref: '#/components/schemas/NodeParametersEntry'
        branches:
          type: string
          description: Branch names to filter flow execution (comma-separated)
        excludeNodesWithoutTags:
          type: boolean
          description: Exclude nodes without tags when branch filtering is enabled
        ignoreParentChildRule:
          type: boolean
          description: Ignore parent-child dependency rules for normal flow runs
        includeMismatchingTaggedNodes:
          type: boolean
          description: Include unmatched nodes when branch filtering is enabled
        datasetAssignments:
          type: array
          description: Dataset assignments for each node
          items:
            $ref: '#/components/schemas/NodeDatasetAssignment'

    NodeParametersEntry:
      type: object
      properties:
        nodeIdentifier:
          type: string
          description: Node identifier
        parameters:
          type: object
          description: Parameters for this node
          additionalProperties:
            type: string



    FlowRunMetadata:
      description: Model containing the Cleanroom Flow Run Metadata
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
        submittedAt:
          type: string
          format: date-time
        executedAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
        flowRunParameters:
          type: array
          items:
            $ref: '#/components/schemas/FlowRunParameter'
        runMessage:
          type: string

    GetCleanroomFlowRunParametersResponse:
      type: object
      properties:
        flowRunParameters:
          type: array
          items:
            $ref: '#/components/schemas/FlowRunMetadataParameter'

    FlowRunParameter:
      type: object
      properties:
        nodeId:
          type: string
        parameters:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/FlowRunParameterValue'


    FlowRunParameterValue:
      type: object
      properties:
        value:
          type: string
        parameterType:
          $ref: '#/components/schemas/ParameterType'

    ParameterType:
      type: string
      enum: [RUN_TIME_PARAMETER, PARTITION_PARAMETER, PARAMETER_UNKNOWN]


    FlowRunMetadataParameter:
      type: object
      properties:
        nodeId:
          type: string
        nodeQuestionName:
          type: string
        parameterMetadataList:
          type: array
          items:
            $ref: '#/components/schemas/ParameterInfo'

    ParameterInfo:
      type: object
      properties:
        Id:
          type: string
        name:
          type: string
        displayName:
          type: string
        index:
          type: integer
        fieldType:
          $ref: '#/components/schemas/UnhygienixFieldType'
        parameterType:
          $ref: '#/components/schemas/ParameterType'

    UnhygienixFieldType:
      type: string
      enum: [FIELD_TYPE_UNKNOWN, INTEGER, STRING, DATE, TIMESTAMP, DOUBLE, BIGINT, BOOLEAN, DECIMAL, LONG]

    ResumeCleanroomFlowRunInput:
      type: object
      properties:
        pauseLevelID:
          type: string
          description: Optional pause level ID at which to pause execution

    ResumeCleanroomFlowRunApiResponse:
      type: object
      properties:
        success:
          type: boolean

    ReplayCleanroomFlowRunInput:
      type: object
      properties:
        startLevelID:
          type: string
          description: Start level ID for the replay
        pauseLevelID:
          type: string
          description: Optional pause level ID at which to pause execution
        nodes:
          type: array
          description: Nodes with parameters
          items:
            $ref: '#/components/schemas/NodeParametersEntry'
        branches:
          type: string
          description: Branch names to filter flow execution (comma-separated)
        excludeNodesWithoutTags:
          type: boolean
          description: Exclude nodes without tags when branch filtering is enabled
        includeMismatchingTaggedNodes:
          type: boolean
          description: Include unmatched nodes when branch filtering is enabled
        datasetAssignments:
          type: array
          description: Dataset assignments for each node
          items:
            $ref: '#/components/schemas/NodeDatasetAssignment'
        name:
          type: string
          description: Optional name for the replay

    CleanRoomExecutionInstanceInput:
      type: object
      properties:
        executionInstanceName:
          type: string
        cleanRoomExecutionTemplateId:
          type: string
        codeVersion:
          type: string
        datasets:
          type: array
          items:
            $ref: '#/components/schemas/Datasets'
        modelsToRun:
          type: array
          items:
            type: string
        outputType:
          type: string
        runtimeParameters:
          $ref: '#/components/schemas/CleanroomQuestionRunPartitionParameters'

    MeasurementExecutionTemplateResponse:
      type: object
      properties:
        success:
          type: boolean
        cleanRoomExecutionInstanceId:
          type: string
        cleanRoomExecutionTemplateId:
          type: string

    CleanRoomMeasurementExecutionInstanceStatusResponse:
      type: object
      properties:
        Id:
          type: string
        status:
          type: string
        startTime:
          type: string
        endTime:
          type: string
        name:
          type: string
        detailedStatusReport:
          type: string
        cleanRoomExecutionTemplateID:
          type: string
        outputs:
          $ref: '#/components/schemas/ExecutionInstanceOutputs'

    ExecutionInstanceOutputs:
      description: Clean Room Measurement Execution Instance Outputs
      type: array
      items:
        type: object
        properties:
          name:
            type: string
            description: Category of the output
          status:
            type: string
            description: Status of the specific run
          message:
            type: string
            description: Detailed error message if any
          href:
            type: string
            description: The api to be invoked to get output details
          method:
            type: string
            description: Http method


    ReplayCleanroomFlowRunApiResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Success indicator
        cleanRoomFlowRunID:
          type: string
          description: The new flow run ID created for the replay

    GetCleanroomFlowRunStatusResponse:
      type: object
      properties:
        status:
          type: string


    CleanroomFlowRunReport:
      type: object
      properties:
        title:
          type: string
        metadata:
          $ref: '#/components/schemas/CleanroomFlowRunReportMetadata'
        recordStats:
          type: array
          items:
            $ref: '#/components/schemas/CleanroomFlowRunRecordStat'



    CleanroomFlowRunReportMetadata:
      type: object
      properties:
        facts:
          type: array
          items:
            type: string
        dimensions:
          type: array
          items:
            type: string

    CleanroomFlowRunRecordStat:
      type: object
      properties:
        dimensions:
          type: array
          items:
            $ref: '#/components/schemas/CleanroomFlowRunRecordStatDimension'
        records:
          type: array
          items:
            $ref: '#/components/schemas/CleanroomFlowRunReportStatRecord'

    CleanroomFlowRunRecordStatDimension:
      type: object
      properties:
        key:
          type: string
        value:
          type: string

    CleanroomFlowRunReportStatRecord:
      type: object
      properties:
        key:
          type: string
        value:
          type: string

    CleanroomFlowRunOutputNodes:
      type: array
      items:
        $ref: '#/components/schemas/GetCleanroomFlowRunOutputNodeResponseObject'

    GetCleanroomFlowRunOutputNodeResponseObject:
      type: object
      properties:
        node:
          $ref: '#/components/schemas/CleanroomFlowRunOutputNode'
        runStatus:
          type: string
        runID:
          type: string

    CleanroomFlowRunOutputNode:
      type: object
      properties:
        id:
          type: string
        flowId:
          type: string
        label:
          type: string
        nodeType:
          type: string
        referenceId:
          type: string
        positionX:
          type: integer
        positionY:
          type: integer
        timeAudit:
          $ref: '#/components/schemas/TimeAudit'
        userAudit:
          $ref: '#/components/schemas/UserAudit'
        level:
          type: integer
        title:
          type: string
        cleanroomQuestionId:
          type: string


    UpdateCleanroomDatasetPartnerAssignmentParameters:
      type: object
      properties:
        datasetId:
          type: string
        partnerCanAssign:
          type: boolean

    UpdateCleanroomDatasetPartnerAssignmentRequest:
      type: array
      items:
        $ref: "#/components/schemas/UpdateCleanroomDatasetPartnerAssignmentParameters"


    UpdateCleanroomDatasetPartnerAssignmentResponse:
      type: object
      properties:
        success:
          type: boolean

    CleanRoomType:
      description: Model containing Cleanroom Type
      properties:
        id:
          type: string
        name:
          type: string
        displayName:
          type: string
        listQuestionSupport:
          type: boolean
        analyticalQuestionSupport:
          type: boolean
        wallGarden:
          type: boolean
    CleanRoomTypes:
      type: array
      items:
        $ref: "#/components/schemas/CleanRoomType"
    CleanRoom:
      description: Model containing the Cleanroom details
      properties:
        id:
          type: string
        displayId:
          type: string
        name:
          type: string
        description:
          type: string
        ownerOrganization:
          type: string
        partners:
          type: array
          items:
            type: string
        startAt:
          type: string
        endAt:
          type: string
        questionsCount:
          type: integer
        status:
          type: string
        cleanRoomParameters:
          type: object
          additionalProperties:
            type: string
        timeAudit:
          $ref: "#/components/schemas/TimeAudit"
        cleanRoomTypeId:
          type: string
    CleanRoomQuestion:
      description: Model containing the Cleanroom Question details
      properties:
        id:
          type: string
        name:
          type: string
        displayId:
          type: string
        questionType:
          type: string
        category:
          type: string
        createdOn:
          type: string
          format: date-time
        status:
          type: string
        dataTypes:
          type: object
          additionalProperties:
            type: string
            # example:
            #   dataImportType: CRM
            #   macro: CRM
        parameters:
          type: object
          additionalProperties:
            type: string
            # example:
            #   name: Age
            #   displayName: Age
        dimension:
          type: object
          additionalProperties:
            type: string
            # example:
            #   name: Month
            #   displayName: Month
        metrics:
          type: object
          additionalProperties:
            type: string
            # example:
            #   name: Users
            #   displayName: Users
        cleanroomId:
          type: string
        ownerOrganizationId:
          type: string
        customerQueryTemplate:
          type: string
        questionId:
          type: string
    QuestionRunStatus:
      description: Model containing the Cleanroom Question Run status details
      required:
        - id
        - status
      properties:
        id:
          type: string
        status:
          type: string
        postRunDetails:
          type: object
          additionalProperties:
            type: string
          example:
            detail1: Value1
            detail2: Value2
    QuestionRunMetadata:
      description: Model containing the Cleanroom Question Run Metadata
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
        submittedAt:
          type: string
          format: date-time
        executedAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
        parameters:
          type: object
          additionalProperties:
            type: string
          example:
            parameter1: Value1
            parameter2: Value2
        partitionParameters:
          $ref: '#/components/schemas/CleanroomQuestionRunPartitionParameters'
        runMetadata:
          type: object
          properties:
            dataOutLocation:
              type: string
            datasetParameters:
              type: array
              items:
                properties:
                  dataSetId:
                    type: string
                  dataSetName:
                    type: string
                  dataInLocation:
                    type: string
                  hashedColumns:
                    type: array
                    items:
                      type: string
                    example: [ "column1", "column2", "column3" ]
            saltKey:
              type: string
        failureReason:
          type: string
        isRetryable:
          type: boolean
        runMessage:
          type: string
        questionVersion:
          type: integer
    QuestionRunCreateParameters:
      description: Model containing the Cleanroom Question Run parameters for a Create Run request
      required:
        - name
      properties:
        name:
          type: string
        parameters:
          type: object
          description: Key-value pairs for question parameters
          additionalProperties:
            type: string
          example:
            param1: Value1
            param2: Value2

    SegmentationRequest:
      description: Request body for enabling or updating segmentation for a Cleanroom Question
      required:
        - assetDisplayName
        - rampID
      properties:
        assetDisplayName:
          type: string
          description: Display name for the asset
          example: "CRQ-065269-Feb2"
        rampID:
          type: string
          description: Ramp ID type
          example: "NAME"

    SegmentationResponse:
      description: Response when segmentation is enabled or updated successfully
      x-class-extra-annotation: "@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)"
      properties:
        assetId:
          type: string
          description: The created or updated asset ID
          example: "5f3e2b1a-90ab-4cde-8fgh-1234567890ab"
        success:
          type: boolean
          description: Indicates whether the operation succeeded
          example: true

    QuestionRunResultData:
      description: Model containing the Cleanroom Question Run Result Data
      properties:
        metadata:
          type: array
          items:
            $ref: '#/components/schemas/RunTableMetadata'
        stats:
          type: array
          items:
            $ref: '#/components/schemas/RunTableStats'
        count:
          type: integer
        multipleOutputs:
          type: array
          items:
            type: string

    RunTableMetadata:
      type: object
      properties:
        fieldName:
          type: string
        dataType:
          type: string
        columnName:
          type: string
    RunTableStats:
      type: object
      additionalProperties:
        type: string

    UpdateCleanroomQuestionComputeCapacityRequest:
      type: object
      properties:
        computeCapacity:
          $ref: '#/components/schemas/CleanroomQuestionComputeCapacity'
          description: The new warehouse size for the cleanroom question

    CleanroomQuestionComputeCapacity:
      type: string
      description: possible compute capacities for cleanroom questions. This can be set for Hybrid, LinkedIn, Snowflake and Habu Confidential Compute. Snowflake cleanroom questions can only be DEFAULT or LARGE.
      enum:
        - DEFAULT
        - MEDIUM
        - LARGE
        - XLARGE

    UpdateCleanroomQuestionComputeCapacityResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Indicates if the warehouse size was updated successfully

    QuestionCreationResponse:
      description: Model containing the response for a question creation request
      properties:
        success:
          type: boolean
          description: Indicates if the question was created successfully
        message:
            type: string
            description: Message indicating what went wrong if the question was not created successfully
        questionID:
          type: string
          description: The ID of the created question

    QuestionUpdateResponse:
      description: Model containing the response for a question update request
      properties:
        success:
          type: boolean
          description: Indicates if the question was created updated
        message:
          type: string
          description: Message indicating what went wrong if the question was not created successfully
        question:
          $ref: '#/components/schemas/QuestionDetails'

    Question:
      description: Model containing the Question details
      type: object
      properties:
        questionDetails:
          $ref: '#/components/schemas/QuestionDetails'
        id:
          type: string
        cleanRoomID:
          type: string
        organizationID:
          type: string
        settings:
          $ref: '#/components/schemas/CreateQuestionSettings'

    DeleteQuestionResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Indicates if the question was deleted successfully

    CreateQuestionSettings:
      description: Settings for how the create question api will behave
      type: object
      properties:
        queryValidation:
          type: boolean
          description: If true, the query will be validated before being saved

    Datasets:
      description: Detailed information about the datasets
      type: object
      properties:
        datasetType:
          type: string
        subType:
          type: string
        datasetId:
          type: string
        macro:
          type: string
        partitionValues:
            $ref: '#/components/schemas/CleanroomQuestionRunPartitionParameters'
        bfmtJoinColumns:
          type: array
          items:
            $ref: '#/components/schemas/BfmtJoinColumns'

    BfmtJoinColumns:
      description: Detailed information about the Bfmt Join Columns
      type: object
      properties:
        key:
          type: string
        value:
          type: string

    QuestionDetails:
      description: Detailed information about the question
      type: object
      properties:
        title:
          type: string
        displayId:
          type: string
        category:
          type: string
        tags:
          type: array
          items:
            type: string
        description:
          type: string
        version:
          type: integer
        hasDateParameters:
          type: boolean
        hasDateFilter:
          type: boolean
        isAnalytics:
          type: boolean
        isUserListQuestion:
          type: boolean
        isCleanComputeQuestion:
          type: boolean
        outputFormat:
          type: string
        visualization:
          type: string
        hasMultipleOutputs:
          type: boolean
        queryDetails:
          type: array
          items:
            $ref: '#/components/schemas/QueryDetail'
        dataTypes:
          type: array
          items:
            $ref: '#/components/schemas/QuestionDataType'
        parameters:
          type: array
          items:
            $ref: '#/components/schemas/Parameter'
        measures:
          type: array
          items:
            $ref: '#/components/schemas/Measure'
        dimensions:
          type: array
          items:
            $ref: '#/components/schemas/Dimension'
        userListOutputs:
          type: array
          items:
            $ref: '#/components/schemas/UserListOutput'

    QueryDetail:
      description: A single query detail within the question
      type: object
      properties:
        query:
          type: string
        cleanRoomType:
          $ref: '#/components/schemas/CleanRoomTypeRequest'
        queryLanguage:
          type: string

    QuestionDataType:
      description: Details about the data types used in the question
      type: object
      properties:
        id:
          type: string
        macro:
          type: string
        datasetID:
          type: string
        importDataType:
          $ref: '#/components/schemas/QuestionImportDataType'
        dataSetTypeFields:
          type: array
          items:
            $ref: '#/components/schemas/DataSetTypeField'

    QuestionImportDataType:
      type: string
      enum:
        - CodeContainer
        - Transaction
        - Metadata
        - PageData
        - AdExposure
        - ServiceContainer
        - DatabricksNotebook
        - TTDREDSFeed
        - UserData
        - MLModel
        - ConversionEvents
        - TrainModel
        - AdLogs
        - MemberProfile
        - AADataFeed
        - TTDREDSMetadata
        - Conversion
        - BinaryData
        - SparkCodeContainer
        - DatabricksContainer
        - AdEngagement
        - OfflineConversions
        - UserSegmentMap
        - LinkedInMarketingSolutionsConfigData
        - GoogleCloudBigQuery
        - IDENTITY_GRAPH
        - AdsDataFeed
        - CRM
        - Generic
        - AMCAdsDataFeed
        - Campaign
        - CampaignMapping
        - WHEEL


    ImportDataTypes:
      type: array
      items:
        $ref: '#/components/schemas/ImportDataType'

    ImportDataType:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        displayName:
          type: string

    DataSetTypeField:
      description: Fields associated with a specific data type
      type: object
      properties:
        name:
          type: string
        type:
          type: string

    Parameter:
      description: A parameter used within the question
      type: object
      properties:
        name:
          type: string
        type:
          type: string

    Measure:
      description: Metrics associated with the question
      type: object
      properties:
        name:
          type: string
        type:
          type: string
        isIdentity:
          type: boolean
        noise:
          type: boolean

    Dimension:
      description: Dimensions used within the question
      type: object
      properties:
        name:
          type: string
        type:
          type: string

    UserListOutput:
      description: Output for user lists associated with the question
      type: object
      properties:
        name:
          type: string
        type:
          type: string

    CleanroomQuestionRunAuditDetails:
      description: Model containing the Cleanroom Question Run Audit Details
      properties:
        cleanroomQuestionRunId:
          type: string
        auditDetails:
          type: array
          items:
            $ref: '#/components/schemas/AuditDetails'
    AuditDetails:
      properties:
        eventTime:
          type: string
          format: date-time
        eventType:
          type: string
          # example: init
        message:
          type: string
          # example: Run Triggered
        details:
          additionalProperties:
            type: object
            # example:
            #   triggeredBy: ["platform_admin@habu.com"]
            #   parameters: ["DATE_ID::32323"]

    CleanroomQuestionRunActivationSummary:
      description: Model containing the Cleanroom Question Run Activation Summary
      properties:
        cleanroomQuestionRunId:
          type: string
        cleanroomQuestionRunName:
          type: string
        activationSummary:
          type: array
          items:
            $ref: '#/components/schemas/ActivationSummary'
    ActivationSummary:
      properties:
        activationPartner:
          type: string
        activationChannel:
          type: string
        segmentCode:
          type: string
        identityType:
          type: string
        lastProcessed:
          type: string
          format: date-time
        recordsSent:
          type: integer
        status:
          type: string

    CleanRooms:
      description: A list of Cleanrooms and their details
      type: array
      items:
        $ref: '#/components/schemas/CleanRoom'

    CleanRoomQuestions:
      description: A list of Cleanroom Questions and their details
      type: array
      items:
        $ref: '#/components/schemas/CleanRoomQuestion'

    CleanRoomQuestionResultShares:
      description: A list of Cleanroom Result Shares
      type: array
      items:
        $ref: '#/components/schemas/CleanRoomQuestionResultShare'

    CleanroomQuestionRunPartitionParameters:
      description: A list of Cleanroom Question Run Partition Parameters
      type: array
      items:
        $ref: '#/components/schemas/CleanroomQuestionRunPartitionParameter'

    CleanRoomQuestionTags:
      description: A list of Cleanroom Question Tags
      type: array
      items:
        type: string

    GetCleanRoomQuestionParametersResponse:
      type: object
      properties:
        name:
          type: string
        displayId:
          type: string
        parameters:
          $ref: '#/components/schemas/CleanroomQuestionParameters'


    CleanroomQuestionParameters:
      description: A list of Cleanroom Question Parameters
      type: array
      items:
        $ref: '#/components/schemas/CleanroomQuestionParameter'

    
    UpsertCleanRoomQuestionResultSharesApiInput:
      description: A list of Cleanroom Result Shares
      type: array
      items:
        $ref: '#/components/schemas/UpsertCleanRoomQuestionResultShares'

    QuestionRunsMetadata:
      description: A list of Cleanroom Question Runs and their Metadata
      type: array
      items:
        $ref: '#/components/schemas/QuestionRunMetadata'

    DeleteResponse:
      type: object
      properties:
        success:
          type: boolean

    CleanRoomRequest:
      type: object
      properties:
        name:
          type: string
          description: Name of the Cleanroom
        description:
          type: string
          description: Description of the Cleanroom
        startAt:
          type: string
          description: Start Date for the cleanroom, use format yyyy-mm-dd
        endAt:
          type: string
          description: End Date for the cleanroom, use format yyyy-mm-dd
        type:
          $ref: "#/components/schemas/CleanRoomTypeRequest"
        parameters:
          $ref: "#/components/schemas/CleanRoomParameterRequest"

      required:
        - organizationId
        - name
        - startAt
        - type

    CleanRoomParameterRequest:
      type: object
      properties:
        REGION:
          type: string
          enum: [ "REGION_EU", "REGION_US", "REGION_APAC", "REGION_AFRICA" ]
        SUB_REGION:
          type: string
          enum: [ "SUB_REGION_EAST1", "SUB_REGION_WEST1", "SUB_REGION_NORTH1", "SUB_REGION_SOUTH1", "SUB_REGION_CENTRAL1", "SUB_REGION_NORTHEAST1", "SUB_REGION_SOUTHEAST1" ]
        CLOUD:
          type: string
          enum: [ "CLOUD_AWS", "CLOUD_GCP", "CLOUD_AZURE" ]
        ENABLE_EXPORT, ENABLE_VIEW_QUERY, ENABLE_HABU_INTELLIGENCE, ENABLE_PAIR, ENABLE_OPJA:
          type: string
          enum: ["true", "false"]
          description: "Each of these values take a true or false, please separate them for example ENABLE_EXPORT = true, ENABLE_VIEW_QUERY = true"
      additionalProperties:
        type: string
        enum: ["DATA_DECIBEL", "CROWD_SIZE"]

    CleanRoomTypeRequest:
        type: string
        enum:
            - Hybrid
            - Snowflake
            - Databricks
            - Google
            - AWS
            - Facebook
            - AMC
            - ADH
            - LinkedIn
            - HabuConfidentialComputing

    AddCleanRoomPartnerRequest:
      type: object
      properties:
        partnerAdminEmail:
          type: string
          description: Cleanroom Partner Admin's Email
        invitationNote:
          type: string
          default: We are making some insights based on our data available to you in a Clean Room and would like to invite you to take a look. Getting started is super easy.

    CleanRoomPartnerResponse:
      type: object
      properties:
        id:
          type: string
          description: Cleanroom Partner ID
        partnerOrganizationId:
          type: string
          description: Cleanroom Partner Organization ID
        name:
          type: string
          description: Partner Organization name
        userCount:
          type: integer
          description: CleanRoom User count
        cleanRoomUsers:
          $ref: "#/components/schemas/CleanRoomUsers"

    CleanRoomPartners:
      description: A list of Cleanroom Partners and their details
      type: array
      items:
        $ref: '#/components/schemas/CleanRoomPartnerResponse'

    OrganizationUsers:
      description: A list of Organization Users and their details
      type: array
      items:
        $ref: '#/components/schemas/OrganizationUser'

    OrganizationUser:
      type: object
      properties:
        roleName:
          type: string
          description: Name of the user role in the organization
        user:
          $ref: "#/components/schemas/User"

    User:
      type: object
      properties:
        id:
          type: string
          description: User ID
        name:
          type: string
          description: Name of the user
        email:
          type: string

    GetCleanroomOrganizationUsersResponse:
      type: array
      items:
        $ref: "#/components/schemas/User"

    AddCleanRoomUserRequest:
      type: object
      properties:
        userId:
          type: string
          description: (deprecated) id of the user in the organization
        roleId:
          type: string
          description: (deprecated) id of Role that you want to assign the user
        email:
          type: string
          description: email of the user in the organization
        role:
          type: string
          description: Role that you want to assign the user

    CleanRoomUser:
      type: object
      properties:
        id:
          type: string
          description: Cleanroom User ID
        cleanRoomId:
          type: string
          description: Cleanroom ID
        user:
          $ref: "#/components/schemas/User"
        timeAudit:
          $ref: "#/components/schemas/TimeAudit"
        userAudit:
          $ref: "#/components/schemas/UserAudit"
        role:
          $ref: "#/components/schemas/CleanRoomRole"

    CleanRoomUsers:
      description: A list of Cleanroom Users and their details
      type: array
      items:
        $ref: '#/components/schemas/CleanRoomUser'

    CleanRoomRole:
      properties:
        id:
          type: string
        name:
          type: string
        cleanRoomId:
          type: string
        organizationId:
          type: string

    CleanRoomRoles:
      description: A list of Cleanroom Roles
      type: array
      items:
        $ref: '#/components/schemas/CleanRoomRole'

    InviteStatus:
      type: string
      enum:
        - PENDING
        - ACCEPTED
        - DECLINED
        - INVITE_STATUS_UNKNOWN
        - REQUEST_SENT_ADMIN
        - IN_PROGRESS
        - DECLINED_BY_ADMIN

    QuestionPermission:
      type: string
      enum:
        - UNKNOWN_PERMISSION
        - VIEW_CODE
        - EDIT
        - CLONE
        - RUN
        - IN_PROGRESS
        - VIEW_RESULTS

    QuestionAccess:
      type: string
      enum:
        - UNKNOWN_ACCESS
        - QUESTION_OWNER_ONLY
        - ALL_CLEAN_ROOM_PARTNERS

    InvitationDetail:
      type: object
      properties:
        id:
          type: string
          description: Invitation detail ID
        organizationId:
          type: string
          description: Inviter's organization ID
        partnerOrganizationId:
          type: string
          description: Invitee's organization. This will be filled when invitee choose organization to link cleanroom.
        cleanRoomId:
          type: string
          description: Inviter's cleanroom ID
        invitationNote:
          type: string
          description: Invitation note
        partnerAdminEmail:
          type: string
          description: Invitee's email
        InvitorEmail:
          type: string
          description: Inviter's email
        Status:
          $ref: "#/components/schemas/InviteStatus"
        timeAudit:
          $ref: "#/components/schemas/TimeAudit"


    CleanRoomQuestionResponse:
      type: object
      properties:
        id:
          type: string
          description: Cleanroom question ID
        cleanRoomId:
          type: string
          description: Cleanroom ID
        ownerOrganizationId:
          type: string
          description: OrganizationID that brought the question into the clean room
        questionId:
          type: string
          description: Question ID
        title:
          type: string
          description: Title of the Question
        category:
          type: string
          description: Category of the Question
        stage:
          type: string
          description: Stage of the Cleanroom Question
        status:
          type: string
        latestRun:
          $ref: '#/components/schemas/CleanRoomQuestionRun'
        datasetCount:
          type: integer
          description: Count of required datasets for this Question
        runCount:
          type: integer
          description: Count of Report Runs
        isEditable:
          type: boolean
          description: Is Editable
        questionStatus:
          type: string
        questionVersion:
          type: integer
          description: Question Version
        displayId:
          type: string
          description: display ID
        description:
          type: string
          description: Description of the Question

    CleanRoomQuestionRun:
      type: object
      properties:
        runId:
          type: string
          description: Run ID
        status:
          type: string
        startTimestamp:
          type: string
          format: date-time
          description: Start Timestamp of the Run
        endTimestamp:
          type: string
          format: date-time
          description: End Timestamp of the Run

    CleanRoomQuestionResultShare:
      type: object
      properties:
        id:
          type: string
          description: Cleanroom Question Result Share ID
        PartnerID:
          type: string
          description: Partner ID
        PostRunQueryID:
          type: string
          description: Post Run Query ID

    CleanroomQuestionRunPartitionParameter:
      type: object
      properties:
        name:
          type: string
          description: Name of Cleanroom Question Run Partition Parameter
        value:
          type: string
          description: Value of Cleanroom Question Run Partition Parameter
        dataType:
          type: string
          description: Data Type of Cleanroom Question Run Partition Parameter

    GetAllRunSchedulesForCleanroomQuestionResponse:
      type: array
      items:
        $ref: '#/components/schemas/GetCleanroomQuestionRunScheduleResponse'

    DeleteCleanroomQuestionRunScheduleResponse:
      type: object
      properties:
        success:
          type: boolean

    GetCleanroomQuestionRunScheduleResponse:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
        ownerId:
          type: string
        parameters:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ScheduleQuestionParameters'
        startDateTime:
            type: string
            format: date-time
        endDateTime:
            type: string
            format: date-time
        active:
          type: boolean
        repeatFrequency:
            $ref: '#/components/schemas/RepeatFrequency'
        createdBy:
            type: string
        modifiedBy:
            type: string
        createdDate:
            type: string
            format: date-time
        modifiedDate:
            type: string
            format: date-time
        daysOfWeek:
            type: array
            items:
                $ref: '#/components/schemas/DaysOfWeek'
        repeatDayofMonth:
            type: array
            items:
                type: integer
                format: int64
        displayId:
            type: string


    ScheduleQuestionParameters:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
        qualifier:
          $ref: '#/components/schemas/DateQualifier'
        type:
          type: string
        isStatic:
          type: boolean
        parameterType:
          type: string

    DateQualifier:
      type: string
      enum:
        - DAYS
        - MONTHS


    CreateCleanroomQuestionRunScheduleResponse:
        type: object
        properties:
          id:
            type: string

    CreateCleanroomQuestionRunScheduleInput:
      type: object
      properties:
        parameters:
            $ref: '#/components/schemas/CleanroomQuestionRunScheduleParameters'
        daysOfWeek:
          type: array
          items:
              $ref: '#/components/schemas/DaysOfWeek'
        repeatDayofMonth:
          type: array
          items:
            type: integer
        startSchedule:
          type: string
        name:
          type: string
        repeatFrequency:
          $ref: '#/components/schemas/RepeatFrequency'
        endSchedule:
          type: string


    CleanroomQuestionRunScheduleParameters:
      description: A list of Cleanroom Question Run Schedule Parameters
      type: array
      items:
        $ref: '#/components/schemas/CleanroomQuestionRunScheduleParameter'

    CleanroomQuestionRunScheduleParameter:
      type: object
      properties:
        name:
          type: string
          description: Name of Cleanroom Question Run Schedule Parameter
        value:
          type: string
          description: Value of Cleanroom Question Run Schedule Parameter
        dataType:
          type: string
          description: Data Type of Cleanroom Question Run Schedule Parameter.
        parameterType:
          $ref: "#/components/schemas/CleanroomQuestionRunParameterType"
        dateQualifier:
          $ref: '#/components/schemas/DateQualifier'
        dateType:
          $ref: "#/components/schemas/CleanroomQuestionRunScheduleDateParameterType"


    CleanroomQuestionRunScheduleDateParameterType:
      type: string
      enum:
        - RELATIVE
        - ABSOLUTE

    RepeatFrequency:
      type: string
      enum:
        - FREQUENCY_UNKNOWN
        - DAILY
        - WEEKLY
        - MONTHLY

    DaysOfWeek:
      type: string
      enum:
        - DAY_OF_WEEK_UNKNOWN
        - SUN
        - MON
        - TUE
        - WED
        - THU
        - FRI
        - SAT

    CleanroomQuestionRunParameterType:
      type: string
      enum:
        - PARTITION_PARAMETER
        - RUN_PARAMETER

    
    UpsertCleanRoomQuestionResultShares:
      type: object
      properties:
        PartnerID:
          type: string
          description: Partner ID
        PostRunQueryID:
          type: string
          description: Post Run Query ID

    CleanroomQuestionParameter:
      type: object
      properties:
        Name:
          type: string
          description: Cleanroom Question Parameter Name
        Index:
          type: integer
          description: Cleanroom Question Parameter Index
        DataType:
          type: string
          description: Cleanroom Question Parameter Display Name
        ParameterType:
          type: string
          description: Cleanroom Question Parameter Type


    UpsertCleanRoomQuestionResultShareResponse:
      type: object
      properties:
        success:
          type: boolean

    DataConnectionDetails:
      type: object
      properties:
        name:
          type: string
          description: Name of the data connection
        category:
          type: string
          description: Category of the data connection
        credentialId:
          type: string
          description: Credential ID for the data connection
        dataType:
          $ref: "#/components/schemas/DataType"
        dataSource:
          $ref: "#/components/schemas/DataSource"
        dataSourceConfiguration:
          type: array
          items:
            $ref: "#/components/schemas/JobParameters"

    JobParameters:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        displayName:
          type: string
        value:
          type: string

    FieldConfigurations:
      description: A list of Field Configurations
      type: array
      items:
        $ref: '#/components/schemas/FieldConfiguration'

    FieldConfiguration:
      type: object
      properties:
        dataConnectionId:
          type: string
          description: The Data Connection ID associated with this Field Configuration
        id:
          type: string
          description: Unique ID for the Field
        fieldIndex:
          type: integer
        fieldName:
          type: string
          description: Name of the Field
        fieldLabel:
          type: string
          description: Display Name of the Field
        dataType:
          type: string
          enum: ["BOOLEAN", "DATE", "DECIMAL", "DOUBLE", "INTEGER", "LONG", "STRING", "TEXT", "TIMESTAMP", "UNKNOWN"]
          description: Data type of the field
        identifierType:
          type: string
          enum: ["","1P or 3P Cookie","Customer First Party Identifier","Hashed Emails","HouseHold ID","Email MD5 Hashed","Mobile Device Identifier","Person (or People) Identifier","RampID","Raw Email","Email SHA1 Hashed","Email SHA256 Hashed","Unique Identifier","City","State","Country","Postal Code","Street Address","Address Line 1","Address Line 2","Name","First Name","Middle Name","Last Name","TV Device ID","IP Address","phone","Hashed Customer ID"]
          description: unique user identifier type
        delimiter:
          type: string
          enum: ["","Semicolon", "Tab", "Comma", "Pipe"]
          description: character or sequence of characters that separates data into separate fields
        isPii:
          type: boolean
          default: false
        isUserIdField:
          type: boolean
          default: false
        isExcluded:
          type: boolean
          default: false
        isPartitionColumn:
          type: boolean
          default: false
          description: Indicates whether this field is a partition column

    DatasetFieldMappings:
      description: A list of Dataset Field Mappings
      type: array
      items:
        $ref: '#/components/schemas/DatasetFieldMapping'

    DatasetFieldMapping:
      type: object
      properties:
        dataConnectionId:
          type: string
          description: The Data Connection ID associated with this Field Configuration
        id:
          type: string
          description: Unique ID for the Field
        fieldIndex:
          type: integer
        fieldName:
          type: string
          description: Name of the Field
        fieldLabel:
          type: string
          description: Display Name of the Field
        dataType:
          type: string
        delimiter:
          type: string
        isPii:
          type: boolean
          default: false
        isUserIdField:
          type: boolean
          default: false
        isExcluded:
          type: boolean
          default: false
        rename:
          type: string
        transformation:
          type: string
          description: Transformation formula for calculated fields
        isPartitionColumn:
          type: boolean
          default: false
          readOnly: true
          description: Indicates whether this field is a partition column

    IdentifierTypes:
      description: A list of Identifier Types
      type: array
      items:
        $ref: '#/components/schemas/IdentifierType'

    IdentifierType:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        displayName:
          type: string

    DataConnections:
      description: A list of Data Connections
      type: array
      items:
        $ref: '#/components/schemas/DataConnectionResponse'

    CleanRoomDatasets:
      description: A list of Cleanroom Datasets
      type: array
      items:
        $ref: '#/components/schemas/CleanRoomDataset'

    CleanRoomDataset:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        cleanRoomId:
          type: string
        organizationName:
          type: string
          readOnly: true
          description: Name of the organization that owns this dataset
        dataConnectionType:
          type: string
        dataConnectionId:
          type: string
        stage:
          type: string
        configurationStatus:
          type: string
        datasetFields:
          type: array
          items:
            $ref: "#/components/schemas/DatasetField"
        datasetFieldMappings:
          $ref: "#/components/schemas/DatasetFieldMappings"
        datasetFilters:
          type: array
          items:
            $ref: "#/components/schemas/DatasetFilter"
        datasetParameters:
          type: array
          items:
            $ref: "#/components/schemas/DatasetParameter"
        partnerCanAssign:
          type: boolean

    CleanRoomDatasetUpdateRequest:
      type: object
      description: "The following fields are required: datasetFieldMapping.[fieldName, isExcluded, rename], datasetFilter.[datasetFieldName , operator, values]; all others are optional"
      properties:
        datasetFieldMappings:
          $ref: "#/components/schemas/DatasetFieldMappings"
        datasetFilters:
          type: array
          items:
            $ref: "#/components/schemas/DatasetFilter"

    ConfigureCleanRoomDatasetRequest:
      type: object
      properties:
        rampIDConsent:
          type: boolean
          default: false
          description: Consent to the use of RampID as a join key in questions (https://storage.googleapis.com/lr-tech-docs-resources/Files/LiveRamp%20RampID%20Data%20Protection%20Attestation.pdf)

    CleanRoomStakeholders:
      type: array
      items:
        $ref: "#/components/schemas/CleanRoomStakeholder"
      description: List of Cleanroom Stakeholders

    CleanRoomStakeholder:
      type: object
      properties:
        organizationId:
          type: string
        organizationName:
          type: string
        ownership:
          type: string

    CleanroomAssetDetails:
      type: object
      properties:
        questions:
          type: array
          items:
            $ref: "#/components/schemas/QuestionMetadata"
          description: Available questions for flow creation
        datasets:
          type: array
          items:
            $ref: "#/components/schemas/DatasetMetadata"
          description: Available datasets for assignment
        computeCapacityOptions:
          type: array
          items:
            $ref: "#/components/schemas/ComputeCapacityOption"
          description: Available compute capacity options
        fieldTypes:
          type: array
          items:
            $ref: "#/components/schemas/FieldTypeEnum"
          description: Field type enumerations
        stakeholders:
          type: array
          items:
            $ref: "#/components/schemas/CleanRoomStakeholder"
          description: Clean room stakeholder information

    QuestionMetadata:
      type: object
      properties:
        ID:
          type: string
        displayID:
          type: string
        title:
          type: string
        category:
          type: string
        description:
          type: string
        status:
          type: string
        hasDateFilter:
          type: boolean
        hasDateParameters:
          type: boolean
        hasMultipleOutputs:
          type: boolean
        isAggregate:
          type: boolean
        isUserListQuestion:
          type: boolean
        defaultComputeCapacity:
          type: string
        dimensions:
          type: array
          items:
            $ref: "#/components/schemas/QuestionDimension"
        metrics:
          type: array
          items:
            $ref: "#/components/schemas/QuestionMetric"
        parameters:
          type: array
          items:
            $ref: "#/components/schemas/QuestionParameter"
        dataTypes:
          type: array
          items:
            $ref: "#/components/schemas/AssetQuestionDataType"
        userListOutputs:
          type: array
          items:
            $ref: "#/components/schemas/QuestionUserListOutput"

    QuestionDimension:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        displayName:
          type: string
        type:
          type: string
        filterable:
          type: boolean
        plottable:
          type: boolean

    QuestionMetric:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        displayName:
          type: string
        type:
          type: string
        computed:
          type: boolean

    QuestionParameter:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        displayName:
          type: string
        type:
          type: string
        index:
          type: integer
        parameterType:
          type: string

    AssetQuestionDataType:
      type: object
      properties:
        ID:
          type: string
        macro:
          type: string
        description:
          type: string
        importDataType:
          type: string
        optional:
          type: boolean
        fields:
          type: array
          items:
            $ref: "#/components/schemas/QuestionDataTypeField"

    QuestionDataTypeField:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        type:
          type: string
        format:
          type: string
        description:
          type: string

    QuestionUserListOutput:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        type:
          type: string
        isEncrypt:
          type: boolean

    DatasetMetadata:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        organizationID:
          type: string
        organizationName:
          type: string
        dataImportType:
          type: string
        macro:
          type: string
        fields:
          type: array
          items:
            $ref: "#/components/schemas/AssetDatasetField"

    AssetDatasetField:
      type: object
      properties:
        ID:
          type: string
        fieldName:
          type: string
        dataType:
          type: string
        isFilterable:
          type: boolean
        isUserIDField:
          type: boolean
        isPii:
          type: boolean
        isExcluded:
          type: boolean
        fieldLabel:
          type: string

    ComputeCapacityOption:
      type: object
      properties:
        name:
          type: string
        description:
          type: string

    FieldTypeEnum:
      type: object
      properties:
        name:
          type: string
        description:
          type: string

    CleanroomFlowNodeDetails:
      type: object
      properties:
        nodes:
          type: array
          items:
            $ref: "#/components/schemas/FlowNodeMetadata"
          description: Detailed information for all nodes in the flow

    FlowNodeMetadata:
      type: object
      properties:
        nodeIdentifier:
          type: string
          description: Node identifier
        nodeID:
          type: string
          description: Node ID
        nodeLevel:
          type: integer
          description: Node level in the flow
        ID:
          type: string
          description: Question ID
        displayID:
          type: string
          description: Question display ID
        title:
          type: string
          description: Question title
        category:
          type: string
          description: Question category
        description:
          type: string
          description: Question description
        status:
          type: string
          description: Question status
        hasDateFilter:
          type: boolean
          description: Whether the question has date filter
        hasDateParameters:
          type: boolean
          description: Whether the question has date parameters
        hasMultipleOutputs:
          type: boolean
          description: Whether the question has multiple outputs
        isAggregate:
          type: boolean
          description: Whether the question is aggregate
        isUserListQuestion:
          type: boolean
          description: Whether the question is a user list question
        defaultComputeCapacity:
          type: string
          description: Default compute capacity for the question
        dimensions:
          type: array
          items:
            $ref: "#/components/schemas/QuestionDimension"
          description: Question dimensions
        metrics:
          type: array
          items:
            $ref: "#/components/schemas/QuestionMetric"
          description: Question metrics
        parameters:
          type: array
          items:
            $ref: "#/components/schemas/QuestionParameter"
          description: Question parameters
        dataTypes:
          type: array
          items:
            $ref: "#/components/schemas/AssetQuestionDataType"
          description: Question data types
        userListOutputs:
          type: array
          items:
            $ref: "#/components/schemas/QuestionUserListOutput"
          description: Question user list outputs
        branches:
          type: array
          items:
            type: string
          description: Branches 
        
    QuestionDataTypeOptions:
      type: array
      items:
        $ref: "#/components/schemas/QuestionDataTypeOption"
      description: List of Cleanroom Question Data Type Options

    QuestionDataTypeOption:
      type: object
      properties:
        dataTypeName:
          type: string
        datasetOptions:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string

    CleanRoomQuestionPermissionsResponse:
      type: array
      items:
        $ref: "#/components/schemas/CleanRoomQuestionPermissions"
      description: Array of Cleanroom Question Permissions

    UpdateCleanRoomQuestionPermissionsRequest:
      type: array
      items:
        $ref: "#/components/schemas/CleanRoomQuestionPermissionsUpdateInput"
      description: Array of Cleanroom Question Permission Updates

    CleanRoomQuestionPermissions:
      type: object
      properties:
        id:
          type: string
        permission:
          $ref: "#/components/schemas/QuestionPermission"
        access:
          $ref: "#/components/schemas/QuestionAccess"

    CleanRoomQuestionPermissionsUpdateInput:
      type: object
      properties:
        permission:
          $ref: "#/components/schemas/QuestionPermission"
        access:
          $ref: "#/components/schemas/QuestionAccess"

    AssignCleanroomQuestionDatasetRequest:
      type: object
      properties:
        organizationId:
          type: string
          description: ID of Organization ID to take ownership
        macro:
          type: string
          description: name of Question Data Type

    CleanRoomQuestionDatasets:
      type: array
      items:
        $ref: "#/components/schemas/CleanRoomQuestionDataset"
      description: List of Cleanroom Question Datasets

    CleanRoomQuestionDataset:
      type: object
      properties:
        id:
          type: string
          description: Cleanroom Question Dataset ID
        dataTypeDisplayName:
          type: string
          description: Data Type display name
        ownership:
          type: string
        status:
          type: string
        datasetId:
          type: string
          description: Dataset Identifier
        datasetName:
          type: string
          description: Dataset Name
        dataTypeName:
          type: string
          description: DataType name
        questionDataTypeId:
          type: string
          description: DataType ID
        dataConnectionId:
          type: string
          description: Data Connection ID
        parameters:
          type: array
          items:
            $ref: "#/components/schemas/DatasetParameter"
          description: Dataset Parameters
        dataSourceId:
          type: string
          description: Data Source ID
        organizationId:
          type: string
          description: Organization ID which this cleanroom question dataset belongs to
        organizationName:
          type: string
          description: Organization Name which this cleanroom question dataset belongs to
        macro:
          type: string
          description: macro
        assignedAt:
          type: string
        fields:
          type: array
          items:
            $ref: "#/components/schemas/DatasetField"
          description: Dataset Fields

    DatasetParameter:
      type: object
      properties:
        name:
          type: string
          description: Dataset Parameter Name
        value:
          type: string
          description: Dataset Parameter Value
        type:
          type: string
          description: Dataset Parameter Type
    DatasetField:
      type: object
      properties:
        datasetId:
          type: string
          description: Dataset ID
        id:
          type: string
          description: Dataset Field ID
        name:
          type: string
          description: Dataset Field Name
        value:
          type: string
          description: Dataset Field Value
        type:
          type: string
          description: Dataset Field Type
    DatasetFilter:
      type: object
      properties:
        datasetId:
          type: string
          description: Dataset ID
        id:
          type: string
          description: Dataset Filter ID
        datasetFieldName:
          type: string
          description: Dataset Field Name
        datasetFieldType:
          type: string
          description: Dataset Field Type
        operator:
          type: string
          description: Operator to be applied on the Dataset Field
          enum: ["", EQUALS, NOT_EQUALS, IN, NOT_IN]
        values:
          type: array
          items:
            type: string
          description: Values to filter the Dataset Field on

    OrganizationCredentialDetails:
      description: A list of all Organization Credentials
      type: array
      items:
        $ref: '#/components/schemas/OrganizationCredentialDetail'

    OrganizationCredentialDetail:
      type: object
      properties:
        id:
          type: string
          description: Organization Credential ID
        name:
          type: string
          description: Name of the organization credential
        managedCredential:
          type: boolean
          description: Is this a managed or service credential
        credentialSourceId:
          type: string
          description: Credential Source ID
        credentialSourceName:
          default: null
          type: string
          description: Credential Source Name
          enum: ["AMC Export","AWS Clean Room Credentials","AWS ECR Registry","AWS IAM User Credentials","AWS S3 Credential","Amazon Ads Api Credentials","Azure AD Service Principal","Azure SAS Token","CUSTOMER_AWS","DV 360","DV360 Customer Match","Databricks Account","Databricks Delta Credentials","Databricks Service Role Credentials","Docker Registry","Equativ","Facebook AA Credentials","Facebook Audience Measurement API","Facebook Conversions","Facebook Custom Audiences","Facebook Direct Custom Audiences","Facebook Offline Conversions","Google Ad Manager","Google Ads Data Hub","Google Customer Match","Google Customer Match - MAID","Google Enhanced Conversions","Google Enhanced Conversions - Beta","Google Offline Conversions","Google Service Account","Google Workload Identity Federation","HUBSPOT","LinkedIn Partner","LiveRamp Activation","Pinterest Ads","Polaris Catalog Credentials","Reddit Ads","Salesforce Credential","Snapchat Audience Match","Snapchat Offline Conversions","Snowflake","Snowflake Account","Snowflake Account With Credentials","Snowflake Azure","Snowflake Data Connection","Snowflake GCS","Snowflake S3 Credentials","Snowflake S3 Role","TikTok Audience","TikTok Offline Conversions","Twitter Conversions","Twitter Tailored Audiences","LiveRamp Analytics Environment"]
        credentials:
          type: array
          items:
            $ref: "#/components/schemas/Credentials"
        timeAudit:
          $ref: "#/components/schemas/TimeAudit"
        userAudit:
          $ref: "#/components/schemas/UserAudit"
      required: ["name", "credentials"]

    DataConnectionResponse:
      type: object
      properties:
        id:
          type: string
          description: ID of the data connection
        name:
          type: string
          description: Name of the data connection
        category:
          type: string
          description: Category of the data connection
        configStatus:
          type: string
          description: Configuration Status of the data connection
        runStatus:
          type: string
          description: Run Status of the data connection job
        stage:
          type: string
          description: Stage of the data connection - ACTIVE or PAUSED
        dataType:
          $ref: "#/components/schemas/DataType"
        dataSource:
          $ref: "#/components/schemas/DataSource"
        dataSourceConfiguration:
          type: array
          items:
            $ref: "#/components/schemas/JobParameters"

    Credentials:
      type: object
      properties:
        name:
          type: string
        value:
          type: string

    DataSources:
      type: array
      items:
        $ref: '#/components/schemas/DataSource'

    DataSource:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          description: name of the data connection's data source
        displayName:
          type: string
          description: display name of the data connection's data source
          enum: ["AWS ECR Container","AWS Glue Data Catalog","Amazon Marketing Cloud","Amazon Marketing Cloud (Ads API)","Artifact Store","Azure Storage","CSV Catalog","Client AWS S3","Databricks Data Connection","Databricks Delta Table Connection","Docker Container","Facebook Advanced Analytics","Google Ad Manager Logs","Google Ads Data Hub","Google Cloud Authorized View","Google Cloud Big Query","Google Cloud Storage","Google Cloud Storage(with SA)","LiveRamp-Hosted AWS S3","LiveRamp-Hosted Amazon Marketing Cloud","LiveRamp-Hosted Google Cloud Storage","LiveRamp-Hosted Snowflake","LiveRamp-Hosted Javascript Tag","HubSpot","Iceberg Catalog","LinkedIn Marketing Solution","Notebooks","Salesforce","Snowflake","Snowflake Azure Data Connection","Snowflake Data Connection","Snowflake GCS Data Connection","Snowflake S3 Data Connection","Snowflake Table","The Trade Desk: Raw Event Data Stream (REDS)","Local Upload","Publisher Synthetic Dataset Library"]
        credentialSource:
          type: string

    DataTypes:
      type: array
      items:
        $ref: '#/components/schemas/DataType'

    DataType:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        displayName:
          type: string
          enum: ["Ad Engagement","Ad Exposure","Ad Logs","Amazon Marketing Cloud: Event-Level Ad Campaign Data","Binary Data","CRM Data","Campaign Data","Campaign Mapping Data","Code Container","Conversion Events","Databricks Container","Databricks Notebook", "Facebook: Advanced Analytics Data","Generic","Google Ads Data Hub: Event-Level Ad Campaign Data","Google Cloud Big Query","Identity Graph","JAR","LinkedIn Marketing Solutions Config Data","Machine Learning Model","Member Profile","Metadata","Model Training","Offline Conversions","Page Data","Service Container","The Trade Desk: Raw Event Data Stream (REDS) Feed","The Trade Desk: Raw Event Data Stream (REDS) Metadata","Transaction Data","User Data","User-Segment Map","WHEEL"]

    DataSourceParameters:
      type: array
      items:
        $ref: '#/components/schemas/DataSourceParameter'

    DataSourceParameter:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        displayName:
          type: string
        type:
          type: string
        index:
          type: integer
        dataSourceId:
          type: string

    CredentialSources:
      type: array
      items:
        $ref: '#/components/schemas/CredentialSource'

    CredentialSource:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        provider:
          type: string
        credentialConfig:
          type: array
          items:
            $ref: '#/components/schemas/CredentialConfig'

    CredentialConfig:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        index:
          type: integer
        credentialConfigType:
          type: string
        credentialConfigListValues:
          type: array
          items:
            $ref: '#/components/schemas/CredentialConfigListValue'

    CredentialConfigListValue:
      type: object
      properties:
        id:
          type: string
        value:
          type: string
        displayName:
          type: string
        index:
          type: integer

    TimeAudit:
      type: object
      properties:
        createdAt:
          type: string
          format: date-time
          description: Timestamp for when the object was created
        updatedAt:
          type: string
          format: date-time
          description: Timestamp for when the object was last updated
        deletedAt:
          type: string
          format: date-time
          description: Timestamp for when the object was deleted (if applicable)

    UserAudit:
      type: object
      properties:
        createdBy:
          type: string
          description: Identifier of the user who created the object
        updatedBy:
          type: string
          description: Identifier of the user who last updated the object

    ReturnObject:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
      required:
        - code
        - message

    GetExplainPlanResponse:
      type: object
      description: Response containing the execution plan for a cleanroom question run
      properties:
        success:
          type: boolean
          description: Whether the explain plan retrieval was successful
        explainPlan:
          type: string
          description: The execution plan details (present if successful)
      required:
        - success
        
    OptimizerRunResponse:
      type: object
      description: Response from optimizing a cleanroom question run
      properties:
        success:
          type: boolean
          description: Whether the optimization was successful
        recommendationMessage:
          type: string
          description: Optimization recommendation message (present if successful)
      required:
        - success

  securitySchemes:
    application:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: 'https://api.habu.com/v1/oauth/token'
          scopes: { }

servers:
  - description: External APIs for Customer Integration
    url: https://api.habu.com/v1/