Habu Cleanroom Flows API

The Cleanroom Flows API from Habu — 10 operation(s) for cleanroom flows.

Operations 12

GET /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId} Get a Cleanroom Flow by ID #
POST /cleanrooms/{cleanroomId}/cleanroom-flows Create or update a cleanroom flow #
PUT /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/version/{version} Set Cleanroom Flow Version #
POST /cleanrooms/{cleanroomId}/cleanroom-flows/list List Cleanroom Flows #
POST /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/assign-datasets Assign datasets and fields to a cleanroom flow #
POST /cleanrooms/{cleanroomId}/dataset-organizations Get organization information for datasets by UUID or name #
POST /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/nodes/exports Bulk create flow node export jobs #
GET /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/nodes/exports Bulk list flow node export jobs #
DELETE /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/nodes/exports Bulk delete flow node export jobs #
PATCH /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/nodes/exports/status Bulk update flow node export job status #
GET /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/nodes/exports/runs Bulk get flow node export job runs #
GET /cleanrooms/{cleanroomId}/cleanroom-flows/{cleanroomFlowId}/node-details Get comprehensive node details for a cleanroom flow #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/habu-cleanroom-flows-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

habu-cleanroom-flows-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: v1.0.0
  title: External APIs for Customer Integration Cleanroom Flows API
  description: APIs to create and fetch Clean Room and related details from LiveRamp (previously Habu) for Customer Integration.
  contact:
    name: LiveRamp (previously Habu)
    url: https://liveramp.com/
    email: platform_admin@habu.com
servers:
- description: External APIs for Customer Integration
  url: https://api.habu.com/v1/
security:
- application: []
tags:
- name: Cleanroom Flows
paths:
  /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-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}/nodes/exports:
    post:
      summary: Bulk create flow node export jobs
      operationId: createFlowNodeExportJobs
      description: Creates export jobs for one or more flow nodes in a single call. Each item specifies a node ID, the partner accounts to export to, and optional export parameters. Only question nodes are supported. One export job is created per partner account per node.
      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:
              type: array
              items:
                $ref: '#/components/schemas/NodeExportRequest'
      responses:
        '200':
          description: Export jobs created successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NodeExportResult'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
      - Cleanroom Flows
    get:
      summary: Bulk list flow node export jobs
      operationId: listFlowNodeExportJobs
      description: Lists all export jobs for one or more flow nodes. Pass a comma-separated list of node IDs via the nodeIds query parameter.
      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: nodeIds
        in: query
        description: Comma-separated list of node IDs to list exports for
        required: true
        schema:
          type: array
          items:
            type: string
        style: form
        explode: false
      - name: limit
        in: query
        description: The number of export jobs returned per node 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: Export jobs listed successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NodeExportJobList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
      - Cleanroom Flows
    delete:
      summary: Bulk delete flow node export jobs
      operationId: deleteFlowNodeExportJobs
      description: Deletes all export jobs for the specified flow nodes. All jobs associated with each node are deleted.
      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/BulkNodeDeleteRequest'
      responses:
        '200':
          description: Export jobs deleted successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NodeDeleteResult'
        '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}/nodes/exports/status:
    patch:
      summary: Bulk update flow node export job status
      operationId: updateFlowNodeExportJobsStatus
      description: Updates the status of all export jobs for the specified flow nodes. Status must be ACTIVE or PAUSED.
      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/BulkNodeStatusRequest'
      responses:
        '200':
          description: Job statuses updated successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NodeStatusResult'
        '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}/nodes/exports/runs:
    get:
      summary: Bulk get flow node export job runs
      operationId: getFlowNodeExportJobRuns
      description: Returns run history for all export jobs associated with the specified flow nodes.
      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: nodeIds
        in: query
        description: Comma-separated list of node IDs
        required: true
        schema:
          type: array
          items:
            type: string
        style: form
        explode: false
      responses:
        '200':
          description: Job runs retrieved successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NodeJobRunsList'
        '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
components:
  schemas:
    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
    NodeExportJobList:
      type: object
      properties:
        nodeId:
          type: string
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/FlowNodeExportJob'
    BulkNodeDeleteRequest:
      type: object
      required:
      - nodeIds
      properties:
        nodeIds:
          type: array
          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'
    CleanroomFlowNodeDetails:
      type: object
      properties:
        nodes:
          type: array
          items:
            $ref: '#/components/schemas/FlowNodeMetadata'
          description: Detailed information for all nodes in the flow
    FlowNodeExportJob:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
          description: Display name of the export job.
        status:
          type: string
          description: Job status (ACTIVE or PAUSED).
        channelStatus:
          type: string
          description: Health status of the export channel.
        partnerAccountId:
          type: string
        partnerAccountName:
          type: string
          description: Display name of the partner account.
        createdAt:
          type: string
          format: date-time
        lastRunTime:
          type: string
          format: date-time
          description: Timestamp of the last execution of this export job.
        exportParameters:
          type: array
          description: Export parameters configured for this job (e.g. S3 path, format).
          items:
            $ref: '#/components/schemas/ExportJobParameter'
    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
    NestedUserAudit:
      type: object
      properties:
        createdByUser:
          $ref: '#/components/schemas/UserRefInfo'
        updatedByUser:
          $ref: '#/components/schemas/UserRefInfo'
    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
    QuestionUserListOutput:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        type:
          type: string
        isEncrypt:
          type: boolean
    ListCleanroomFlowsResponse:
      type: object
      properties:
        cleanRoomFlows:
          type: array
          items:
            $ref: '#/components/schemas/ListItemCleanroomFlow'
        count:
          type: integer
          format: int32
    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
    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)
    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
    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'
    ExportJobParameter:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
    NodeDeleteResult:
      type: object
      properties:
        nodeId:
          type: string
        deletedJobIds:
          type: array
          items:
            type: string
    QuestionParameter:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        displayName:
          type: string
        type:
          type: string
        index:
          type: integer
        parameterType:
          type: string
    UserRefInfo:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        email:
          type: string
    NodeExportRequest:
      type: object
      required:
      - nodeId
      - partnerAccountIds
      properties:
        nodeId:
          type: string
          description: The node UUID or display label to create exports for.
        partnerAccountIds:
          type: array
          items:
            type: string
          description: Partner account IDs to export to. One job is created per partner account.
        exportParameters:
          type: array
          items:
            $ref: '#/components/schemas/ExportJobParameter'
          description: Optional export parameters (e.g. S3_EXPORT_PATH, GCS_EXPORT_PATH).
    BulkNodeStatusRequest:
      type: object
      required:
      - nodeIds
      - status
      properties:
        nodeIds:
          type: array
          items:
            type: string
        status:
          type: string
          description: Target status for all jobs under these nodes (ACTIVE or PAUSED).
    QuestionMetric:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        displayName:
          type: string
        type:
          type: string
        computed:
          type: boolean
    QuestionDataTypeField:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        type:
          type: string
        format:
          type: string
        description:
          type: string
    QuestionDimension:
      type: object
      properties:
        ID:
          type: string
        name:
          type: string
        displayName:
          type: string
        type:
          type: string
        filterable:
          type: boolean
        plottable:
          type: boolean
    DatasetOwnership:
      type: string
      enum:
      - OWNER
      - PARTNER
      description: Dataset ownership type
    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
    NodeStatusResult:
      type: object
      properties:
        nodeId:
          type: string
        success:
          type: boolean
    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.
    FieldMapping:
      type: object
      properties:
        questionFieldName:
          type: string
          description: Question field name in the node
        datasetFieldName:
          type: string
          description: Dataset field name to map to
    ReturnObject:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
      required:
      - code
      - message
    NodeJobRunsList:
      type: object
      properties:
        nodeId:
          type: string
        jobRuns:
          type: array
          items:
            $ref: '#/components/schemas/ExportJobRun'
    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'
    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
    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
    JobDetailParameter:
      type: object
      properties:
        label:
          type: string
        value:
          type: string
    GetCleanroomFlowResponse:
      type: object
      description: Response object containing the cleanroom flow details
      properties:
        cleanRoomFlow:
          $ref: '#/components/schemas/ListItemCleanroomFlow'
    JobDetails:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        jobDetailParameters:
          type: array
          items:
            $ref: '#/components/schemas/JobDetailParameter'
    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'
    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'
    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
    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
        ownerOrganizationID:
          type: string
    GetDatasetOrganizationsRequest:
      type: object
      required:
      - datasetIdentifiers
      properties:
        datasetIdentifiers:
          type: array
          description: List of dataset identifiers (UUIDs or names)
          items:
            type: string
    AssignFlowDatasetsRequest:
      type: object
      required:
      - nodeDatasets
      proper

# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/habu/refs/heads/main/openapi/habu-cleanroom-flows-api-openapi.yml