---
title: Custom Query Answer
description: "Login 0x02, client → server."
---

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

Answer to a login-phase `CustomQuery` plugin request. `messageId` matches the request; `data` is empty when the client does not understand the channel. The server uses it to complete mod or proxy handshakes before login finishes.

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

## Fields

| Field | Type | Notes |
|---|---|---|
| `messageId` | VarInt |  |
| `data` | Optional |  |

## Send it

```ts
await client.sendPacket("CustomQueryAnswer", {
  messageId: /* VarInt */,
  data: /* Optional */,
});
```

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

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