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

# Replying to a message

> Quote an earlier message so your reply appears attached to it in the chat.

Add `quoted_message_id` to any send and it goes out as a reply, with the original quoted above it — the same as pressing reply in WhatsApp.

```bash theme={null}
curl -X POST https://api.bulkneo.com/v1/messages/text \
  -H "apikey: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instance_id": "YOUR_INSTANCE_ID",
    "to": "919876543210",
    "text": "Yes — that works for us.",
    "quoted_message_id": "3EB0C1D2F4A5B6C7D8E9",
    "quoted_from_me": false
  }'
```

## The two fields

<ParamField body="quoted_message_id" type="string">
  The message being replied to. Up to 128 characters, made up of letters, digits, `_`, `=`, `+`, `/` and `-`.
</ParamField>

<ParamField body="quoted_from_me" type="boolean" default="false">
  `true` when the quoted message is one **you** sent from this number. `false` (the default) when it is one the contact sent you.
</ParamField>

<Note>
  `quoted_from_me` exists because the reply marker has to record who sent the quoted message, and that cannot be worked out from the id alone. It is only valid together with `quoted_message_id` — sending it on its own returns `400 invalid_request`.
</Note>

## Where the id comes from

Every successful send returns one:

```json theme={null}
{
  "success": true,
  "data": {
    "message_id": "3EB0C1D2F4A5B6C7D8E9",
    "…": "…"
  }
}
```

Store it against whatever the message was about — an order, a ticket, an invoice. Later you can quote it, or [react to it](/api-reference/messages/reaction).

```javascript Node.js — send, then follow up as a reply theme={null}
const first = await send({
  instance_id: instanceId,
  to: customer,
  text: "Your order #2043 is confirmed.",
});

await db.orders.update(2043, { whatsappMessageId: first.message_id });

// …later, when it ships
await send({
  instance_id: instanceId,
  to: customer,
  text: "It has shipped — arriving Thursday.",
  quoted_message_id: first.message_id,
  quoted_from_me: true,          // we sent the message being quoted
});
```

<Tip>
  Set `quoted_from_me: true` for this pattern. Quoting your own earlier send is the common case, because that is the id you actually have — you cannot see the ids of messages your customers send you.
</Tip>

## Which types support it

Every send type **except [reaction](/api-reference/messages/reaction)**, which does not need it — the message key it carries already identifies the conversation.

So text, image, video, document, voice note, sticker, location, contact card, poll, list and buttons all accept `quoted_message_id`.

## Limits

* The quote is attached to the conversation with the `to` number you send in the same request. Quoting a message from a different conversation will not work.
* There is no way to look up a message id after the fact. If you did not store the one the API returned, it is gone.
* Old messages may not quote cleanly if they have aged out of the recipient's chat history.
