curl --request POST \
--url https://api.erstan.com/v1/public/runs/{runId}/continue \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": "Approve the proposed change set and create the sales orders.",
"idempotencyKey": "quote-chat-98342-turn-2"
}
'{
"runId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentId": "<string>",
"laneId": "<string>",
"status": "<string>"
}{
"runId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentId": "<string>",
"laneId": "<string>",
"status": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}Send a follow-up turn to a terminal run
Sends the next user message into a terminal run’s conversation — the API twin of typing another message in the Erstan chat UI. Always poll the runId returned by this call: a completed chat-lane run of an interactive agent usually continues under the same runId with full conversation context, while failed/cancelled chat runs fork a fresh execution on the same thread, and agents that use post-run continuation (non-interactive agents and graphs with dedicated human-input nodes) fork the conversational post-run shell — including follow-up questions about completed structured runs. Only the same API key that started the run may continue it. Waiting runs keep their exact interaction contract (/reply, /approval); a run that is still executing returns run_still_active, and Builder Preview tests and structured runs of interactive agents return run_not_continuable.
curl --request POST \
--url https://api.erstan.com/v1/public/runs/{runId}/continue \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": "Approve the proposed change set and create the sales orders.",
"idempotencyKey": "quote-chat-98342-turn-2"
}
'{
"runId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentId": "<string>",
"laneId": "<string>",
"status": "<string>"
}{
"runId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentId": "<string>",
"laneId": "<string>",
"status": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"field": "<string>"
}
],
"requestId": "<string>"
}
}Authorizations
Workspace API key created in Erstan Settings. Keys carry scopes (agents:list, agents:read, agents:write, agents:run, runs:read, tasks:execute, documents:read, documents:write, files:read, files:write). Agent access follows the key creator's current workspace, team, and agent permissions. Agent draft creation requires agents:write; update, validation, and publishing require both agents:read and agents:write; draft testing also requires agents:run. Keys with tasks:execute must include at least one allowed project or team (allowedProjectIds / allowedTeamIds); keys with document or file scopes must include at least one allowed team. Empty allowlists mean no access — the API fails closed.
Path Parameters
Terminal run ID returned by POST /v1/public/agents/{agentId}/runs or a previous continue call.
Body
Request body for sending a follow-up conversation turn to a terminal run.
Next user message for the conversation.
1 - 20000Optional attachments supplied with this turn. Each item needs name, type, and either base64 or storageKey.
- Option 1
- Option 2
Show child attributes
Show child attributes
Reuse to prevent duplicate turns on retries of the same follow-up.
200Response
Existing accepted turn returned for a matching idempotency key.