---
title: Chat Command Signed
description: "Play 0x08, client → server."
---

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

Executes a command that has signed message arguments (for example `/msg` or `/say`). Alongside `command`, it carries `timestamp`, `salt`, one signature per signed argument, and the last-seen acknowledgement bitset with `checksum`. The server verifies the signatures against the player's chat session before running the command.

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

## Fields

| Field | Type | Notes |
|---|---|---|
| `command` | String |  |
| `timestamp` | Long |  |
| `salt` | Long |  |
| `argumentSignatures` | Array |  |
| `messageCount` | VarInt |  |
| `acknowledged` | Byte[] |  |
| `checksum` | UByte |  |

## Send it

```ts
await client.sendPacket("ChatCommandSigned", {
  command: /* String */,
  timestamp: /* Long */,
  salt: /* Long */,
  argumentSignatures: /* Array */,
  messageCount: /* VarInt */,
  acknowledged: /* Byte[] */,
  checksum: /* UByte */,
});
```

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

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