openapi: 3.2.0 info: version: v1.0.0 title: External APIs for Customer Integration Cleanroom Flow Runs 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 Flow Runs paths: /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: get: summary: List Cleanroom Flow Runs operationId: listCleanroomFlowRuns description: List cleanroom flow runs for a given cleanroom flow with optional search filters and pagination. 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: search in: query description: Case-insensitive partial search across flow run name, status, ID, and parent flow run ID required: false schema: type: string - name: limit in: query description: Maximum number of flow runs to return required: false schema: type: integer format: int32 default: 30 - name: offset in: query description: Number of flow runs to skip for pagination required: false schema: type: integer format: int32 default: 0 responses: '200': description: Successfully fetched Cleanroom Flow Runs content: application/json: schema: $ref: '#/components/schemas/ListCleanroomFlowRunsResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' tags: - 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}/preview-flow-run-parameters: post: summary: Preview Flow Run Parameters operationId: previewFlowRunParameters description: Returns the expected runtime and partition parameters for each question node that would be included in a flow run, without actually creating a run. Accepts the same request shape as Create Cleanroom Flow Run. If parentFlowRunId is set on the request, it is treated as a replay scenario. 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/PreviewFlowRunParametersInput' responses: '200': description: Successfully retrieved the preview of flow run parameters. content: application/json: schema: $ref: '#/components/schemas/PreviewFlowRunParametersResponse' '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}: 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 components: schemas: 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 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' ReplayCleanroomFlowRunApiResponse: type: object properties: success: type: boolean description: Success indicator cleanRoomFlowRunID: type: string description: The new flow run ID created for the replay FlowRunMetadataParameter: type: object properties: nodeId: type: string nodeQuestionName: type: string parameterMetadataList: type: array items: $ref: '#/components/schemas/ParameterInfo' ResumeCleanroomFlowRunApiResponse: type: object properties: success: type: boolean RunTableStats: type: object additionalProperties: type: string FlowNodeParameterPreview: type: object description: Per-node parameter preview containing question metadata and expected parameters properties: nodeId: type: string description: Internal node UUID nodeIdentifier: type: string description: Display label of the node questionName: type: string description: Title of the question associated with this node questionVersion: type: integer description: Version of the question nodeLevel: type: integer description: DAG depth of the node in the flow parameters: type: array description: Combined list of runtime and partition parameters items: $ref: '#/components/schemas/ParameterInfo' UnhygienixFieldType: type: string enum: - FIELD_TYPE_UNKNOWN - INTEGER - STRING - DATE - TIMESTAMP - DOUBLE - BIGINT - BOOLEAN - DECIMAL - LONG 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) FlowRunParameterValue: type: object properties: value: type: string parameterType: $ref: '#/components/schemas/ParameterType' 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' ListCleanroomFlowRunsResponse: type: object properties: cleanRoomFlowRuns: type: array items: $ref: '#/components/schemas/FlowRunMetadata' count: type: integer format: int32 FlowRunParameter: type: object properties: nodeId: type: string parameters: type: object additionalProperties: $ref: '#/components/schemas/FlowRunParameterValue' PreviewFlowRunParametersInput: type: object description: Input for previewing flow run parameters properties: 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 includeMismatchingTaggedNodes: type: boolean description: Include unmatched nodes when branch filtering is enabled datasetAssignments: type: array description: Dataset assignments for each node (used to derive partition parameters) items: $ref: '#/components/schemas/NodeDatasetAssignment' parentFlowRunId: type: string description: When set, preview is treated as a replay of this parent flow run GetCleanroomFlowRunStatusResponse: type: object properties: status: type: string 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 PreviewFlowRunParametersResponse: type: object properties: nodes: type: array items: $ref: '#/components/schemas/FlowNodeParameterPreview' 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 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 GetCleanroomFlowRunOutputNodeResponseObject: type: object properties: node: $ref: '#/components/schemas/CleanroomFlowRunOutputNode' runStatus: type: string runID: type: string 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' ParameterType: type: string enum: - RUN_TIME_PARAMETER - PARTITION_PARAMETER - ARTIFACT_FILE_METADATA - PARAMETER_UNKNOWN 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' CleanroomFlowRunOutputNodes: type: array items: $ref: '#/components/schemas/GetCleanroomFlowRunOutputNodeResponseObject' NodeParametersEntry: type: object properties: nodeIdentifier: type: string description: Node identifier parameters: type: object description: Parameters for this node additionalProperties: type: string RunTableMetadata: type: object properties: fieldName: type: string dataType: type: string columnName: type: string 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 GetCleanroomFlowRunParametersResponse: type: object properties: flowRunParameters: type: array items: $ref: '#/components/schemas/FlowRunMetadataParameter' ResumeCleanroomFlowRunInput: type: object properties: pauseLevelID: type: string description: Optional pause level ID at which to pause execution 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 responses: BadRequest: description: Bad Request - Incorrect syntax or request 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' NotFound: description: The specified resource was not found 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' securitySchemes: application: type: oauth2 flows: clientCredentials: tokenUrl: https://api.habu.com/v1/oauth/token scopes: {}