# Upload and download media

Use a configured `WhatsAppClient` from [Install and verify](/docs/npm-whatsapp/install). Examples below assume it is named `whatsapp`. Application callbacks such as `db`, `myDatabase`, and `queue` are supplied by your app; `fileBlob` is the Blob you intend to upload.

## Media

```ts
const upload = await whatsapp.media.uploadMedia(fileBlob, "image/jpeg", "photo.jpg");

await whatsapp.messages.sendImage("201234567890", {
  id: upload.id,
  caption: "Uploaded image",
});

const info = await whatsapp.media.getMediaInfo(upload.id);
const downloaded = await whatsapp.media.downloadMedia(upload.id);
```

Template header media uses Meta's resumable upload flow:

```ts
const result = await whatsapp.media.uploadTemplateMedia(fileBlob, "image/jpeg");
console.log(result.handle);
```