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

# Quickstart

> Get started with Limitly in minutes

Get started with Limitly in just a few minutes. This guide will walk you through setting up rate limiting for your application.

## Prerequisites

* Node.js 16+
* A Limitly account (sign up at [app.limitly.dev](https://app.limitly.dev))
* Your Limitly API key

## Step 1: Install the SDK

```bash theme={null}
npm install @limitly/limitly-js
```

## Step 2: Initialize the SDK

```typescript theme={null}
import { Limitly } from '@limitly/limitly-js';

const limitly = new Limitly({
  apiKey: 'lk_1234567890abcdef1234567890abcdef'
});
```

## Step 3: Create a Plan

First, create a usage plan for your users:

```typescript theme={null}
const plan = await limitly.plans.create({
  name: 'Basic Plan',
  description: 'Plan for basic users',
  max_requests: 10000,
  request_period: 'month',
  features: ['api_access', 'basic_analytics']
});

console.log('Created plan:', plan.data?.id);
```

## Step 4: Create a User

Create a user account:

```typescript theme={null}
const user = await limitly.users.create({
  name: 'John Doe',
  email: 'john@example.com',
  plan_id: plan.data?.id
});

console.log('Created user:', user.data?.user_id);
```

## Step 5: Generate an API Key

Create an API key for the user:

```typescript theme={null}
const apiKey = await limitly.apiKeys.create({
  name: 'Production API Key',
  user_id: user.data?.user_id,
  plan_id: plan.data?.id
});

console.log('API Key:', apiKey.data?.api_key);
```

## Step 6: Validate Requests

Now you can validate requests in your application:

```typescript theme={null}
// In your API middleware
app.use(async (req, res, next) => {
  const userApiKey = req.headers['x-api-key'];
  
  if (!userApiKey) {
    return res.status(401).json({ error: 'API key required' });
  }
  
  const result = await limitly.validation.validate(
    userApiKey,
    req.path,
    req.method
  );
  
  if (!result.success) {
    return res.status(429).json({ 
      error: result.error,
      details: result.details 
    });
  }
  
  // Add usage info to response headers
  res.set('X-RateLimit-Limit', result.details?.limit?.toString());
  res.set('X-RateLimit-Remaining', result.details?.remaining?.toString());
  res.set('X-RateLimit-Reset', result.details?.reset_time);
  
  next();
});
```

## Step 7: Test Your Integration

Test your rate limiting with a simple request:

```bash theme={null}
curl -H "X-API-Key: YOUR_USER_API_KEY" \
     http://localhost:3000/api/test
```

You should see the rate limit headers in the response:

```
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9999
X-RateLimit-Reset: 2024-02-01T00:00:00Z
```

## Complete Example

Here's a complete Express.js example:

```typescript theme={null}
import express from 'express';
import { Limitly } from '@limitly/limitly-js';

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

// Rate limiting middleware
app.use(async (req, res, next) => {
  const userApiKey = req.headers['x-api-key'] as string;
  
  if (!userApiKey) {
    return res.status(401).json({ error: 'API key required' });
  }
  
  try {
    const result = await limitly.validation.validate(
      userApiKey,
      req.path,
      req.method
    );
    
    if (!result.success) {
      return res.status(429).json({ 
        error: result.error,
        details: result.details 
      });
    }
    
    // Add usage info to response headers
    res.set('X-RateLimit-Limit', result.details?.limit?.toString());
    res.set('X-RateLimit-Remaining', result.details?.remaining?.toString());
    res.set('X-RateLimit-Reset', result.details?.reset_time);
    
    next();
  } catch (error) {
    console.error('Validation error:', error);
    return res.status(500).json({ error: 'Internal server error' });
  }
});

// Your API routes
app.get('/api/users', (req, res) => {
  res.json({ users: [] });
});

app.post('/api/users', (req, res) => {
  res.json({ message: 'User created' });
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});
```

## Next Steps

* [SDK Documentation](/sdk/installation) - Learn more about the SDK
* [API Reference](/api-reference/sdk) - Complete API reference
* [Authentication](/sdk/authentication) - Learn about authentication
* [Request Validation](/sdk/validation) - Understand request validation
