---
title: Custom Payload (serverbound)
description: "Play 0x16, client → server."
---

`play` · `0x16` · **serverbound** (client → server)

Plugin message in the play state. `channel` is a namespaced identifier and `data` is arbitrary bytes (up to 32767). Vanilla uses `minecraft:brand`; mods and plugins use their own channels. The server ignores unknown channels.

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

## Fields

| Field | Type | Notes |
|---|---|---|
| `channel` | String |  |
| `data` | Byte[] |  |

## Send it

```ts
await client.sendPacket("CustomPayload", {
  channel: /* String */,
  data: /* Byte[] */,
});
```

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

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