openapi: 3.2.0 info: version: v1.0.0 title: External APIs for Customer Integration Flow Decision Configurations 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: Flow Decision Configurations paths: /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 - name: cleanRoomOverride in: query description: If true, delete from the CRF-scoped override tier; if false, delete from the base tier required: false schema: type: boolean 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 components: schemas: GatedEdgesResponse: type: object properties: truePath: type: array items: $ref: '#/components/schemas/EdgeReferenceResponse' NodeConfigurationResponse: type: object properties: id: type: string nodeID: type: string name: type: string configIndex: type: integer parameters: type: object additionalProperties: type: string ReturnObject: type: object properties: code: type: string message: type: string required: - code - message CreateOrUpdateFlowDecisionConfigurationRequest: type: object required: - decisionNodes properties: decisionNodes: type: array items: $ref: '#/components/schemas/DecisionNodeInput' cleanRoomOverride: type: boolean description: If true, write to the CRF-scoped override tier; if false, write to the base tier 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 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 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 CreateOrUpdateFlowDecisionConfigurationResponse: type: object properties: success: type: boolean message: type: string decisionNodes: type: array items: $ref: '#/components/schemas/DecisionNodeInput' cleanRoomOverride: type: boolean description: True if config was written to the CRF-scoped override tier; false if written to the base tier DeleteFlowDecisionConfigurationResponse: type: object properties: success: type: boolean message: type: string deletedNodesCount: 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' 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 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' conditionsFailAction: type: string description: Action when conditions fail (RETRY_WITH_PARAMETERS or END_FLOW) default: RETRY_WITH_PARAMETERS gatedEdges: $ref: '#/components/schemas/GatedEdgesInput' 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' conditionsFailAction: type: string description: Action when conditions fail (RETRY_WITH_PARAMETERS or END_FLOW) gatedEdges: $ref: '#/components/schemas/GatedEdgesResponse' 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' GatedEdgesInput: type: object properties: truePath: type: array items: $ref: '#/components/schemas/EdgeReferenceInput' falsePath: type: array items: $ref: '#/components/schemas/EdgeReferenceInput' GetFlowDecisionConfigurationResponse: type: object properties: decisionNodes: type: array items: $ref: '#/components/schemas/DecisionNodeResponse' cleanRoomOverride: type: boolean description: True if the config was resolved from the CRF-scoped override tier; false if from the base tier responses: Unauthorized: description: Authorization information was missing or invalid content: application/json: schema: $ref: '#/components/schemas/ReturnObject' application/xml: schema: $ref: '#/components/schemas/ReturnObject' BadRequest: description: Bad Request - Incorrect syntax or request 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' NotFound: description: The specified resource was not found 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: {}