> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lusor.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Follow-up messages

> Send a new message into an existing session, on the same conversation.

A follow-up message continues a session with a new prompt. The agent keeps the conversation so far, so you can ask it to correct something, go one step further, or try again after a failure.

## Send one

```bash cURL theme={null}
curl https://api.lusor.ai/v1/sessions/<session id>/continue \
  -H "X-Api-Key: $LUSOR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1234-followup-1" \
  -d '{ "prompt": "Now open the order and tell me the tracking number." }'
```

```python Python theme={null}
import os, requests

r = requests.post(
    "https://api.lusor.ai/v1/sessions/<session id>/continue",
    headers={"X-Api-Key": os.environ["LUSOR_API_KEY"], "Idempotency-Key": "order-1234-followup-1"},
    json={"prompt": "Now open the order and tell me the tracking number."},
)
print(r.status_code, r.json())
```

```javascript Node.js theme={null}
const res = await fetch("https://api.lusor.ai/v1/sessions/<session id>/continue", {
  method: "POST",
  headers: {
    "X-Api-Key": process.env.LUSOR_API_KEY,
    "Content-Type": "application/json",
    "Idempotency-Key": "order-1234-followup-1",
  },
  body: JSON.stringify({ prompt: "Now open the order and tell me the tracking number." }),
});
console.log(res.status, await res.json());
```

The call returns `202`. The session id does not change: keep [following the same session](https://docs.lusor.ai/agents/follow-a-session.md).

| Field | Required | Notes |
| - | - | - |
| `prompt` | Yes | The follow-up message. |
| `maxDurationSecs` | No | A cap on how long the follow-up may take, in seconds. |

The follow-up uses the session's phone. For an agent's session, that is the phone the agent has now.

## While the session is still working

You do not have to wait for the session to finish. If it is still working, the follow-up waits behind the current work and starts when it ends. The response then has `queued: true` and an `invocationId`. To withdraw it before it starts, see [Stop a session](https://docs.lusor.ai/agents/stop-a-session.md#withdraw-a-waiting-message).

## Safe retries

Send an `Idempotency-Key` header. Sending the same key again returns the original follow-up instead of sending a second one. If the call returns `502` with `error: "dispatch_outcome_unknown"`, the follow-up may have been accepted: retry with the same key.

## Follow-up or new turn?

* Send a **follow-up message** to continue one specific session, for example to fix its result or to resume it after it ran out of credits.
* Send a **new turn** to give an agent its next task. The agent still remembers its earlier turns. See [Send a turn](https://docs.lusor.ai/agents/send-a-turn.md).

## Errors

| Status | `error` | Meaning |
| - | - | - |
| `400` | `bad_request` | `prompt` is missing or empty, or `maxDurationSecs` is not a positive whole number. |
| `402` | `credits_exhausted` | The workspace is out of credits. |
| `402` | `billing_required` | The session's Lusor Phone is not covered by an active paid plan. |
| `409` | `agent_needs_device` | The session's agent has no phone. Give it one first. |
| `409` | `recording_required` | This agent session started without a recording, so it cannot continue. Send a new turn instead. |
| `409` | `device_busy` | The phone is being reset or updated. Try again later. |
| `409` | `internet_route_inactive` | The Lusor Phone's internet connection is not active yet. |
| `409` | `device_releasing` | The phone is being removed from your Phone plan. |
| `429` | `device_busy` | The phone is working on a different session. Stop that session first. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.