## Get Workflow version graph `workflows.versions.graph(strversion_id, VersionGraphParams**kwargs) -> VersionGraphResponse` **get** `/accounts/{account_id}/workflows/{workflow_name}/versions/{version_id}/graph` Retrieves the graph visualization of a workflow version. ### Parameters - `account_id: str` - `workflow_name: str` - `version_id: str` ### Returns - `class VersionGraphResponse: …` - `id: str` - `class_name: str` - `created_on: datetime` - `graph: Optional[Graph]` Versioned workflow graph payload. - `version: float` - `workflow: GraphWorkflow` A parsed workflow entrypoint with its step graph. - `class_name: str` - `functions: Dict[str, GraphWorkflowFunctions]` - `name: str` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["function_def"]` - `"function_def"` - `nodes: List[GraphWorkflowNode]` - `class GraphWorkflowNodeUnionMember0: …` - `duration: Union[float, str]` Duration as milliseconds (number) or human-readable string. - `float` - `str` - `name: str` - `type: Literal["step_sleep"]` - `"step_sleep"` - `resolves: Optional[float]` - `starts: Optional[float]` - `class GraphWorkflowNodeUnionMember1: …` - `config: GraphWorkflowNodeUnionMember1Config` Configuration for a step (retries and timeout). - `retries: GraphWorkflowNodeUnionMember1ConfigRetries` Retry policy for a step. - `backoff: Literal["constant", "linear", "exponential"]` Backoff strategy for step retries. - `"constant"` - `"linear"` - `"exponential"` - `delay: Union[float, str]` Duration as milliseconds (number) or human-readable string. - `float` - `str` - `limit: float` - `timeout: Union[float, str]` Duration as milliseconds (number) or human-readable string. - `float` - `str` - `name: str` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["step_do"]` - `"step_do"` - `resolves: Optional[float]` - `starts: Optional[float]` - `class GraphWorkflowNodeUnionMember2: …` - `name: str` - `options: Optional[GraphWorkflowNodeUnionMember2Options]` Options for a waitForEvent step. - `event_type: str` - `timeout: Union[float, str]` Duration as milliseconds (number) or human-readable string. - `float` - `str` - `type: Literal["step_wait_for_event"]` - `"step_wait_for_event"` - `payload: Optional[GraphWorkflowNodeUnionMember2Payload]` Shape descriptor for JSON payloads. - `class GraphWorkflowNodeUnionMember2PayloadType: …` - `type: Literal["unknown"]` - `"unknown"` - `class GraphWorkflowNodeUnionMember2PayloadUnionMember1: …` - `fields: Dict[str, object]` Nested JsonShape fields (recursive structure). - `type: Literal["object"]` - `"object"` - `resolves: Optional[float]` - `starts: Optional[float]` - `class GraphWorkflowNodeUnionMember3: …` - `name: str` - `timestamp: str` - `type: Literal["step_sleep_until"]` - `"step_sleep_until"` - `resolves: Optional[float]` - `starts: Optional[float]` - `class GraphWorkflowNodeUnionMember4: …` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["loop"]` - `"loop"` - `class GraphWorkflowNodeUnionMember5: …` - `kind: Literal["all", "any", "all_settled", "race"]` Parallel execution strategy. - `"all"` - `"any"` - `"all_settled"` - `"race"` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["parallel"]` - `"parallel"` - `class GraphWorkflowNodeUnionMember6: …` - `catch_block: Optional[GraphWorkflowNodeUnionMember6CatchBlock]` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["block"]` - `"block"` - `finally_block: Optional[GraphWorkflowNodeUnionMember6FinallyBlock]` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["block"]` - `"block"` - `try_block: Optional[GraphWorkflowNodeUnionMember6TryBlock]` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["block"]` - `"block"` - `type: Literal["try"]` - `"try"` - `class GraphWorkflowNodeUnionMember7: …` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["block"]` - `"block"` - `class GraphWorkflowNodeUnionMember8: …` - `branches: List[GraphWorkflowNodeUnionMember8Branch]` - `condition: Optional[str]` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["if"]` - `"if"` - `class GraphWorkflowNodeUnionMember9: …` - `branches: List[GraphWorkflowNodeUnionMember9Branch]` - `condition: Optional[str]` - `nodes: List[object]` Child nodes (recursive). - `discriminant: str` - `type: Literal["switch"]` - `"switch"` - `class GraphWorkflowNodeUnionMember10: …` - `class_name: str` - `functions: Dict[str, GraphWorkflowNodeUnionMember10Functions]` - `name: str` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["function_def"]` - `"function_def"` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["start"]` - `"start"` - `payload: Optional[GraphWorkflowNodeUnionMember10Payload]` Shape descriptor for JSON payloads. - `class GraphWorkflowNodeUnionMember10PayloadType: …` - `type: Literal["unknown"]` - `"unknown"` - `class GraphWorkflowNodeUnionMember10PayloadUnionMember1: …` - `fields: Dict[str, object]` Nested JsonShape fields (recursive structure). - `type: Literal["object"]` - `"object"` - `class GraphWorkflowNodeUnionMember11: …` - `name: str` - `type: Literal["function_call"]` - `"function_call"` - `resolves: Optional[float]` - `starts: Optional[float]` - `class GraphWorkflowNodeUnionMember12: …` - `name: str` - `nodes: List[object]` Child nodes (recursive). - `type: Literal["function_def"]` - `"function_def"` - `class GraphWorkflowNodeUnionMember13: …` - `kind: Literal["break", "return"]` Break or return from a loop. - `"break"` - `"return"` - `type: Literal["break"]` - `"break"` - `payload: Optional[GraphWorkflowPayload]` Shape descriptor for JSON payloads. - `class GraphWorkflowPayloadType: …` - `type: Literal["unknown"]` - `"unknown"` - `class GraphWorkflowPayloadUnionMember1: …` - `fields: Dict[str, object]` Nested JsonShape fields (recursive structure). - `type: Literal["object"]` - `"object"` - `modified_on: datetime` - `workflow_id: str` ### Example ```python import os from cloudflare import Cloudflare client = Cloudflare( api_token=os.environ.get("CLOUDFLARE_API_TOKEN"), # This is the default and can be omitted ) response = client.workflows.versions.graph( version_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", account_id="account_id", workflow_name="x", ) print(response.id) ``` #### Response ```json { "errors": [ { "code": 0, "message": "message" } ], "messages": [ { "code": 0, "message": "message" } ], "result": { "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "class_name": "class_name", "created_on": "2019-12-27T18:11:19.117Z", "graph": { "version": 0, "workflow": { "class_name": "class_name", "functions": { "foo": { "name": "name", "nodes": [ {} ], "type": "function_def" } }, "nodes": [ { "duration": 0, "name": "name", "type": "step_sleep", "resolves": 0, "starts": 0 } ], "payload": { "type": "unknown" } } }, "modified_on": "2019-12-27T18:11:19.117Z", "workflow_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e" }, "success": true, "result_info": { "count": 0, "per_page": 0, "total_count": 0, "cursor": "cursor", "page": 0, "total_pages": 0 } } ```