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

# POST /presentations/generate/:generationId/message

> Sends a follow-up message within an active generation job.

<RequestExample>
  ```shellscript cURL theme={null}
  curl "https://api.chroniclehq.com/api/v1/presentations/generate/gen_123/message" \
    -X POST \
    -H "Authorization: Bearer $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "content": "We help teams turn ideas into polished interactive presentations.",
      "attachments": [
        {
          "id": "att_456",
          "url": "https://chronicle-attachments.s3.us-east-1.amazonaws.com/...",
          "file_name": "case-study.pdf",
          "type": "application/pdf"
        }
      ]
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.chroniclehq.com/api/v1/presentations/generate/gen_123/message",
    {
      method: "POST",
      headers: {
        Authorization: `Bearer ${API_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        content:
          "We help teams turn ideas into polished interactive presentations.",
        attachments: [
          {
            id: "att_456",
            url: "https://chronicle-attachments.s3.us-east-1.amazonaws.com/...",
            file_name: "case-study.pdf",
            type: "application/pdf",
          },
        ],
      }),
    },
  );

  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

### Parameters

<ParamField path="generationId" type="string" required>
  The generation job ID
</ParamField>

<ParamField body="content" type="string" required>
  The user's reply to Chronicle's clarifying question. Sent as-is into the same
  generation conversation.
</ParamField>

<ParamField body="attachments" type="object[]">
  Optional list of files to attach to the follow-up message. Same shape as on
  [POST /presentations/generate](/post-presentations-generate) — upload each
  file via [POST /uploads/create-target](/post-uploads-create-target) first,
  then pass the returned `download_url` along with `id`, `file_name`, and
  `type`. All four fields are required on each entry.
</ParamField>

### Response

After accepting the follow-up, resume polling [`GET /presentations/generate/:generationId/status`](/get-generation-status) on the same `generationId`.

<ResponseExample>
  ```json Response theme={null}
  {
    "status": "generating"
  }
  ```
</ResponseExample>

<ResponseField name="status" type="string">
  Confirms the follow-up was accepted and generation is resuming. Continue
  polling the status endpoint with the original `generationId`.
</ResponseField>

***

## FAQs

<AccordionGroup>
  <Accordion title="When should I call this endpoint?">
    Call this endpoint when the generation status is `awaiting_input`.

    It sends the user’s response back into the same generation flow.
  </Accordion>

  <Accordion title="Can generation require more than one follow-up message?">
    Yes. Some generation flows require multiple follow-up messages before completion.

    Continue until the status changes to `completed` or `failed`.
  </Accordion>

  <Accordion title="What should I do after sending a follow-up message?">
    Resume polling the generation status endpoint.

    That tells you whether generation is continuing, needs more input, or has finished.
  </Accordion>

  <Accordion title="Can I attach files to a follow-up?">
    Yes. Upload each file via [POST /uploads/create-target](/post-uploads-create-target) first, then pass the captured `download_url` (with `id`, `file_name`, and `type`) in the `attachments` array — same shape as on `POST /presentations/generate`.
  </Accordion>
</AccordionGroup>

***

## Related posts

* [POST /uploads/create-target](/post-uploads-create-target)
* [GET /presentations/generate/:generationId/status](/get-generation-status)
* [POST /presentations/generate](/post-presentations-generate)
* [API scope and rate limits](/api-scope-rate-limits)
