> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mesa.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# api_keys.list()

> List API keys for an organization.

List API keys visible to the authenticated key. Key secret values are not returned.

**Required scope: `admin`**

```python theme={null}
keys = await mesa.api_keys.list(limit=50)

for key in keys.api_keys:
    print(key.id, key.name, key.scopes)
```

## Options

<ParamField path="org" type="str | None">
  Organization override.
</ParamField>

<ParamField path="cursor" type="str | None">
  Opaque pagination cursor from a previous response.
</ParamField>

<ParamField path="limit" type="int | None">
  Maximum number of items to return. The server maximum is `100`.
</ParamField>

## Response

<ResponseField name="next_cursor" type="str | None">
  Cursor for the next page, or null when no more results remain.
</ResponseField>

<ResponseField name="has_more" type="bool">
  Whether another page of results is available.
</ResponseField>

<ResponseField name="api_keys" type="list[ApiKeyListItem]">
  API key summaries.
</ResponseField>

### ApiKeyListItem

<ResponseField name="id" type="str">
  API key ID.
</ResponseField>

<ResponseField name="name" type="str | None">
  API key name, or null when unnamed.
</ResponseField>

<ResponseField name="scopes" type="list[str]">
  Scopes granted to this key.
</ResponseField>

<ResponseField name="repo_ids" type="list[str] | None">
  Repository allowlist, or null when the key is not repo-scoped.
</ResponseField>

<ResponseField name="metadata" type="dict[str, object] | None">
  Additional API key metadata, or null when absent.
</ResponseField>

<ResponseField name="tags" type="dict[str, str]">
  User-defined API key tags.
</ResponseField>

<ResponseField name="last_used_at" type="datetime | None">
  Last use time, or null when the key has not been used.
</ResponseField>

<ResponseField name="expires_at" type="datetime | None">
  Expiration time, or null when the key does not expire.
</ResponseField>

<ResponseField name="revoked_at" type="datetime | None">
  Revocation time, or null when the key is active.
</ResponseField>

<ResponseField name="created_at" type="datetime">
  Creation time.
</ResponseField>
