# Read one key

URL: https://docs.fxapis.com/api-reference/api-keys/read-one-key

> Read one key. Needs an admin key (fx_admin_…), made by the workspace owner in the console — or a signed-in owner or admin.

`GET https://api.fxapis.com/v1/api-keys/{id}`

**Needs an admin key** (`fx_admin_…`), made by the workspace owner in the console — or a signed-in owner or admin. Ordinary API keys are refused with `ADMIN_KEY_REQUIRED`.

A key's name, scopes, environment label, hint and when it was last used — never the key itself, which is shown only once, when it is created.

Authentication: `Authorization: Bearer <API key>`.

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string (uuid) | yes |  |

#### Responses

- `200`
- `401`
- `403`
- `404`

Failures return `{ "error": { "code", "message" } }`; every code is listed at https://docs.fxapis.com/errors.

#### 200 response fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | object | no |  |
| `data.id` | string (uuid) | no |  |
| `data.name` | string | no |  |
| `data.publicId` | string | no | The key's public half. Safe to log and to show. |
| `data.hint` | string | no | The key with its secret elided, e.g. `fx_live_7f3a9c21_…`, for telling keys apart. |
| `data.environment` | "live" \| "test" | no |  |
| `data.scopes` | string[] | no |  |
| `data.lastUsedAt` | null \| string (date-time) | no | To the minute. Null if it has never been used. |
| `data.expiresAt` | null \| string (date-time) | no |  |
| `data.revokedAt` | null \| string (date-time) | no |  |
| `data.createdAt` | string (date-time) | no |  |
| `data.limits` | null \| object | no | What the key may open, on top of its scopes. Each field is its own limit; leave one out for no limit. Checked on every opening order the key places — through the API, a multi-account order, a TradingView hook it created, or MCP. Closing, cancelling and moving stops are never limited. A refused order answers `403 KEY_LIMIT_EXCEEDED`. |
| `data.limits.maxVolume` | null \| string | no | Lots per opening order. Example: `"1.00"` |
| `data.limits.symbols` | null \| string[] | no | Broker symbols or instruments the key may open, compared without case. Example: `["EURUSD","XAUUSD"]` |
| `data.limits.accountIds` | null \| string (uuid)[] | no | The accounts the key may open on. |
| `data.limits.maxOpeningOrdersPerDay` | null \| integer | no | Opening orders per UTC day. Each account in a multi-account order counts as one. Example: `100` |
| `data.createdBy` | null \| object | no | Who made the key in the console. Removing or suspending that person revokes it. Null for a key made with an admin key (see `createdByAdminKey`), or before keys recorded their maker. |
| `data.createdBy.id` | string (uuid) | no |  |
| `data.createdBy.name` | string | no |  |
| `data.createdByAdminKey` | null \| object | no | The admin key that made this key, when one did. Revoking that admin key does not revoke this one. |
| `data.createdByAdminKey.id` | string (uuid) | no |  |
| `data.createdByAdminKey.name` | string | no |  |