> For the complete documentation index, see [llms.txt](https://zumo.fusion.ac/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zumo.fusion.ac/documentation/getting-started/getting-a-key.md).

# Getting a key

Zumo issues consumer keys (`zk_*`) used to authenticate with Zed over Socket.IO and HTTP.

## Request

Join the [Zumo Discord](https://discord.gg/t4HAw5wvDf), then run:

```
/zed request
```

Pick **consume** events (what you may receive) and **provide** events if you need to emit `replayRequest`. Your request must be approved before the key works.

## ACL model

| Scope       | Used for                                               |
| ----------- | ------------------------------------------------------ |
| **consume** | Events you may receive on the consumer connection      |
| **provide** | Events you may emit. Required for **`replayRequest`**. |

Use `*` for all events in a scope. Prefer an explicit list.

{% hint style="info" %}
HTTP routes accept any approved, enabled key. Socket.IO delivery still checks consume ACL per event.
{% endhint %}

{% hint style="warning" %}
Zed caches keys for \~60s. Scope or approval changes may not apply immediately.
{% endhint %}

## Typical scopes

**Lobby**

```
playerJoined, playerLeft, chat, rawMessage, locrawResponse, gameJoin, disconnected, error
```

**Replay** (lifecycle on consume; request on provide)

```
consume: replayQueued, replayRejected, replayReady, replayStarted, replayProgress, replayFinished, replayFailed, replayBusy
provide: replayRequest
```

**Leaderboard / Bedwars**

```
temporaryLbChange, lifetimeLbChange, lbBan, bwStatsChanges, bwCosmeticsChanges, bwParty
```
