Stack Auth
Guides
SDKComponentsAPI Reference
OverviewFAQ
Getting Started
SetupComponentsUsersProductionExample-pages
Concepts
API KeysBackend IntegrationCustom User DataEmailsJWT TokensOAuth
OAuth Providers
Orgs and TeamsPermissionsStack AppTeam SelectionUser OnboardingWebhooks
Customization
Custom PagesCustom StylesDark ModeInternationalization
Page Examples
Other
CLI AuthenticationSelf-hostSupabaseConvex
Stack Auth Docs

API Keys

Create and manage API keys for users and teams

API keys provide a secure way for your users to authenticate with your application's backend. They enable programmatic access to your API services, allowing developers to associate requests with specific users or teams. Stack Auth provides prebuilt UI components for the users and teams to manage their own API keys.

Overview

API keys allow your users to access your backend services programmatically.

Stack Auth provides two types of API keys:

User API keys

User API keys are associated with individual users and allow them to authenticate with your API.

const user = await stackApp.getUser();

const apiKey = await user.createApiKey({
  description: "My client application",
  expiresAt: new Date(Date.now() + (90 * 24 * 60 * 60 * 1000)), // 90 days
  isPublic: false,
});
const user = await stackServerApp.getServerUserById("user-id-here");

const apiKey = await user.createApiKey({
  description: "Admin-provisioned API key",
  expiresAt: new Date(Date.now() + (30 * 24 * 60 * 60 * 1000)), // 30 days
  isPublic: false,
});

Team API keys

Team API keys are associated with teams and can be used to provide access to team resources over your API.

const user = await stackApp.getUser();
const team = await user.getTeam("team-id-here");

const teamApiKey = await team.createApiKey({
  description: "Team integration service",
  expiresAt: new Date(Date.now() + (60 * 24 * 60 * 60 * 1000)), // 60 days
  isPublic: false,
});
const team = await stackServerApp.getTeam("team-id-here");

const teamApiKey = await team.createApiKey({
  description: "Admin-provisioned team API key",
  expiresAt: new Date(Date.now() + (30 * 24 * 60 * 60 * 1000)), // 30 days
  isPublic: false,
});

Setting Up API Keys in Stack Auth

To use API keys in your application, you need to enable them in your project settings. Navigate to the Stack Auth dashboard, select your project, and enable User API Keys and/or Team API Keys in the project settings.

Working with API Keys

Creating User API Keys

const apiKey = await user.createApiKey({
  description: "Development environment key",
  expiresAt: new Date(Date.now() + (90 * 24 * 60 * 60 * 1000)), // 90 days from now
  isPublic: false,
});
const userId = "user-id-here";
const user = await stackServerApp.getServerUserById(userId);

const apiKey = await user.createApiKey({
  description: "API key created by server",
  expiresAt: new Date(Date.now() + (90 * 24 * 60 * 60 * 1000)), // 90 days
  isPublic: false,
});

Creating Team API Keys

const team = await user.getTeam("team-id-here");

const teamApiKey = await team.createApiKey({
  description: "Team service integration",
  expiresAt: new Date(Date.now() + (60 * 24 * 60 * 60 * 1000)), // 60 days
  isPublic: false,
});
const team = await stackServerApp.getTeam("team-id-here");

const teamApiKey = await team.createApiKey({
  description: "Server-created team API key",
  expiresAt: new Date(Date.now() + (60 * 24 * 60 * 60 * 1000)), // 60 days
  isPublic: false,
});

Listing API Keys

// List user's API keys
const userApiKeys = await user.listApiKeys();

// List a team's API keys
const team = await user.getTeam("team-id-here");
const teamApiKeys = await team.listApiKeys();

// Using hooks in React components
function ApiKeysList() {
  const user = useUser();
  const apiKeys = user.useApiKeys();
  const team = user.getTeam("team-id-here");
  const teamApiKeys = team.useApiKeys();

  // Render UI here.
}
// List a specific user's API keys
const user = await stackServerApp.getServerUserById("user-id-here");
const userApiKeys = await user.listApiKeys();

// List a team's API keys
const team = await stackServerApp.getTeam("team-id-here");
const teamApiKeys = await team.listApiKeys();

Revoking API Keys

API keys can be revoked when they are no longer needed or if they have been compromised.

const apiKeys = await user.listApiKeys();
const apiKeyToRevoke = apiKeys.find(key => key.id === "api-key-id-here");

if (apiKeyToRevoke) {
  await apiKeyToRevoke.revoke();
}
const user = await stackServerApp.getServerUserById("user-id-here");
const apiKeys = await user.listApiKeys();

const apiKeyToRevoke = apiKeys.find(key => key.id === "api-key-id-here");

if (apiKeyToRevoke) {
  await apiKeyToRevoke.revoke();
}

Checking API Key Validity

You can check if an API key is still valid:

const apiKeys = await user.listApiKeys();
const apiKey = apiKeys.find(key => key.id === "api-key-id-here");

if (apiKey && apiKey.isValid()) {
  // API key is valid
} else {
  // API key is invalid (expired or revoked)
  const reason = apiKey ? apiKey.whyInvalid() : "not found";
  console.log(`API key is invalid: ${reason}`);
}
Previous PageExample-pages
Next PageBackend Integration

On this page

OverviewUser API keysTeam API keysSetting Up API Keys in Stack AuthWorking with API KeysCreating User API KeysCreating Team API KeysListing API KeysRevoking API KeysChecking API Key Validity

Stack Auth AI

Experimental: AI responses may not always be accurate—please verify important details.

For the most accurate information, please join our Discord or email us.

How can I help?

Ask me about Stack Auth while you browse the docs.