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

# Poursuivre un run avec une nouvelle consigne

> Continuer une conversation Retriever par API avec un nouveau run, et gérer l'erreur conversation_busy.

Les exemples Node utilisent [le client Node commun](/recipes/client) (`retriever.mjs`).

**Problème** : le run a trouvé 30 entreprises. Vous voulez maintenant leurs emails, dans le même contexte.

**Solution** : lancez un nouveau run avec le `conversation_id` du premier.

```bash theme={null}
curl -X POST "$RETRIEVER_API_URL/v1/runs" \
  -H "Authorization: Bearer $RETRIEVER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"conversation_id":"conv_001","prompt":"Ajoute l email vérifié du CEO pour chaque entreprise."}'
```

```js theme={null}
import { call, sleep, waitRun } from "./retriever.mjs";

async function followUp(conversationId, prompt) {
  for (;;) {
    try {
      return await call("/v1/runs", { method: "POST", body: { conversation_id: conversationId, prompt } });
    } catch (error) {
      if (error.code !== "conversation_busy") throw error;
      const { items } = await call(`/v1/runs?conversation_id=${conversationId}&limit=1`);
      if (items[0]) await waitRun(items[0].id);
      else await sleep(15_000);
    }
  }
}
```

* L'agent garde l'historique et les tables de la conversation.
* Un seul run actif par conversation, sinon `409 conversation_busy`. Cela vaut aussi si quelqu'un discute dans l'app sur la même conversation.
* N'envoyez pas un `workspace_id` différent de celui de la conversation (`400 workspace_mismatch`).
