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

# List API Keys

> List all API keys for the authenticated organization

## Overview

Returns the API keys for your organization, including creation date, last used timestamp, and scopes. The raw key secret is never returned; only the `prefix` (the first 12 characters of the key) is included, for identification. Use this to audit active keys, identify unused credentials, and manage key lifecycle.

Defaults to active keys only. Pass `status=revoked`, `status=expired`, or `status=all` to see revoked or expired keys for audit purposes.

Requires the `api-keys:manage` scope.

## Query Parameters

<ParamField query="status" type="string" default="active">
  Lifecycle filter: `active` (non-revoked, non-expired), `revoked`, `expired`, or `all`.
</ParamField>

<ParamField query="limit" type="integer" default="20">
  Items per page (max 100).
</ParamField>

<ParamField query="cursor" type="string">
  Pagination cursor from a previous response.
</ParamField>

## Response

<ResponseField name="object" type="string">Always `list`.</ResponseField>

<ResponseField name="data" type="object[]">
  <Expandable title="API key object">
    <ResponseField name="id" type="string">Key ID (`key_*`).</ResponseField>
    <ResponseField name="object" type="string">Always `api_key`.</ResponseField>
    <ResponseField name="name" type="string">Key name.</ResponseField>
    <ResponseField name="prefix" type="string">First 12 characters of the raw key, for identification. The full secret is never returned.</ResponseField>
    <ResponseField name="scopes" type="string[]">Authorized scopes.</ResponseField>
    <ResponseField name="rate_limit_tier" type="string">Rate limit tier label for the key.</ResponseField>
    <ResponseField name="status" type="string">Lifecycle state: `active`, `expired`, or `revoked`.</ResponseField>
    <ResponseField name="expires_at" type="string | null">Expiry timestamp, or `null` for a non-expiring key.</ResponseField>
    <ResponseField name="last_used_at" type="string | null">Timestamp of the last API call with this key, or `null` if never used.</ResponseField>
    <ResponseField name="metadata" type="object">Key-value metadata.</ResponseField>
    <ResponseField name="revoked_at" type="string | null">Revocation timestamp, or `null`.</ResponseField>
    <ResponseField name="created_by" type="string">ID of the API key that created this key.</ResponseField>
    <ResponseField name="created_at" type="string">Creation timestamp.</ResponseField>
    <ResponseField name="updated_at" type="string">Last update timestamp.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">Whether more pages are available.</ResponseField>

<ResponseField name="pagination" type="object">
  <Expandable title="Pagination">
    <ResponseField name="cursor" type="string | null">Cursor for the next page, or `null` on the last page.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="request_id" type="string">Unique request identifier for support and debugging.</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "object": "list",
    "data": [
      {
        "id": "key_Mc2eF6gH",
        "object": "api_key",
        "name": "Aurora Digital production",
        "prefix": "sig_7kMn2pQr",
        "scopes": ["trademarks:read", "billing:read"],
        "rate_limit_tier": "standard",
        "status": "active",
        "expires_at": null,
        "last_used_at": "2026-06-11T14:30:00.000Z",
        "metadata": {},
        "revoked_at": null,
        "created_by": "key_Lb1dE5fG",
        "created_at": "2026-01-05T12:00:00.000Z",
        "updated_at": "2026-06-11T14:30:00.000Z"
      },
      {
        "id": "key_Nd3fG7hI",
        "object": "api_key",
        "name": "Aurora Digital CI",
        "prefix": "sig_9pQr4sTu",
        "scopes": ["trademarks:read"],
        "rate_limit_tier": "standard",
        "status": "active",
        "expires_at": "2026-12-31T23:59:59.000Z",
        "last_used_at": "2026-06-10T09:15:00.000Z",
        "metadata": { "environment": "ci" },
        "revoked_at": null,
        "created_by": "key_Mc2eF6gH",
        "created_at": "2026-02-01T12:00:00.000Z",
        "updated_at": "2026-06-10T09:15:00.000Z"
      }
    ],
    "has_more": false,
    "pagination": {
      "cursor": null
    },
    "request_id": "req_vO1fG7hI"
  }
  ```
</ResponseExample>

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/organization/api-keys" \
    -H "Authorization: Bearer sig_YOUR_KEY"
  ```

  ```typescript TypeScript theme={null}
  import { Signa } from "@signa-so/sdk";

  const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });

  const keys = await signa.organization.apiKeys.list();
  for (const key of keys.data) {
    console.log(key.name, key.status, key.last_used_at);
  }
  ```
</CodeGroup>

## Errors

| Status | Type               | Description                                  |
| ------ | ------------------ | -------------------------------------------- |
| 400    | `validation_error` | Invalid `status`, `limit`, or `cursor` value |
| 401    | `unauthorized`     | Missing or invalid API key                   |
| 403    | `forbidden`        | API key lacks `api-keys:manage`              |
| 429    | `rate_limited`     | Too many requests                            |

## Related Endpoints

* [Create API Key](/api-reference/administration/create-api-key), generate a new key
* [Get API Key](/api-reference/administration/get-api-key), single key detail
* [Rotate API Key](/api-reference/administration/rotate-api-key), rotate an existing key
