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

# Messages

> Send and manage messages with the TypeScript SDK

## Send a Message

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  text: "Your verification code is 123456",
  channel: "sms", // optional: sms, whatsapp, email
  metadata: {
    userId: "user_123",
  },
  idempotencyKey: "unique-key", // optional: prevent duplicates
});

console.log(result.message.id); // msg_xxx
console.log(result.message.status); // queued
```

## Send with Sender

Specify which sender profile to use:

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  text: "Hello!",
  'Zavu-Sender': "snd_abc123",
});
```

## Send with Template

Send a WhatsApp template message:

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  messageType: "template",
  content: {
    templateId: "tpl_abc123",
    templateVariables: {
      "1": "John",
      "2": "12345",
    },
  },
});
```

## Send WhatsApp Media

### Image

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  messageType: "image",
  text: "Check out this product!",
  content: {
    mediaUrl: "https://example.com/image.jpg",
  },
});
```

### Document

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  messageType: "document",
  content: {
    mediaUrl: "https://example.com/invoice.pdf",
    filename: "invoice.pdf",
  },
});
```

### Video

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  messageType: "video",
  text: "Watch this!",
  content: {
    mediaUrl: "https://example.com/video.mp4",
  },
});
```

## Send Interactive Messages

### Buttons

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  messageType: "buttons",
  text: "How would you rate your experience?",
  content: {
    buttons: [
      { id: "great", title: "Great!" },
      { id: "okay", title: "It was okay" },
      { id: "poor", title: "Not good" },
    ],
  },
});
```

### List

```typescript theme={null}
const result = await client.messages.send({
  to: "+14155551234",
  messageType: "list",
  text: "Select an option:",
  content: {
    listButton: "View Options",
    sections: [
      {
        title: "Products",
        rows: [
          { id: "prod_1", title: "Product A", description: "$10.00" },
          { id: "prod_2", title: "Product B", description: "$20.00" },
        ],
      },
    ],
  },
});
```

## Send Email

```typescript theme={null}
const result = await client.messages.send({
  to: "user@example.com",
  channel: "email",
  subject: "Your order has shipped",
  text: "Hi John, your order #12345 has shipped.",
  htmlBody: "<h1>Order Shipped</h1><p>Your order #12345 has shipped.</p>",
  replyTo: "support@example.com",
});
```

## Send Email with Attachments

```typescript theme={null}
import fs from "fs";

const result = await client.messages.send({
  to: "user@example.com",
  channel: "email",
  subject: "Your invoice",
  text: "Please find your invoice attached.",
  attachments: [
    {
      filename: "invoice.pdf",
      content: fs.readFileSync("invoice.pdf").toString("base64"),
      content_type: "application/pdf",
    },
  ],
});
```

### Attachment from URL

```typescript theme={null}
const result = await client.messages.send({
  to: "user@example.com",
  channel: "email",
  subject: "Your report",
  text: "Report attached.",
  attachments: [
    {
      filename: "report.pdf",
      path: "https://your-server.com/reports/report.pdf",
    },
  ],
});
```

### Inline Image

```typescript theme={null}
const result = await client.messages.send({
  to: "user@example.com",
  channel: "email",
  subject: "Weekly report",
  text: "See your report.",
  htmlBody: '<h1>Report</h1><img src="cid:chart" />',
  attachments: [
    {
      filename: "chart.png",
      path: "https://your-server.com/chart.png",
      content_type: "image/png",
      content_id: "chart",
    },
  ],
});
```

## Get Message Status

```typescript theme={null}
const result = await client.messages.get({
  messageId: "msg_abc123",
});

console.log(result.message.status); // queued, sending, sent, delivered, failed
```

## List Messages

```typescript theme={null}
// List all messages
const result = await client.messages.list({});

// With filters
const result = await client.messages.list({
  status: "delivered",
  channel: "sms",
  limit: 100,
});

// Pagination
let cursor: string | undefined;
do {
  const result = await client.messages.list({ cursor, limit: 50 });
  for (const message of result.items) {
    console.log(message.id);
  }
  cursor = result.nextCursor ?? undefined;
} while (cursor);
```

## Send Reaction

React to a WhatsApp message:

```typescript theme={null}
const result = await client.messages.react({
  messageId: "msg_abc123",
  emoji: "👍",
});
```
