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

`config` · `0x02` · **serverbound** (client → server)

Plugin message in the configuration state. `channel` is a namespaced identifier and `data` is arbitrary bytes. Vanilla clients send `minecraft:brand` with the client brand; the server ignores channels it does not know.

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: "example:configuration",
  data: Buffer.from([0x01, 0x02, 0x03]),
});
```

The contents of `data` are defined by the selected plugin channel. Unknown channels are normally ignored, so use a namespaced identifier owned by your mod or proxy.

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

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