Create or update .env file:
RATE_LIMIT_MAX_REQUESTS=100
RATE_LIMIT_WINDOW_MS=60000
RATE_LIMIT_CLEANUP_INTERVAL_MS=300000npm startcurl -X POST http://localhost:3000/donations \
-H "Content-Type: application/json" \
-H "X-API-Key: my-api-key" \
-d '{"amount": 10, "recipient": "GBXYZ..."}'node test-rate-limit.js# Terminal 1: Start server
npm start
# Terminal 2: Run test
node test-rate-limit-api.jsAll donation endpoints require:
X-API-Key: your-api-key-here
- POST /donations
- POST /donations/verify
- GET /donations
- GET /donations/:id
Every response includes:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1705315800
{
"success": false,
"error": {
"code": "MISSING_API_KEY",
"message": "API key is required. Please provide X-API-Key header"
}
}{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please try again later",
"limit": 100,
"resetAt": "2024-01-15T10:30:00.000Z"
}
}- Requests: 100 per window
- Window: 60 seconds (1 minute)
- Cleanup: Every 5 minutes
- Monitor Headers: Check
X-RateLimit-Remainingbefore making requests - Handle 429: Implement retry logic with exponential backoff
- Unique Keys: Use different API keys for different applications
- Respect Reset: Wait until
resetAttime before retrying
See RATE_LIMITING.md for complete documentation.