# Who this key is

> The organisation a key acts for, and what its plan allows. Free.

`GET https://api.formalogic.io/v1/me`

Response 200: The organisation this key belongs to.

| Field | Type | Present | Meaning |
|---|---|---|---|
| `org_id` | string | always | The organisation this key acts for. Stable forever — use it as a scope key, not the slug, which can be renamed |
| `plan` | string | always | The tier the organisation is on |
| `requests_per_minute` | integer or null | always | What the plan is sold on. `null` if this build does not recognise the plan |
| `features` | array of strings | always | Features turned on for this organisation beyond its plan. Usually empty |

Errors (plus 401 `KEY_MISSING`, `KEY_UNKNOWN`, `KEY_REVOKED`, `KEY_EXPIRED` and 403 `ORG_DISABLED` on every endpoint):

| Status | Code | When |
|---|---|---|
| 404 | `NOT_FOUND` | No organisation for this key |

Use it to confirm a key works and to learn which organisation it belongs to.
A service that accepts Forma keys from its own users — an MCP server, a CI
step, an internal tool — calls this to check a key and scope by organisation,
rather than making a call that costs credits and reading the outcome.

## Response

```json
{
  "org_id": "org_01JBQ2X9V3K4M5N6P7R8S9T0UV",
  "plan": "pro",
  "requests_per_minute": 120,
  "features": []
}
```

## Free

Listing who you are costs no credits, for the same reason listing the
catalogue does not: you should not have to spend a credit to discover that you
have none left. A key with an empty balance still gets a `200` here.

## `requests_per_minute` is advisory

It is the number your plan is sold on, published so a client can pace itself
against the same figure rather than keeping its own copy that drifts when a
tier changes. Pace your calls to it; it may be enforced without notice. What
limits a call today is credits; running out returns [`402`](https://docs.formalogic.io/limits).

## `features`

Features turned on for your organisation beyond what your plan includes, by
name. For most organisations it is empty. A tool can read it to decide what to
offer, rather than trying a call and reading the refusal.

## Refusals

The usual key refusals apply, and this endpoint is the cheapest way to tell
them apart — `KEY_REVOKED` and `KEY_EXPIRED` are things a person can fix
themselves, if the tool asking on their behalf says which one happened. The
codes are in the Errors table above.
