v5

latestOpenAPI 3.1.02026-08-043621,4011.8 MB
Agents Platform

Preview Merged Configuration

Returns the result of merging the source branch into the target branch without performing the merge. Useful for showing an accurate diff before confirming.

get/v1/convai/agents/{agent_id}/branches/{source_branch_id}/merge-preview

Path parameters

agent_idstring required

The id of an agent. This is returned on agent creation.

Example:agent_3701k3ttaq12ewp8b7qv5rfyszkz

The id of an agent. This is returned on agent creation.

source_branch_idstring required

Unique identifier for the source branch to merge from.

Example:agtbrch_8901k4t9z5defmb8vh3e9361y7nj

Unique identifier for the source branch to merge from.

Query parameters

target_branch_idstring required

The ID of the target branch to merge into.

Example:agtbrch_8901k4t9z5defmb8vh3e9361y7nj

The ID of the target branch to merge into.

forceboolean

When true, source branch changes always win conflicts regardless of timestamps

When true, source branch changes always win conflicts regardless of timestamps

Headers

xi-api-keystring nullable

Your API key. This is required by most endpoints to access our API programmatically. You can view your xi-api-key using the 'Profile' tab on the website.

Your API key. This is required by most endpoints to access our API programmatically. You can view your xi-api-key using the 'Profile' tab on the website.

Response

Successful Response

agent_idstring required

The ID of the agent

namestring required

The name of the agent

tagsstring[]

Agent tags used to categorize the agent

version_idstring nullable

The ID of the version the agent is on

branch_idstring nullable

The ID of the branch the agent is on

main_branch_idstring nullable

The ID of the main branch for this agent

overridden_fieldsstring[]

Dot-paths of config fields where both branches modified the same field relative to their common ancestor (conflicts). Present regardless of which side wins the conflict.

source_identical_to_targetboolean

True when the merge/rebase would be a no-op, i.e. the merged result is identical to the source branch tip. The rebase endpoint rejects in this case.

Example response

{
  "agent_id": "agent_7101k5zvyjhmfg983brhmhkd98n6",
  "name": "My Agent",
  "workflow": {
    "edges": {
      "entry_to_tool_a": {
        "forward_condition": {
          "condition": "Tool A condition",
          "type": "llm"
        },
        "source": "entry_node",
        "target": "tool_node_a"
      },
      "start_to_entry": {
        "forward_condition": {
          "type": "unconditional"
        },
        "source": "start_node",
        "target": "entry_node"
      },
      "tool_a_to_failure": {
        "forward_condition": {
          "successful": false,
          "type": "result"
        },
        "source": "tool_node_a",
        "target": "failure_node"
      },
      "tool_a_to_tool_b": {
        "forward_condition": {
          "successful": true,
          "type": "result"
        },
        "source": "tool_node_a",
        "target": "tool_node_b"
      },
      "tool_b_to_agent_transfer": {
        "forward_condition": {
          "type": "unconditional"
        },
        "source": "tool_node_b",
        "target": "success_transfer"
      },
      "tool_b_to_conversation": {
        "forward_condition": {
          "condition": "Conversation condition",
          "type": "llm"
        },
        "source": "tool_node_b",
        "target": "success_conversation"
      },
      "tool_b_to_end": {
        "forward_condition": {
          "condition": "End condition",
          "type": "llm"
        },
        "source": "tool_node_b",
        "target": "success_end"
      },
      "tool_b_to_phone": {
        "forward_condition": {
          "expression": {
            "children": [
              {
                "name": "force_phone_transfer",
                "type": "dynamic_variable"
              },
              {
                "prompt": "Phone condition",
                "type": "llm",
                "value_schema": {
                  "description": "Phone condition",
                  "type": "boolean"
                }
              },
              {
                "left": {
                  "name": "mode",
                  "type": "dynamic_variable"
                },
                "right": {
                  "type": "string_literal",
                  "value": "dev"
                },
                "type": "eq_operator"
              }
            ],
            "type": "or_operator"
          },
          "type": "expression"
        },
        "source": "tool_node_b",
        "target": "success_phone"
      }
    },
    "nodes": {
      "entry_node": {
        "additional_knowledge_base": [],
        "additional_prompt": "",
        "additional_tool_ids": [],
        "conversation_config": {},
        "edge_order": [
          "entry_to_tool_a"
        ],
        "entry_behavior": "auto",
        "label": "Entry",
        "position": {
          "x": 0,
          "y": 0
        },
        "type": "override_agent"
      },
      "failure_node": {
        "additional_knowledge_base": [],
        "additional_prompt": "",
        "additional_tool_ids": [],
        "conversation_config": {},
        "edge_order": [],
        "entry_behavior": "auto",
        "label": "Failure",
        "position": {
          "x": 0,
          "y": 0
        },
        "type": "override_agent"
      },
      "start_node": {
        "edge_order": [
          "start_to_entry"
        ],
        "position": {
          "x": 0,
          "y": 0
        },
        "type": "start"
      },
      "success_conversation": {
        "additional_knowledge_base": [],
        "additional_prompt": "",
        "additional_tool_ids": [],
        "conversation_config": {},
        "edge_order": [],
        "entry_behavior": "auto",
        "label": "Success A",
        "position": {
          "x": 0,
          "y": 0
        },
        "type": "override_agent"
      },
      "success_end": {
        "edge_order": [],
        "position": {
          "x": 0,
          "y": 0
        },
        "return_when_nested": true,
        "type": "end"
      },
      "success_phone": {
        "custom_sip_headers": [],
        "edge_order": [],
        "position": {
          "x": 0,
          "y": 0
        },
        "require_acceptance": false,
        "transfer_destination": {
          "phone_number": "+1234567890",
          "type": "phone"
        },
        "transfer_type": "conference",
        "type": "phone_number"
      },
      "success_transfer": {
        "agent_id": "success_transfer_agent",
        "delay_ms": 0,
        "edge_order": [],
        "enable_transferred_agent_first_message": false,
        "position": {
          "x": 0,
          "y": 0
        },
        "preserve_client_tts_overrides": false,
        "type": "standalone_agent"
      },
      "tool_node_a": {
        "edge_order": [
          "tool_a_to_failure",
          "tool_a_to_tool_b"
        ],
        "position": {
          "x": 0,
          "y": 0
        },
        "tools": [
          {
            "tool_id": "tool_a"
          },
          {
            "tool_id": "tool_b"
          }
        ],
        "type": "tool"
      },
      "tool_node_b": {
        "edge_order": [
          "tool_b_to_conversation",
          "tool_b_to_end",
          "tool_b_to_phone",
          "tool_b_to_agent_transfer"
        ],
        "position": {
          "x": 0,
          "y": 0
        },
        "tools": [
          {
            "tool_id": "tool_a"
          }
        ],
        "type": "tool"
      }
    },
    "prevent_subagent_loops": false
  }
}