openapi: 3.2.0 info: title: Happyrobot Versions API version: '1.0' description: 'Operations tagged Versions across 2 of this provider''s published API definitions: happyrobot-platform-v1-openapi.json, happyrobot-public-api-openapi.json. Each path carries the servers of the definition it was published in.' servers: - url: https://platform.happyrobot.ai/api/v1 - url: https://platform.happyrobot.ai/api/v2 tags: - name: Versions paths: /versions: get: description: Get all workflow versions for a given use case summary: Get workflow versions tags: - Versions parameters: - name: authorization in: header required: true schema: type: string description: Your API key for authentication. Use Bearer format. example: Bearer API_KEY - name: x-organization-id in: header required: true schema: type: string description: The organization ID to use for the request. Required if your user is associated to more than one organization. - name: use_case_id in: query description: The ID of the use case. required: true schema: type: string - name: with_changelog in: query description: Whether to include the changelog. schema: default: false type: - boolean - 'null' responses: '200': description: '200' content: application/json: schema: type: array items: type: object properties: id: type: string format: uuid slug: type: string maxLength: 256 org_id: type: string format: uuid use_case_id: type: string format: uuid version_number: type: - number - 'null' name: type: string maxLength: 256 is_published: type: boolean is_live: type: boolean environment: type: string enum: - staging - production source_version_id: type: - string - 'null' format: uuid timestamp: type: string format: date-time published_at: type: - string - 'null' format: date-time is_deleted: type: boolean description: type: - string - 'null' created_by: type: - string - 'null' format: uuid changelog: type: object properties: id: type: string format: uuid version_id: type: - string - 'null' format: uuid created_at: type: string format: date-time type: type: string enum: - fork - publish - unpublish - unlock - workflow_update - delete - misc description: type: - string - 'null' created_by: type: - string - 'null' format: uuid required: - id - version_id - created_at - type - description - created_by required: - id - slug - org_id - use_case_id - version_number - name - is_published - is_live - environment - source_version_id - timestamp - published_at - is_deleted - description - created_by description: A list of workflow versions. '404': description: '404' content: application/json: schema: type: object properties: message: type: string required: - message servers: - url: https://platform.happyrobot.ai/api/v1 /versions/{version_id}: get: description: Get a workflow version by ID summary: Get a workflow version tags: - Versions parameters: - name: version_id in: path required: true schema: type: string description: The ID of the workflow version. - name: authorization in: header required: true schema: type: string description: Your API key for authentication. Use Bearer format. example: Bearer API_KEY - name: x-organization-id in: header required: true schema: type: string description: The organization ID to use for the request. Required if your user is associated to more than one organization. responses: '200': description: '200' content: application/json: schema: type: object properties: id: type: string format: uuid slug: type: string maxLength: 256 org_id: type: string format: uuid use_case_id: type: string format: uuid version_number: type: - number - 'null' name: type: string maxLength: 256 is_published: type: boolean is_live: type: boolean environment: type: string enum: - staging - production source_version_id: type: - string - 'null' format: uuid timestamp: type: string format: date-time published_at: type: - string - 'null' format: date-time is_deleted: type: boolean description: type: - string - 'null' created_by: type: - string - 'null' format: uuid changelog: type: array items: type: object properties: id: type: string format: uuid version_id: type: - string - 'null' format: uuid created_at: type: string format: date-time type: type: string enum: - fork - publish - unpublish - unlock - workflow_update - delete - misc description: type: - string - 'null' created_by: type: - string - 'null' format: uuid required: - id - version_id - created_at - type - description - created_by description: The changelog for the version. required: - id - slug - org_id - use_case_id - version_number - name - is_published - is_live - environment - source_version_id - timestamp - published_at - is_deleted - description - created_by - changelog description: A workflow version. '404': description: '404' content: application/json: schema: type: object properties: message: type: string required: - message servers: - url: https://platform.happyrobot.ai/api/v1 /versions/{version_id}/: get: summary: Get a version with nodes summary tags: - Versions description: Returns a single version by UUID or slug with metadata, node count, node counts by type, and the list of events (action node types) used. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: id: type: string name: type: string slug: type: string workflow_slug: type: string version_number: type: - number - 'null' is_published: type: boolean is_live: type: boolean environment: type: string workflow_version: type: number published_at: type: - string - 'null' timestamp: type: string node_count: type: number node_counts_by_type: type: object additionalProperties: type: number events: type: array items: type: object properties: event_id: type: string name: type: string required: - event_id - name additionalProperties: false changelog: type: array items: type: object properties: id: type: string type: type: string description: type: - string - 'null' created_at: type: string created_by: type: - object - 'null' properties: type: type: string enum: - user - api_key name: type: - string - 'null' required: - type - name additionalProperties: false required: - id - type - description - created_at - created_by additionalProperties: false required: - id - name - slug - is_published - is_live - timestamp - node_count - node_counts_by_type - events - changelog additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false patch: summary: Update a version tags: - Versions description: Updates version metadata (name and/or description). Accepts a version UUID or slug as the path parameter. requestBody: content: application/json: schema: type: object properties: name: description: Version display name type: string minLength: 1 maxLength: 256 description: description: Version description type: string parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: id: type: string name: type: string slug: type: string workflow_slug: type: string version_number: type: - number - 'null' is_published: type: boolean is_live: type: boolean environment: type: string workflow_version: type: number published_at: type: - string - 'null' timestamp: type: string description: type: - string - 'null' required: - id - name - slug - is_published - is_live - timestamp additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/fork: post: summary: Fork a version tags: - Versions description: Creates a new version by copying all nodes from the specified version. The new version gets the next available version number and is unlocked/unpublished. If the source uses workflow engine v2, the fork remains an editable v2 draft and cannot be published through the public API until upgraded to v3. Any existing published v2 version remains live and continues running until explicitly unpublished. Accepts a version UUID or slug as the path parameter. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '201': description: Default Response content: application/json: schema: type: object properties: id: type: string name: type: string slug: type: string workflow_slug: type: string version_number: type: - number - 'null' is_published: type: boolean is_live: type: boolean environment: type: string workflow_version: type: number published_at: type: - string - 'null' timestamp: type: string description: type: - string - 'null' source_version_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ warnings: type: array items: type: string required: - id - name - slug - is_published - is_live - timestamp additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/publish: post: summary: Publish a version tags: - Versions description: 'Publishes the specified version to make it live. Before publishing, node configuration completeness is validated. If untested nodes exist, a synchronous test-all is triggered automatically. Test errors do not block publishing (matching UI behavior) but are returned as informational warnings in the `test_errors` field. Workflow engine v2 versions cannot be published through the public API. Existing published v2 versions remain live and continue running until explicitly unpublished; this endpoint does not stop them. For an eligible v3 target, either `unpublish_version_id` or `force: true` must be provided when a live version exists. Use `unpublish_version_id` to explicitly specify the live version to replace. Use `force: true` to automatically unpublish whatever version is currently live.' requestBody: content: application/json: schema: type: - object - 'null' properties: unpublish_version_id: description: ID of the currently live version to unpublish before publishing this one. Required when the workflow already has a live version, unless force is true. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ environment: default: production description: Target environment for publishing type: string enum: - production - staging - development force: default: false description: When true, automatically unpublishes any currently live version without requiring unpublish_version_id. type: boolean parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: id: type: string is_published: type: boolean is_live: type: boolean environment: type: string missing_variables: description: Variable references that could not be resolved against upstream nodes. Informational — does not block publishing. type: array items: type: object properties: node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ description: The node containing the broken reference node_name: description: Display name of the node type: - string - 'null' missing_variables: type: array items: type: object properties: group_id: type: string description: The referenced variable group ID (persistent_id of the source node) variable_id: type: string description: The referenced variable ID within the group required: - group_id - variable_id additionalProperties: false description: Variable references that could not be resolved required: - node_id - node_name - missing_variables additionalProperties: false test_errors: description: Nodes with test errors at time of publishing. Informational — does not block publishing (matches UI behavior). type: array items: type: object properties: node_id: type: string name: type: - string - 'null' error: type: string required: - node_id - name - error additionalProperties: false required: - id - is_published - is_live - environment additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: number errors: type: array items: type: object properties: node_id: type: string name: type: - string - 'null' error: type: string required: - node_id - name - error additionalProperties: false missing_variables: description: Variable references that could not be resolved against upstream nodes. type: array items: type: object properties: node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ description: The node containing the broken reference node_name: description: Display name of the node type: - string - 'null' missing_variables: type: array items: type: object properties: group_id: type: string description: The referenced variable group ID (persistent_id of the source node) variable_id: type: string description: The referenced variable ID within the group required: - group_id - variable_id additionalProperties: false description: Variable references that could not be resolved required: - node_id - node_name - missing_variables additionalProperties: false required: - error - message - statusCode additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '403': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '502': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/lock: post: summary: Lock a version tags: - Versions description: Locks the specified version, preventing further edits to its nodes. Accepts a version UUID or slug as the path parameter. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: id: type: string is_published: type: boolean is_live: type: boolean required: - id - is_published - is_live additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/unlock: post: summary: Unlock a version tags: - Versions description: Unlocks the specified version, allowing edits to its nodes. A version that is currently live cannot be unlocked — use unpublish instead. Accepts a version UUID or slug as the path parameter. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: id: type: string is_published: type: boolean is_live: type: boolean required: - id - is_published - is_live additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/unpublish: post: summary: Unpublish a version tags: - Versions description: Unpublishes the version (takes it offline) and unlocks it for editing. The version will no longer be live and its published lock is removed, allowing further modifications. The version must currently be live. Accepts a version UUID or slug as the path parameter. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: id: type: string is_published: type: boolean is_live: type: boolean required: - id - is_published - is_live additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '502': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/nodes: get: summary: List version nodes tags: - Versions description: Returns all workflow nodes belonging to the specified version. The version can be identified by its UUID or slug. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: type: array items: oneOf: - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - action name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string event_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ integration_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ trigger_interval: type: - string - 'null' multi_event_behavior: type: - string - 'null' required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - prompt name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string prompt: {} prompt_md: type: - string - 'null' initial_message: {} initial_message_uninterruptible: type: boolean model: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - tool name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string function: type: - object - 'null' additionalProperties: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - condition name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string type_of_condition: type: - string - 'null' order: type: - number - 'null' conditions: type: - array - 'null' items: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - module-change name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - path name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop_break name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop_end name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - cron name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false required: - data additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false post: summary: Add nodes to a version tags: - Versions description: 'Adds one or more nodes to the specified version. Nodes are processed sequentially in array order, so later nodes can reference earlier ones via `parent_node_index` (0-based index into this array) or existing DB nodes via `parent_node_id`. Each node must include a `type` discriminator: `"trigger"`, `"action"`, `"agent"`, `"tool"`, `"prompt"`, `"condition"`, `"module-change"`, `"loop"`, `"path"`, or `"loop_break"`. When a trigger node is included, all existing nodes in the version are replaced and the batch defines the entire workflow from scratch. The entire operation is atomic — if any node fails, all changes are rolled back.' requestBody: content: application/json: schema: type: object properties: nodes: minItems: 1 maxItems: 50 type: array items: oneOf: - type: object properties: type: type: string enum: - trigger event_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ description: The trigger event ID name: description: Display name override type: string configuration: description: Trigger-specific configuration (JSONB) type: object additionalProperties: {} webhook_payload: description: Expected payload for webhook nodes. When provided, this is saved as the node output so downstream nodes can reference it. type: object additionalProperties: {} required: - type - event_id - type: object properties: type: type: string enum: - action event_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ description: The action event ID name: description: Display name override type: string configuration: description: Action-specific configuration (JSONB) type: object additionalProperties: {} parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 webhook_payload: description: Expected payload for webhook nodes. When provided, this is saved as the node output so downstream nodes can reference it. type: object additionalProperties: {} required: - type - event_id - type: object properties: type: type: string enum: - agent event_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ description: The agent event ID name: description: Display name override type: string configuration: description: Agent-specific configuration (JSONB) type: object additionalProperties: {} prompt: description: Prompt configuration for the auto-generated prompt child node type: object properties: prompt_md: description: Agent system prompt in markdown type: string initial_message: description: Agent initial message — accepts a plain string or Plate paragraph array type: array items: {} initial_message_uninterruptible: description: Whether the voice agent initial message is uninterruptible. type: boolean parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type - event_id - type: object properties: type: type: string enum: - tool name: description: Display name override type: string function: description: Tool function definition. type: object properties: description: type: array items: {} message: type: object properties: type: type: string enum: - ai - fixed - none description: type: array items: {} example: type: string parameters: type: array items: type: object properties: name: type: string description: type: array items: {} example: type: string required: type: boolean required: - name hold_music: type: object properties: type: type: string enum: - static - dynamic static: type: object properties: id: type: string name: type: string description: type: string required: - id - name dynamic: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' required: - type hold_music_asset_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ tool_index_id: type: string tool_index_hash: type: string is_mcp: type: boolean mcp_server_credential_id: type: string mcp_tool_name: type: string parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type - type: object properties: type: type: string enum: - prompt name: description: Display name override type: string prompt_md: description: System prompt in markdown (prompt nodes only) type: string initial_message: description: Initial message — accepts a plain string or Plate paragraph array (prompt nodes only) type: array items: {} initial_message_uninterruptible: description: Whether the voice agent initial message is uninterruptible. type: boolean model: description: 'LLM model selection as a TemplatedValue (e.g. { type: "static", static: { id: "turbo-one", name: "gpt-4.1" } }).' type: object properties: type: type: string enum: - static - dynamic static: type: object properties: id: type: string name: type: string description: type: string required: - id - name dynamic: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' required: - type parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type - type: object properties: type: type: string enum: - condition name: description: Display name override type: string type_of_condition: description: Type of condition branch. "conditional" evaluates rules, "fallback" catches unmatched cases. type: string enum: - fallback - conditional order: description: Order among sibling conditional branches. Auto-calculated if omitted. type: integer minimum: -9007199254740991 maximum: 9007199254740991 conditions: description: 'Condition rules. Each entry follows the ConditionSchema: { id?, title?, ors: [{ ands: [{ field: { group_id, variable_id }, condition: '''', value: [{ type: ''paragraph'', children: [{ text: ''...'' }] }] }] }], output?: [...] }. The ''value'' field MUST be an array of Plate paragraph objects — plain strings are rejected. Use an empty array [] to clear all conditions.' type: array items: type: object properties: id: type: string title: type: string ors: type: array items: type: object properties: id: type: string ands: type: array items: type: object properties: id: type: string field: type: object properties: group_id: type: string variable_id: type: string required: - group_id - variable_id condition: type: string value: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' required: - ands output: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type - type: object properties: type: type: string enum: - module-change name: description: Display name override type: string configuration: description: Module-change configuration (JSONB). Defaults to {}. type: object additionalProperties: {} module_node_index: description: Index of the target prompt node in the nodes array. Resolved to configuration.moduleId after all nodes are created. type: integer minimum: 0 maximum: 9007199254740991 parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type - type: object properties: type: type: string enum: - loop name: description: Display name override type: string execute_in_parallel: description: Whether loop iterations run in parallel. Defaults to true. This only controls execution strategy; variables produced by loop body nodes resolve as lists outside the loop in both sequential and parallel modes. type: boolean iterate_for: description: Fixed number of iterations. Mutually exclusive with iterate_over. Fixed-count loop bodies expose iteration_index and execute_in_parallel. type: - integer - 'null' minimum: -9007199254740991 maximum: 9007199254740991 iterate_over: description: Expression to iterate over (array variable). Mutually exclusive with iterate_for. Collection loop bodies expose iteration_index, execute_in_parallel, and the configured loop_variable. type: - string - 'null' loop_variable: description: Collection loops only. Name of the current item variable accessible inside the loop body. Defaults to "iteration_element". Collection loops also expose iteration_index and execute_in_parallel. Fixed-count loops expose iteration_index and execute_in_parallel instead. type: - string - 'null' do_child_run: description: Whether each iteration runs as a standalone child run instead of inline in the parent run. Defaults to false. type: boolean configuration: description: 'Tolerated fallback: loop settings may be nested here instead of at the top level. They are hoisted to the top level server-side (a top-level value wins), so this is type-validated. Prefer setting the fields at the top level.' type: object properties: execute_in_parallel: type: boolean iterate_for: type: - integer - 'null' minimum: -9007199254740991 maximum: 9007199254740991 iterate_over: type: - string - 'null' loop_variable: type: - string - 'null' do_child_run: type: boolean parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type - type: object properties: type: type: string enum: - path name: description: Display name override type: string parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type - type: object properties: type: type: string enum: - loop_break name: description: Display name override type: string parent_node_id: description: ID of an existing parent node. Mutually exclusive with parent_node_index. type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_node_index: description: 0-based index of a node earlier in this request's nodes array to use as parent. Mutually exclusive with parent_node_id. type: integer minimum: 0 maximum: 9007199254740991 required: - type required: - nodes required: true parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '201': description: Default Response content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string name: type: - string - 'null' parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ event_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ timestamp: type: string loop_end_id: description: ID of the auto-created loop_end node (only present for loop nodes) type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ condition_id: description: ID of the auto-created condition child (only present for path nodes) type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ fallback_id: description: ID of the auto-created fallback child (only present for path nodes) type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ required: - id - version_id - type - timestamp additionalProperties: false required: - data additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/nodes/{node_id}: get: summary: Get a single node tags: - Versions description: Returns the full details of a single node including its configuration. For webhook trigger nodes (INCOMING_HOOK or PREDEFINED_REQUEST), the response also includes production, staging, development, and test webhook URLs. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug - schema: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ in: path name: node_id required: true description: Node UUID security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: allOf: - oneOf: - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - action name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string event_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ integration_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ trigger_interval: type: - string - 'null' multi_event_behavior: type: - string - 'null' required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - prompt name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string prompt: {} prompt_md: type: - string - 'null' initial_message: {} initial_message_uninterruptible: type: boolean model: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - tool name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string function: type: - object - 'null' additionalProperties: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - condition name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string type_of_condition: type: - string - 'null' order: type: - number - 'null' conditions: type: - array - 'null' items: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - module-change name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - path name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop_break name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop_end name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - cron name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: webhook_urls: description: Webhook URLs for webhook trigger nodes. Only present when the node is a webhook trigger (INCOMING_HOOK or PREDEFINED_REQUEST). type: object properties: production: type: string description: Production webhook URL staging: type: string description: Staging webhook URL development: type: string description: Development webhook URL test: type: string description: Test webhook URL (targets this specific version) required: - production - staging - development - test additionalProperties: false additionalProperties: false required: - data additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false put: summary: Update a node tags: - Versions description: 'Updates the specified node. The request body must include a `type` discriminator matching the node type. Updatable fields depend on the type: - **trigger**: `name`, `configuration`, `webhook_payload` - **action**: `name`, `configuration`, `webhook_payload` - **agent**: `name`, `configuration`, `prompt` - **tool**: `name`, `function` - **prompt**: `name`, `prompt_md`, `initial_message`, `model` - **condition**: `name`, `type_of_condition`, `order`, `conditions` - **module-change**: `name`, `configuration` - **loop**: `name`, `execute_in_parallel`, `iterate_for`, `iterate_over`, `loop_variable` (collection loops only), `do_child_run` - **path**: `name` - **loop_break**: `name` When `configuration` is provided for action/agent nodes, it is validated against the event-specific schema from the events registry.' requestBody: content: application/json: schema: oneOf: - type: object properties: type: type: string enum: - trigger event_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ description: The trigger event ID name: description: Display name override type: string configuration: description: Trigger-specific configuration (JSONB) type: object additionalProperties: {} webhook_payload: description: Expected payload for webhook nodes. When provided, this is saved as the node output so downstream nodes can reference it. type: object additionalProperties: {} required: - type - event_id - type: object properties: type: type: string enum: - action event_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ description: The action event ID name: description: Display name override type: string configuration: description: Action-specific configuration (JSONB) type: object additionalProperties: {} webhook_payload: description: Expected payload for webhook nodes. When provided, this is saved as the node output so downstream nodes can reference it. type: object additionalProperties: {} required: - type - event_id - type: object properties: type: type: string enum: - agent event_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ description: The agent event ID name: description: Display name override type: string configuration: description: Agent-specific configuration (JSONB) type: object additionalProperties: {} prompt: description: Prompt configuration for the auto-generated prompt child node type: object properties: prompt_md: description: Agent system prompt in markdown type: string initial_message: description: Agent initial message — accepts a plain string or Plate paragraph array type: array items: {} initial_message_uninterruptible: description: Whether the voice agent initial message is uninterruptible. type: boolean required: - type - event_id - type: object properties: type: type: string enum: - prompt name: description: Display name override type: string prompt_md: description: System prompt in markdown (prompt nodes only) type: string initial_message: description: Initial message — accepts a plain string or Plate paragraph array (prompt nodes only) type: array items: {} initial_message_uninterruptible: description: Whether the voice agent initial message is uninterruptible. type: boolean model: description: 'LLM model selection as a TemplatedValue (e.g. { type: "static", static: { id: "turbo-one", name: "gpt-4.1" } }).' type: object properties: type: type: string enum: - static - dynamic static: type: object properties: id: type: string name: type: string description: type: string required: - id - name dynamic: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' required: - type required: - type - type: object properties: type: type: string enum: - tool name: description: Display name override type: string function: description: Tool function definition. type: object properties: description: type: array items: {} message: type: object properties: type: type: string enum: - ai - fixed - none description: type: array items: {} example: type: string parameters: type: array items: type: object properties: name: type: string description: type: array items: {} example: type: string required: type: boolean required: - name hold_music: type: object properties: type: type: string enum: - static - dynamic static: type: object properties: id: type: string name: type: string description: type: string required: - id - name dynamic: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' required: - type hold_music_asset_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ tool_index_id: type: string tool_index_hash: type: string is_mcp: type: boolean mcp_server_credential_id: type: string mcp_tool_name: type: string required: - type - type: object properties: type: type: string enum: - condition name: description: Display name override type: string type_of_condition: description: Type of condition branch. "conditional" evaluates rules, "fallback" catches unmatched cases. type: string enum: - fallback - conditional order: description: Order among sibling conditional branches. Auto-calculated if omitted. type: integer minimum: -9007199254740991 maximum: 9007199254740991 conditions: description: 'Condition rules. Each entry follows the ConditionSchema: { id?, title?, ors: [{ ands: [{ field: { group_id, variable_id }, condition: '''', value: [{ type: ''paragraph'', children: [{ text: ''...'' }] }] }] }], output?: [...] }. The ''value'' field MUST be an array of Plate paragraph objects — plain strings are rejected. Use an empty array [] to clear all conditions.' type: array items: type: object properties: id: type: string title: type: string ors: type: array items: type: object properties: id: type: string ands: type: array items: type: object properties: id: type: string field: type: object properties: group_id: type: string variable_id: type: string required: - group_id - variable_id condition: type: string value: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' required: - ands output: type: array items: description: '!IMPORTANT: This schema describes one Paragraph object. When the containing field is an array of this schema, send a flat Paragraph[] array. Do not send a bare Paragraph object. Only send Paragraph[][] when the containing field is explicitly an array of arrays. Paragraph object schema: {type: ''paragraph'', children: Array<{text: string} | {type: ''variable'', children: [{text: ''''}], group_id: string, variable_id: string}>}' required: - type - type: object properties: type: type: string enum: - module-change name: description: Display name override type: string configuration: description: Module-change configuration (JSONB). Defaults to {}. type: object additionalProperties: {} module_node_index: description: Index of the target prompt node in the nodes array. Resolved to configuration.moduleId after all nodes are created. type: integer minimum: 0 maximum: 9007199254740991 required: - type - type: object properties: type: type: string enum: - loop name: description: Display name override type: string execute_in_parallel: description: Whether loop iterations run in parallel. Defaults to true. This only controls execution strategy; variables produced by loop body nodes resolve as lists outside the loop in both sequential and parallel modes. type: boolean iterate_for: description: Fixed number of iterations. Mutually exclusive with iterate_over. Fixed-count loop bodies expose iteration_index and execute_in_parallel. type: - integer - 'null' minimum: -9007199254740991 maximum: 9007199254740991 iterate_over: description: Expression to iterate over (array variable). Mutually exclusive with iterate_for. Collection loop bodies expose iteration_index, execute_in_parallel, and the configured loop_variable. type: - string - 'null' loop_variable: description: Collection loops only. Name of the current item variable accessible inside the loop body. Defaults to "iteration_element". Collection loops also expose iteration_index and execute_in_parallel. Fixed-count loops expose iteration_index and execute_in_parallel instead. type: - string - 'null' do_child_run: description: Whether each iteration runs as a standalone child run instead of inline in the parent run. Defaults to false. type: boolean configuration: description: 'Tolerated fallback: loop settings may be nested here instead of at the top level. They are hoisted to the top level server-side (a top-level value wins), so this is type-validated. Prefer setting the fields at the top level.' type: object properties: execute_in_parallel: type: boolean iterate_for: type: - integer - 'null' minimum: -9007199254740991 maximum: 9007199254740991 iterate_over: type: - string - 'null' loop_variable: type: - string - 'null' do_child_run: type: boolean required: - type - type: object properties: type: type: string enum: - loop_break name: description: Display name override type: string required: - type parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug - schema: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ in: path name: node_id required: true description: Node UUID to update security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: oneOf: - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - action name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string event_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ integration_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ trigger_interval: type: - string - 'null' multi_event_behavior: type: - string - 'null' required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - prompt name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string prompt: {} prompt_md: type: - string - 'null' initial_message: {} initial_message_uninterruptible: type: boolean model: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - tool name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string function: type: - object - 'null' additionalProperties: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - condition name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string type_of_condition: type: - string - 'null' order: type: - number - 'null' conditions: type: - array - 'null' items: {} required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - module-change name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - path name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop_break name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - loop_end name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false - type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ persistent_id: type: - string - 'null' version_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ workflow_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ org_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ parent_id: type: - string - 'null' format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: string enum: - cron name: type: - string - 'null' sort_index: type: - number - 'null' is_complete: type: - boolean - 'null' configuration: type: - object - 'null' additionalProperties: {} node_output: type: - object - 'null' properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ type: type: - string - 'null' data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - timestamp additionalProperties: false timestamp: type: string required: - id - version_id - workflow_id - org_id - type - timestamp additionalProperties: false required: - data additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false delete: summary: Delete a node tags: - Versions description: Deletes the specified node. For tool, condition, and paths-root nodes, owned child nodes are also cascade-deleted. For action, prompt, and module-change nodes, children are reparented to the deleted node's parent so the workflow chain is preserved. Agent nodes delete their internal children (prompt + tools) while reparenting downstream workflow nodes. The trigger node (root node with no parent) cannot be deleted. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug - schema: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ in: path name: node_id required: true description: Node UUID to delete security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: deleted_node_ids: type: array items: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ description: IDs of all nodes that were deleted required: - deleted_node_ids additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/nodes/{node_id}/available-vars: get: summary: List available variables for a node tags: - Versions description: Returns all variable groups available to the specified node, including system variables, environment variables, and upstream node outputs. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug - schema: type: string in: path name: node_id required: true description: The UUID of the node security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: string event_id: type: string icon: type: string name: type: string is_complete: type: boolean is_list: description: Whether variables in this group resolve as arrays. Loop body outputs set this when referenced outside the loop; sequential and parallel loops both return lists, including one-item lists for single-iteration loops. type: boolean variables: type: array items: type: object properties: id: type: string name: type: string type: type: string enum: - string - number - boolean - 'null' - object - array value: anyOf: - type: string - type: number - type: boolean - type: - string - 'null' enum: - null required: - id - name additionalProperties: false integration_name: type: string required: - id - name - is_complete - variables additionalProperties: false required: - data additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/nodes/{node_id}/config-schema: get: summary: Get config schema for a node tags: - Versions description: Returns the configuration schema for the node's event, including field types, required fields, current values, defaults, and validation status. Only works for action nodes (nodes with an event_id). parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug - schema: type: string in: path name: node_id required: true description: The UUID of the node security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: type: object properties: event_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$ event_name: type: string fields: type: array items: $ref: '#/components/schemas/schema0' current_values: type: - object - 'null' additionalProperties: {} defaults: type: - object - 'null' additionalProperties: {} validation: type: object properties: is_valid: type: boolean issues: type: array items: type: object properties: field: type: string message: type: string required: - message additionalProperties: false required: - is_valid - issues additionalProperties: false available_options: type: - object - 'null' properties: models: type: array items: type: object properties: id: type: string name: type: string description: type: string required: - id - name additionalProperties: false phone_numbers: type: array items: type: object properties: id: type: string name: type: string number: type: string required: - id - name - number additionalProperties: false voices: type: array items: type: object properties: id: type: string name: type: string language: type: string gender: type: string required: - id - name - language - gender additionalProperties: false languages: type: array items: type: object properties: id: type: string name: type: string required: - id - name additionalProperties: false credentials: type: array items: type: object properties: id: type: string title: type: string required: - id - title additionalProperties: false additionalProperties: false required: - event_id - event_name - fields - current_values - defaults - validation - available_options additionalProperties: false required: - data additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/nodes/{node_id}/custom-output: put: summary: Set custom node output tags: - Versions description: Sets a custom JSON object as the node's output for testing purposes. This creates a new node output record and links it to the node, marking the node as complete. Useful for defining output schemas on trigger nodes, webhooks, or any node where you want to manually specify the output shape without running the actual test. requestBody: content: application/json: schema: type: object properties: data: type: object additionalProperties: {} description: JSON object to use as the node's output. Must be an object — arrays and primitives are not allowed. required: - data required: true parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug - schema: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ in: path name: node_id required: true description: Node UUID security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ data: type: - object - 'null' additionalProperties: {} timestamp: type: string required: - id - node_id - data - timestamp additionalProperties: false required: - data additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/nodes/{node_id}/test: post: summary: Test a single node tags: - Versions description: Triggers a test run for a single node in the specified version. The node must have a complete configuration and the version must not be published. Returns the generated node output (schema) on success. requestBody: content: application/json: schema: default: {} type: - object - 'null' properties: environment: default: development description: Environment to use for variable resolution type: string enum: - production - staging - development parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug - schema: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ in: path name: node_id required: true description: Node UUID security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: type: object properties: id: type: string node_id: type: string type: type: - string - 'null' data: {} error: type: - string - 'null' timestamp: type: string required: - id - node_id - data - timestamp additionalProperties: false required: - data additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '502': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '504': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/test-all: post: summary: Test all nodes in a version tags: - Versions description: Triggers a synchronous test-all run for every testable node in the specified version. Nodes are executed in dependency waves — independent nodes run in parallel. If a node fails, dependent nodes are skipped. The endpoint blocks until all nodes have been tested and returns per-node results. requestBody: content: application/json: schema: default: {} type: - object - 'null' properties: environment: default: development description: Environment to use for variable resolution type: string enum: - production - staging - development parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: results: type: array items: type: object properties: node_id: type: string persistent_id: type: string name: type: string status: type: string enum: - success - failed - skipped error: type: string required: - node_id - persistent_id - name - status additionalProperties: false required: - results additionalProperties: false '400': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '502': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 /versions/{version_id}/prompt-issues: get: summary: List prompt issues tags: - Versions description: Returns prompt quality issues for all prompt nodes in the specified version. Issues are generated asynchronously by the platform's prompt analysis system. Each prompt node includes its current prompt text, issue generation status, and any open (non-rejected) issues with recommendations. parameters: - schema: type: string minLength: 1 in: path name: version_id required: true description: Version UUID or slug security: - bearerAuth: [] responses: '200': description: Default Response content: application/json: schema: type: object properties: data: type: array items: type: object properties: node_id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ node_name: type: - string - 'null' prompt_md: type: - string - 'null' initial_message: {} issue_generation_status: type: - string - 'null' issues: type: array items: type: object properties: id: type: string format: uuid pattern: ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$ issue_type: type: string recommendation: type: string status: type: string required: - id - issue_type - recommendation - status additionalProperties: false required: - node_id - node_name - prompt_md - initial_message - issue_generation_status - issues additionalProperties: false required: - data additionalProperties: false '401': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '404': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false '500': description: Default Response content: application/json: schema: type: object properties: error: type: string message: type: string statusCode: type: integer minimum: -9007199254740991 maximum: 9007199254740991 details: {} required: - error additionalProperties: false servers: - url: https://platform.happyrobot.ai/api/v2 components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: Opaque x-refined-from: - happyrobot-platform-v1-openapi.json - happyrobot-public-api-openapi.json