API Key Management

The Limitly Next.js SDK provides comprehensive API key management capabilities for your application.

Creating API Keys

Create new API keys for your users:
import { Limitly } from '@limitly/limitly-nextjs';

const limitly = new Limitly({
  apiKey: process.env.LIMITLY_API_KEY!
});

// Create a new API key
const newApiKey = await limitly.apiKeys.create({
  name: 'User API Key',
  user_id: 123,
  plan_id: 'plan_456',
  status: 'active'
});

console.log('New API key:', newApiKey.data?.api_key);

Listing API Keys

Retrieve all API keys for the authenticated owner:
// Get all API keys
const apiKeys = await limitly.apiKeys.list({
  limit: 10,
  offset: 0
});

console.log('API keys:', apiKeys.data);

Getting API Key Details

Get detailed information about a specific API key:
// Get API key details
const apiKey = await limitly.apiKeys.get('key_123');

console.log('API key details:', {
  id: apiKey.data?.id,
  name: apiKey.data?.name,
  status: apiKey.data?.status,
  created_at: apiKey.data?.created_at,
  user_id: apiKey.data?.user_id,
  plan_id: apiKey.data?.plan_id
});

Updating API Keys

Update API key properties:
// Update an API key
const updatedApiKey = await limitly.apiKeys.update('key_123', {
  name: 'Updated API Key Name',
  status: 'inactive'
});

console.log('Updated API key:', updatedApiKey.data);

Deleting API Keys

Delete API keys when they’re no longer needed:
// Delete an API key
await limitly.apiKeys.delete('key_123');

console.log('API key deleted successfully');

Regenerating API Keys

Regenerate an existing API key to get a new key value:
// Regenerate an API key
const regeneratedApiKey = await limitly.apiKeys.regenerate('key_123');

console.log('New API key value:', regeneratedApiKey.data?.api_key);

API Key Usage

Get usage statistics for an API key:
// Get API key usage
const usage = await limitly.apiKeys.getUsage('key_123');

console.log('API key usage:', {
  totalRequests: usage.data?.totalRequests,
  requestsInPeriod: usage.data?.requestsInPeriod,
  percentageUsed: usage.data?.percentageUsed,
  limit: usage.data?.limit,
  planName: usage.data?.planName
});

API Key Requests History

Get detailed request history for an API key:
// Get API key requests history
const requests = await limitly.apiKeys.getRequests('key_123');

console.log('Request history:', {
  totalRequests: requests.data?.totalRequests,
  requestsInPeriod: requests.data?.requestsInPeriod,
  requestsDetails: requests.data?.requestsInPeriodDetails
});

API Route Example

Here’s a complete example of API key management in a Next.js API route:
// app/api/keys/route.ts
import { Limitly } from '@limitly/limitly-nextjs';

const limitly = new Limitly({
  apiKey: process.env.LIMITLY_API_KEY!
});

export async function POST(request: Request) {
  try {
    const body = await request.json();
    
    const newApiKey = await limitly.apiKeys.create({
      name: body.name,
      user_id: body.user_id,
      plan_id: body.plan_id,
      status: body.status || 'active'
    });

    return Response.json({
      success: true,
      apiKey: newApiKey.data
    });
  } catch (error) {
    return Response.json({
      success: false,
      error: error.message
    }, { status: 500 });
  }
}

export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url);
    
    const apiKeys = await limitly.apiKeys.list({
      limit: parseInt(searchParams.get('limit') || '10'),
      offset: parseInt(searchParams.get('offset') || '0')
    });

    return Response.json({
      success: true,
      apiKeys: apiKeys.data,
      count: apiKeys.count
    });
  } catch (error) {
    return Response.json({
      success: false,
      error: error.message
    }, { status: 500 });
  }
}

Error Handling

Handle API key management errors:
import { Limitly } from '@limitly/limitly-nextjs';

const limitly = new Limitly({
  apiKey: process.env.LIMITLY_API_KEY!
});

try {
  const apiKey = await limitly.apiKeys.create({
    name: 'Test Key',
    user_id: 123,
    plan_id: 'plan_456'
  });
  
  console.log('API key created:', apiKey.data?.api_key);
} catch (error) {
  if (error.message.includes('Invalid user')) {
    console.error('User not found');
  } else if (error.message.includes('Invalid plan')) {
    console.error('Plan not found');
  } else {
    console.error('Unexpected error:', error.message);
  }
}

API Key Properties

The SDK supports the following API key properties:
  • id: Unique identifier for the API key
  • name: Human-readable name for the API key
  • status: Either ‘active’ or ‘inactive’
  • created_at: Timestamp when the API key was created
  • last_used_at: Timestamp of last usage (optional)
  • user_id: Associated user ID (optional)
  • plan_id: Associated plan ID (optional)
  • api_key: The actual API key value (only included in creation/regeneration)

Next Steps