# API keys and scopes

> What a read, write or train key can do, what only a signed-in person can do, and the rate limits.

Prompt for your AI: Read https://mousemouse.ai/docs/api-keys.md first. Tell me which API key scope I need for what I want to do, and nothing more. Ask me before anything that costs money or moves a robot.

An API key lets the CLI, a script or your own AI act as you. Each key has one
scope, and the scopes nest: `read` is inside `write`, which is inside `train`.
Give each key the least it needs.

## Creating a key

Open [API keys](/settings/keys), name the key, choose its scope and press
**Create key**. The page shows the key once. The hub keeps only a hash of it.
Only a signed-in person can create or revoke a key, so a key that leaks cannot
make another.

A key can also carry a **daily GPU-hour limit** on what it starts in Lucen
cloud. Leave it empty for no limit.

## What each scope can do

| Scope | What a key with it can do |
|---|---|
| no key | Search public robots, policies and datasets. Read a dataset's episodes. Read the Coach's principles and lessons. |
| `read` | All of the above, plus everything the key's owner can see: private repos, training runs and sim tests. |
| `write` | All of `read`, plus changing data: create repos, upload files, set a robot's card, import a run trained elsewhere. Connect a robot and ask to run a policy on it. |
| `train` | All of `write`, plus what can cost money: start training runs and sim tests, and ask the Coach for a diagnosis. |

## What only a signed-in person can do

These need a person signed in to the hub in a browser. No API key of any scope
can do them, and neither can an agent:

- create or revoke an API key;
- confirm a robot that claimed a pairing code;
- approve or deny a request to run a policy on a robot;
- stop a policy running on a robot;
- override a fine-tune rule, with a written reason.

[How approvals keep your robot safe](/docs/approvals) explains why.

## Where a key lives

- **The CLI** stores it with `lucen auth login`, in a file only you can read.
- **Your own AI** reads it from the MCP server's environment. No tool takes a
  key as an argument. [Use the hub from your AI](/docs/mcp) has the setup.
- **A script** sends it as `Authorization: Bearer lucen_sk_…`.

A robot never holds an API key. It pairs with a code and makes its own key.

## Limits

- 60 requests a minute without a key, per address.
- 600 requests a minute per key or signed-in person.
- The Coach has a daily allowance per account, shared by every key.

A private robot, policy, dataset or run answers "not found" to anyone who may
not see it. So does one that does not exist.

The [API reference](/docs/api) lists the scope of every operation.
