Skip to main content
POST
/
v1
/
agents
/
{agent_id}
/
gateway
/
conversations
/
{conversation_id}
/
edit
/
{message_id}
Edit Message + Re-Invoke (Sync)
curl --request POST \
  --url https://api.xpander.ai/v1/agents/{agent_id}/gateway/conversations/{conversation_id}/edit/{message_id} \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "input": {
    "text": "",
    "files": [],
    "user": {
      "email": "<string>",
      "id": "<string>",
      "first_name": "<string>",
      "last_name": "<string>",
      "additional_attributes": {},
      "role": "member",
      "is_super_admin": false,
      "timezone": "<string>"
    }
  },
  "id": "<string>",
  "payload_extension": {},
  "parent_execution_id": "<string>",
  "worker_id": "<string>",
  "source": "<string>",
  "output_schema": {},
  "run_locally": false,
  "additional_context": "<string>",
  "instructions_override": "<string>",
  "test_run_node_id": "<string>",
  "expected_output": "<string>",
  "events_streaming": false,
  "mcp_servers": [],
  "triggering_agent_id": "<string>",
  "title": "<string>",
  "think_mode": "default",
  "disable_attachment_injection": false,
  "user_tokens": {},
  "user_oidc_token": "<string>",
  "return_metrics": false,
  "llm_model_provider": "<string>",
  "llm_model_name": "<string>"
}
'
import requests

url = "https://api.xpander.ai/v1/agents/{agent_id}/gateway/conversations/{conversation_id}/edit/{message_id}"

payload = {
"input": {
"text": "",
"files": [],
"user": {
"email": "<string>",
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"additional_attributes": {},
"role": "member",
"is_super_admin": False,
"timezone": "<string>"
}
},
"id": "<string>",
"payload_extension": {},
"parent_execution_id": "<string>",
"worker_id": "<string>",
"source": "<string>",
"output_schema": {},
"run_locally": False,
"additional_context": "<string>",
"instructions_override": "<string>",
"test_run_node_id": "<string>",
"expected_output": "<string>",
"events_streaming": False,
"mcp_servers": [],
"triggering_agent_id": "<string>",
"title": "<string>",
"think_mode": "default",
"disable_attachment_injection": False,
"user_tokens": {},
"user_oidc_token": "<string>",
"return_metrics": False,
"llm_model_provider": "<string>",
"llm_model_name": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {
text: '',
files: [],
user: {
email: '<string>',
id: '<string>',
first_name: '<string>',
last_name: '<string>',
additional_attributes: {},
role: 'member',
is_super_admin: false,
timezone: '<string>'
}
},
id: '<string>',
payload_extension: {},
parent_execution_id: '<string>',
worker_id: '<string>',
source: '<string>',
output_schema: {},
run_locally: false,
additional_context: '<string>',
instructions_override: '<string>',
test_run_node_id: '<string>',
expected_output: '<string>',
events_streaming: false,
mcp_servers: [],
triggering_agent_id: '<string>',
title: '<string>',
think_mode: 'default',
disable_attachment_injection: false,
user_tokens: {},
user_oidc_token: '<string>',
return_metrics: false,
llm_model_provider: '<string>',
llm_model_name: '<string>'
})
};

fetch('https://api.xpander.ai/v1/agents/{agent_id}/gateway/conversations/{conversation_id}/edit/{message_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.xpander.ai/v1/agents/{agent_id}/gateway/conversations/{conversation_id}/edit/{message_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input' => [
'text' => '',
'files' => [

],
'user' => [
'email' => '<string>',
'id' => '<string>',
'first_name' => '<string>',
'last_name' => '<string>',
'additional_attributes' => [

],
'role' => 'member',
'is_super_admin' => false,
'timezone' => '<string>'
]
],
'id' => '<string>',
'payload_extension' => [

],
'parent_execution_id' => '<string>',
'worker_id' => '<string>',
'source' => '<string>',
'output_schema' => [

],
'run_locally' => false,
'additional_context' => '<string>',
'instructions_override' => '<string>',
'test_run_node_id' => '<string>',
'expected_output' => '<string>',
'events_streaming' => false,
'mcp_servers' => [

],
'triggering_agent_id' => '<string>',
'title' => '<string>',
'think_mode' => 'default',
'disable_attachment_injection' => false,
'user_tokens' => [

],
'user_oidc_token' => '<string>',
'return_metrics' => false,
'llm_model_provider' => '<string>',
'llm_model_name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.xpander.ai/v1/agents/{agent_id}/gateway/conversations/{conversation_id}/edit/{message_id}"

payload := strings.NewReader("{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.xpander.ai/v1/agents/{agent_id}/gateway/conversations/{conversation_id}/edit/{message_id}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.xpander.ai/v1/agents/{agent_id}/gateway/conversations/{conversation_id}/edit/{message_id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": {\n \"text\": \"\",\n \"files\": [],\n \"user\": {\n \"email\": \"<string>\",\n \"id\": \"<string>\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"additional_attributes\": {},\n \"role\": \"member\",\n \"is_super_admin\": false,\n \"timezone\": \"<string>\"\n }\n },\n \"id\": \"<string>\",\n \"payload_extension\": {},\n \"parent_execution_id\": \"<string>\",\n \"worker_id\": \"<string>\",\n \"source\": \"<string>\",\n \"output_schema\": {},\n \"run_locally\": false,\n \"additional_context\": \"<string>\",\n \"instructions_override\": \"<string>\",\n \"test_run_node_id\": \"<string>\",\n \"expected_output\": \"<string>\",\n \"events_streaming\": false,\n \"mcp_servers\": [],\n \"triggering_agent_id\": \"<string>\",\n \"title\": \"<string>\",\n \"think_mode\": \"default\",\n \"disable_attachment_injection\": false,\n \"user_tokens\": {},\n \"user_oidc_token\": \"<string>\",\n \"return_metrics\": false,\n \"llm_model_provider\": \"<string>\",\n \"llm_model_name\": \"<string>\"\n}"

response = http.request(request)
puts response.read_body
{
  "id": "<string>",
  "agent_id": "<string>",
  "organization_id": "<string>",
  "input": {
    "text": "",
    "files": [],
    "user": {
      "email": "<string>",
      "display_name": "<string>",
      "id": "<string>",
      "first_name": "<string>",
      "last_name": "<string>",
      "additional_attributes": {},
      "role": "member",
      "is_super_admin": false,
      "timezone": "<string>"
    }
  },
  "created_at": "2023-11-07T05:31:56Z",
  "status": "pending",
  "internal_status": "<string>",
  "last_executed_node_id": "<string>",
  "agent_version": "<string>",
  "started_at": "2023-11-07T05:31:56Z",
  "paused_at": "2023-11-07T05:31:56Z",
  "finished_at": "2023-11-07T05:31:56Z",
  "result": "<string>",
  "parent_execution": "<string>",
  "sub_executions": [],
  "finished_sub_executions": [],
  "should_update_parent": false,
  "is_manually_stopped": false,
  "is_background": false,
  "payload_extension": {},
  "hitl_request": {
    "wait_node_id": "<string>"
  },
  "pending_eca_request": {
    "connector_name": "<string>",
    "auth_url": "<string>"
  },
  "source": "<string>",
  "worker_id": "<string>",
  "additional_context": "<string>",
  "instructions_override": "<string>",
  "expected_output": "<string>",
  "test_run_node_id": "<string>",
  "is_orchestration": false,
  "is_gateway": false,
  "output_format": "text",
  "voice_id": "<string>",
  "output_schema": {},
  "events_streaming": false,
  "used_mutating_tools": false,
  "is_continuous": false,
  "mcp_servers": [],
  "triggering_agent_id": "<string>",
  "title": "<string>",
  "think_mode": "default",
  "disable_attachment_injection": false,
  "deep_planning": {
    "enabled": false,
    "enforce": false,
    "started": false,
    "question_raised": false,
    "tasks": []
  },
  "execution_attempts": 1,
  "user_tokens": {},
  "user_oidc_token": "<string>",
  "return_metrics": false,
  "tokens": {
    "completion_tokens": 0,
    "prompt_tokens": 0,
    "total_tokens": 0
  },
  "llm_model_provider": "<string>",
  "llm_model_name": "<string>"
}
{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}
Trims every entry after the edited message, then re-runs the turn and returns the finalized execution. Preempts any in-flight run on the same conversation. Use the stream variant for live events. See the Agent Gateway overview for the full conversation model.

Authorizations

x-api-key
string
header
required

API Key for authentication

Path Parameters

agent_id
string
required
conversation_id
string
required
message_id
string
required

Query Parameters

version
string | null

Agent version to run.

Body

application/json
input
AgentExecutionInput · object
required
id
string | null
payload_extension
Payload Extension · object | null
parent_execution_id
string | null
worker_id
string | null
source
string | null
output_format
enum<string> | null
Available options:
text,
markdown,
json,
voice
output_schema
Output Schema · object | null
run_locally
boolean | null
default:false
additional_context
string | null
instructions_override
string | null
test_run_node_id
string | null
expected_output
string | null
events_streaming
boolean | null
default:false
mcp_servers
Mcp Servers · object[] | null
triggering_agent_id
string | null
title
string | null
think_mode
enum<string> | null
default:default
Available options:
default,
harder
disable_attachment_injection
boolean | null
default:false
user_tokens
User Tokens · object | null
user_oidc_token
string | null
return_metrics
boolean | null
default:false
llm_model_provider
string | null

Per-execution override for the LLM provider (e.g. 'openai', 'anthropic'). Falls back to the agent's configured provider when unset.

llm_model_name
string | null

Per-execution override for the LLM model name. Falls back to the agent's configured model when unset.

llm_reasoning_effort
enum<string> | null

Per-execution override for reasoning effort on reasoning-capable models.

Available options:
low,
medium,
high,
xhigh
source_node_type
enum<string> | null

Surface that created this execution (mirrored to AgentExecutionHistory.source_node_type). Falls back to SourceNodeType.SDK at persist time when unset.

Available options:
workbench,
sdk,
task,
assistant,
webhook,
mcp,
a2a,
telegram,
slack

Response

Successful Response

id
string
required
agent_id
string
required
organization_id
string
required
input
AgentExecutionInput · object
required
created_at
string<date-time>
required
status
enum<string> | null
default:pending
Available options:
pending,
executing,
paused,
error,
failed,
completed,
stopped
internal_status
string | null
last_executed_node_id
string | null
agent_version
string | null
started_at
string<date-time> | null
paused_at
string<date-time> | null
finished_at
string<date-time> | null
result
string | null
parent_execution
string | null
sub_executions
string[] | null
finished_sub_executions
string[] | null
should_update_parent
boolean | null
default:false
is_manually_stopped
boolean | null
default:false
is_background
boolean | null
default:false
payload_extension
Payload Extension · object | null
hitl_request
HumanInTheLoopRequest · object | null

Model representing human-in-the-loop approval records for tasks.

Attributes: wait_node_id (str): The id of the node that triggered this HITL.

pending_eca_request
PendingECARequest · object | null
source
string | null
worker_id
string | null
additional_context
string | null
instructions_override
string | null
expected_output
string | null
test_run_node_id
string | null
is_orchestration
boolean | null
default:false
is_gateway
boolean | null
default:false
output_format
enum<string> | null
default:text
Available options:
text,
markdown,
json,
voice
voice_id
string | null
output_schema
Output Schema · object | null
events_streaming
boolean | null
default:false
used_mutating_tools
boolean | null
default:false
is_continuous
boolean | null
default:false
mcp_servers
Mcp Servers · object[] | null
triggering_agent_id
string | null
title
string | null
think_mode
enum<string> | null
default:default
Available options:
default,
harder
disable_attachment_injection
boolean | null
default:false
deep_planning
DeepPlanning · object | null
execution_attempts
integer | null
default:1
user_tokens
User Tokens · object | null
user_oidc_token
string | null
return_metrics
boolean | null
default:false
tokens
LLMTokens · object | null
llm_model_provider
string | null

Snapshot of the LLM provider used for this execution (request override or agent default at run time).

llm_model_name
string | null

Snapshot of the LLM model name used for this execution (request override or agent default at run time).

llm_reasoning_effort
enum<string> | null

Snapshot of the reasoning effort applied during this execution, when supported by the model.

Available options:
low,
medium,
high,
xhigh