` element with a rendered `
` component instance
+
+
+ #### `unmountAPIKeys()` usage
+
+ ```js {{ filename: 'main.js', mark: [19] }}
+ import { Clerk } from '@clerk/clerk-js'
+
+ // Initialize Clerk with your Clerk Publishable Key
+ const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY
+
+ const clerk = new Clerk(clerkPubKey)
+ await clerk.load()
+
+ document.getElementById('app').innerHTML = `
+
+ `
+
+ const apiKeysDiv = document.getElementById('api-keys')
+
+ clerk.mountAPIKeys(apiKeysDiv)
+
+ // ...
+
+ clerk.unmountAPIKeys(apiKeysDiv)
+ ```
+
+
+## Properties
+
+All props are optional.
+
+
+ - `perPage?`
+ - `number`
+
+ The number of API keys to show per page. Defaults to `10`.
+
+ ---
+
+ - `showDescription?`
+ - `boolean`
+
+ Whether to show the description field in the API key creation form. Defaults to `false`.
+
+ ---
+
+ - `appearance?`
+ - [Appearance](/docs/guides/customizing-clerk/appearance-prop/overview) | undefined
+
+ Optional object to style your components. Will only affect [Clerk components](/docs/reference/components/overview) and not [Account Portal](/docs/guides/customizing-clerk/account-portal) pages.
+
+ ---
+
+ - `fallback?`
+ - `ReactNode`
+
+ An optional element to be rendered while the component is mounting.
+
+
+## Customization
+
+To learn about how to customize Clerk components, see the [customization documentation](/docs/guides/customizing-clerk/appearance-prop/overview).
+
+If Clerk's prebuilt components don't meet your specific needs or if you require more control over the logic, you can rebuild the existing Clerk flows using the Clerk API. For more information, see the [custom flow guides](/docs/guides/development/custom-flows/overview).
diff --git a/docs/reference/javascript/api-keys.mdx b/docs/reference/javascript/api-keys.mdx
new file mode 100644
index 0000000000..5957717b10
--- /dev/null
+++ b/docs/reference/javascript/api-keys.mdx
@@ -0,0 +1,149 @@
+---
+title: '`APIKeys`'
+description: The APIKeys object provides methods for creating, listing, and revoking API keys that allow users to grant third-party services programmatic access to your application's API endpoints.
+sdk: js-frontend
+---
+
+
+
+The `APIKeys` object provides methods for managing API keys that allow your application's users to grant third-party services programmatic access to your application's API endpoints on their behalf. API keys are long-lived, opaque tokens that can be instantly revoked.
+
+To use these methods, you must access them through the `Clerk` object: `clerk.apiKeys`.
+
+> [!NOTE]
+> If a `subject` parameter is not provided, the methods will automatically use the [Active Organization](!active-organization) ID if available, otherwise they will use the current User ID.
+
+## Methods
+
+### `getAll()`
+
+Retrieves a paginated list of API keys for the current user or organization. Returns a [`ClerkPaginatedResponse`][pag-ref] of [`APIKeyResource`](/docs/reference/javascript/types/api-key) objects.
+
+```typescript
+function getAll(params?: GetAPIKeysParams): Promise
>
+```
+
+#### `GetAPIKeysParams`
+
+
+ - `subject?`
+ - `string`
+
+ The user or organization ID to query API keys by. If not provided, defaults to the [Active Organization](!active-organization), then the current User.
+
+ ---
+
+ - `query?`
+ - `string`
+
+ A search query to filter API keys by name.
+
+ ---
+
+ - `initialPage?`
+ - `number`
+
+ A number that can be used to skip the first n-1 pages. For example, if `initialPage` is set to 10, it will skip the first 9 pages and will fetch the 10th page.
+
+ ---
+
+ - `pageSize?`
+ - `number`
+
+ A number that indicates the maximum number of results that should be returned for a specific page.
+
+
+#### Example
+
+```js
+await clerk.apiKeys.getAll()
+```
+
+### `create()`
+
+Creates a new API key. Returns an [`APIKeyResource`](/docs/reference/javascript/types/api-key) object that includes the `secret` property. **The secret is only available in the response from `create()` and cannot be retrieved later.**
+
+> [!WARNING]
+> Make sure to store the API key secret immediately after creation, as it will not be available again.
+
+```typescript
+function create(params: CreateAPIKeyParams): Promise
+```
+
+#### `CreateAPIKeyParams`
+
+
+ - `name`
+ - `string`
+
+ The name of the API key.
+
+ ---
+
+ - `subject?`
+ - `string`
+
+ The user or organization ID to associate the API key with. If not provided, defaults to the [Active Organization](!active-organization), then the current User.
+
+ ---
+
+ - `secondsUntilExpiration?`
+ - `number | null`
+
+ The number of seconds until the API key expires. Set to `null` or omit to create a key that never expires.
+
+ ---
+
+ - `description?`
+ - `string | null`
+
+ An optional description for the API key.
+
+
+#### Example
+
+```js
+const apiKey = await clerk.apiKeys.create({
+ name: 'My API Key',
+ secondsUntilExpiration: 86400, // 24 hours
+ description: 'API key for third-party service',
+})
+
+// Store the secret immediately
+console.log('API Key Secret:', apiKey.secret)
+```
+
+### `revoke()`
+
+Revokes an API key by ID. Returns an [`APIKeyResource`](/docs/reference/javascript/types/api-key) object.
+
+```typescript
+function revoke(params: RevokeAPIKeyParams): Promise
+```
+
+#### `RevokeAPIKeyParams`
+
+
+ - `apiKeyID`
+ - `string`
+
+ The ID of the API key to revoke.
+
+ ---
+
+ - `revocationReason?`
+ - `string | null`
+
+ An optional reason for revoking the API key.
+
+
+#### Example
+
+```js
+await clerk.apiKeys.revoke({
+ apiKeyID: 'ak_xxx',
+ revocationReason: 'No longer needed',
+})
+```
+
+[pag-ref]: /docs/reference/javascript/types/clerk-paginated-response
diff --git a/docs/reference/javascript/types/api-key.mdx b/docs/reference/javascript/types/api-key.mdx
new file mode 100644
index 0000000000..68854f2d98
--- /dev/null
+++ b/docs/reference/javascript/types/api-key.mdx
@@ -0,0 +1,123 @@
+---
+title: '`APIKeyResource`'
+description: An interface that describes an API key used to authenticate requests to your application's API endpoints.
+sdk: js-frontend
+---
+
+
+
+An interface that describes an API key used to authenticate requests to your application's API endpoints on behalf of a user or organization.
+
+## Properties
+
+
+ - `id`
+ - `string`
+
+ The unique identifier of the API key.
+
+ ---
+
+ - `type`
+ - `string`
+
+ The type of the API key. Currently always `'api_key'`.
+
+ ---
+
+ - `name`
+ - `string`
+
+ The API key's name.
+
+ ---
+
+ - `subject`
+ - `string`
+
+ The user or organization ID that the API key is associated with.
+
+ ---
+
+ - `scopes`
+ - `string[]`
+
+ An array of scopes that define what the API key can access.
+
+ ---
+
+ - `claims`
+ - `Record | null`
+
+ Custom claims associated with the API key.
+
+ ---
+
+ - `revoked`
+ - `boolean`
+
+ A boolean indicating whether the API key has been revoked.
+
+ ---
+
+ - `revocationReason`
+ - `string | null`
+
+ The reason for revoking the API key, if it has been revoked.
+
+ ---
+
+ - `expired`
+ - `boolean`
+
+ A boolean indicating whether the API key has expired.
+
+ ---
+
+ - `expiration`
+ - `Date | null`
+
+ The expiration date and time of the API key. `null` if the API key never expires.
+
+ ---
+
+ - `createdBy`
+ - `string | null`
+
+ The user ID for the user creating the API key.
+
+ ---
+
+ - `description`
+ - `string | null`
+
+ An optional description for the API key.
+
+ ---
+
+ - `secret?`
+ - `string | undefined`
+
+ The API key secret. **This property is only present in the response from [`create()`](/docs/reference/javascript/api-keys#create) and cannot be retrieved later.**
+
+ ---
+
+ - `lastUsedAt`
+ - `Date | null`
+
+ The date and time when the API key was last used to authenticate a request.
+
+ ---
+
+ - `createdAt`
+ - `Date`
+
+ The date when the API key was created.
+
+ ---
+
+ - `updatedAt`
+ - `Date`
+
+ The date when the API key was last updated.
+