---
title: Merchant Offers
description: "Play 0x34, server → client."
---

`play` · `0x34` · **clientbound** (server → client)

Sends the trade list for a villager or wandering trader window `windowId`, including the input and output items, uses, experience, price adjustments, the villager level and experience, and whether the villager can restock. The server sends it after OpenScreen for a merchant. The client shows the trades in the trading screen.

Sent by the server, read by the client. Listen for it with `client.on("MerchantOffers", (data) => …)` on the receiving side.

## Fields

| Field | Type | Notes |
|---|---|---|
| `windowId` | ContainerID |  |
| `trades` | Array |  |
| `villagerLevel` | VarInt |  |
| `experience` | VarInt |  |
| `isRegularVillager` | Boolean |  |
| `canRestock` | Boolean |  |

## Send it

```ts
await client.sendPacket("MerchantOffers", {
  windowId: /* ContainerID */,
  trades: /* Array */,
  villagerLevel: /* VarInt */,
  experience: /* VarInt */,
  isRegularVillager: /* Boolean */,
  canRestock: /* Boolean */,
});
```

Field aliases listed under Notes are accepted as alternative keys when writing.

Source: [`src/Core/Versions/776/Packets/play/clientbound/MerchantOffers.ts`](https://github.com/GDLev/mc-protocol/blob/master/src/Core/Versions/776/Packets/play/clientbound/MerchantOffers.ts)
