> For the complete documentation index, see [llms.txt](https://developer.paddle.com/llms.txt).
>
> To search these docs, send a `GET` request to `https://paddle-docs-retrieval.kapa-paddle.workers.dev/?q=<question>` with a URL-encoded question. No authentication needed. It returns a JSON array of `{content, source_url}`, most relevant first.

# GET /api-keys/{api_key_id}/rotations/{rotation_id}

**Get an API key rotation**

Returns a rotation for an API key.

Authenticate using the rotatable API key the rotation belongs to — a key can only fetch its own rotations. Only API keys created as rotatable support this.

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `api_key_id` | string | required | Unique Paddle ID for this API key entity, prefixed with `apikey_`. (pattern: `^apikey_[a-z\d]{26}$`) |
| `rotation_id` | string | required | Unique Paddle ID for this API key rotation entity, prefixed with `apkrot_`. (pattern: `^apkrot_[a-z\d]{26}$`) |

## Response (200)

- `data`: object (required) — Represents an API key rotation entity.
  - `id`: string (required) — Unique Paddle ID for this API key rotation entity, prefixed with `apkrot_`. (pattern: `^apkrot_[a-z\d]{26}$`)
  - `api_key_id`: string (required) — Unique Paddle ID for this API key entity, prefixed with `apikey_`. (pattern: `^apikey_[a-z\d]{26}$`)
  - `new_key`: string (required) — The new API key secret created by this rotation.
  - `grace_period_seconds`: integer (required) — How long, in seconds, the old secret keeps working after the new secret is activated. The new secret is activated the first time it's used to authenticate a request. Set to `0` to stop the old secret working as soon as the new one is activated. (Range: 0–86400)
  - `new_key_expires_at`: string (date-time) | null (required) — RFC 3339 datetime string of when the API key should expire after this rotation. Applied when the new secret is activated. If omitted, the API key keeps its current expiry.
  - `expires_at`: string (date-time) | null (required) — RFC 3339 datetime string of when the old secret stops working. `null` until the new secret is activated.
  - `status`: string (required) — Status of this API key rotation.
    - `pending` — Rotation was created and the new secret was issued, but it hasn't been used yet. The current secret still works.
    - `completed` — The new secret was used and is now active. The old secret works until `expires_at`.
    - `canceled` — Rotation was canceled or replaced by a newer rotation before the new secret was used.
  - `created_at`: string (date-time) (required) — RFC 3339 datetime string of when this entity was created. Set automatically by Paddle.
  - `updated_at`: string (date-time) (required) — RFC 3339 datetime string of when this entity was updated. Set automatically by Paddle.
- `meta`: object (required) — Information about this response.
  - `request_id`: string (required) — Unique ID for the request relating to this response. Provide this when contacting Paddle support about a specific request.

### Response example

```json
{
  "data": {
    "id": "apkrot_01kjnm4a3w4jqdbtqvb2jwjdf7",
    "api_key_id": "apikey_01jkdpbhazdpn3wpcya45as9tg",
    "new_key": "pdl_live_apikey_01jkdpbhaz****",
    "grace_period_seconds": 3600,
    "new_key_expires_at": "2026-11-02T00:00:00Z",
    "expires_at": "2026-10-02T10:05:00.000Z",
    "status": "completed",
    "created_at": "2026-10-02T09:00:00.000Z",
    "updated_at": "2026-10-02T09:05:00.000Z"
  },
  "meta": {
    "request_id": "b2b4b6d7-6b7a-4b8e-9b3e-7a4d9f2a5c6e"
  }
}
```
