# Connect your ER:LC server

> Link your ER:LC private server so Jellyn can read it live and run commands in game.

Linking your private server lets Jellyn see who is in game, read the commands, kills and joins, and send commands back: messages, kicks, bans, refreshes and more. Jellyn talks to your server through the official ER:LC API.

## Link a server

<Steps>
  <Step title="Get your server's API key">
    In ER:LC, open your private server's settings and copy its **API key** (ER:LC calls it the server key). Keep it secret: it lets whoever has it run commands in your server.
  </Step>
  <Step title="Paste it into Jellyn">
    On your server's **ER:LC** page, press **Link a server** and paste the key. The server owner or an admin can do this (or anyone with the **ER:LC connection** permission).
  </Step>
  <Step title="Authorize Jellyn on ER:LC">
    Press **Authorize Jellyn on ER:LC**. It opens ER:LC's own page: the private server's owner signs in with Roblox there and approves Jellyn.
  </Step>
  <Step title="Check it works">
    Back on the ER:LC page, press **Check now**. Jellyn sends the hint `:h Jellyn is connected to this server.` in game. When ER:LC takes it, the authorize button goes away.
  </Step>
</Steps>

<Warning title="Why authorizing matters">
  ER:LC only takes commands from apps the private server's owner has authorized. Until then, every command Jellyn sends fails with **error 4000**, *You are not authorized to perform this action on this server*: unbans, kicks, messages and rank changes alike. Reading the server works without it.
</Warning>

## More than one server

A server on Jellyn links up to **5** ER:LC servers, or **100** with <Badge color="grape">Jellyn+</Badge>. Each linked server keeps its own ER:LC settings: game features, the map's rules, team restrictions, AFK checks and the automations. Switching to another server brings back its settings, and keeps the ones you left.

## The ER:LC page

Once linked, the **ER:LC** page shows:

<CardGroup cols={2}>
  <Card title="Live server" icon="radio-tower">
    Players and the most it takes, the queue, staff in game, and **Join server**, which opens the private server from its join code.
  </Card>
  <Card title="Players in game" icon="users">
    Click someone for their card. Any player can be looked up by Roblox username, in game or not.
  </Card>
  <Card title="Server commands" icon="terminal">
    Run a command in game. Presets fill it in: message everyone, hint, private message, kick, kill, refresh, respawn, teleport, unban.
  </Card>
  <Card title="Recent activity" icon="history">
    Joins, kills, commands and moderator calls, 20 at a time.
  </Card>
</CardGroup>

<Note>
  ER:LC takes one command every 5 seconds. Jellyn queues what it sends, so a burst of commands goes out one after the other.
</Note>

## When something is wrong

| What the page says | What to do |
| --- | --- |
| **Key rejected: link a new one** | The key was changed or revoked in ER:LC. Copy the new key and link the server again. |
| **Offline: nobody is in the server** | Nothing is wrong: the private server is empty. |
| **Authorize Jellyn on ER:LC** | ER:LC refused a command (error 4000), or none has been sent yet. Authorize, then **Check now**. |

For more, see [Troubleshooting](/reference/troubleshooting#er-lc-commands-fail-with-error-4000).
