The Limitly SDK provides powerful request validation capabilities to enforce rate limits and usage policies.

Basic Validation

Validate a request using the user’s API key:
import { Limitly } from '@limitly/limitly-js';

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

// Validate a request
const result = await limitly.validation.validate(
  'user_api_key',
  '/api/users',
  'GET'
);

if (result.success) {
  console.log('Request allowed');
} else {
  console.log('Request denied:', result.error);
}

Express.js Integration

Integrate validation into your Express.js application:
import express from 'express';
import { Limitly } from '@limitly/limitly-js';

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

app.use(async (req, res, next) => {
  const apiKey = req.headers['x-api-key'] as string;
  
  if (!apiKey) {
    return res.status(401).json({ error: 'API Key required' });
  }

  const result = await limitly.validation.validate(
    apiKey,
    req.path,
    req.method
  );

  if (!result.success) {
    return res.status(429).json({
      error: 'Rate limit exceeded',
      details: result.details
    });
  }

  next();
});

app.get('/api/users', (req, res) => {
  res.json({ message: 'Users retrieved successfully' });
});

Validation Response

The validation method returns a detailed response:
interface ValidateRequestResponse {
  success: boolean;
  error?: string;
  details?: {
    current_usage: number;
    limit: number;
    plan_name: string;
    period_start: string;
    period_end: string;
  };
}

Error Handling

Handle different types of validation errors:
import { Limitly } from '@limitly/limitly-js';

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

try {
  const result = await limitly.validation.validate(
    'user_api_key',
    '/api/users',
    'GET'
  );
  
  if (result.success) {
    console.log('Request allowed');
    console.log('Remaining requests:', result.details?.limit - result.details?.current_usage);
  } else {
    console.log('Request denied:', result.error);
    if (result.details) {
      console.log('Retry after:', result.details.period_end);
    }
  }
} catch (error) {
  console.error('Validation error:', error);
}

Next Steps