get_rate_limit_status
Check current Optimizely DXP API rate limits to monitor remaining requests, reset times, and usage percentages before executing batch operations.
Instructions
⏳ View current API rate limit status. REAL-TIME: <1s. Shows requests remaining (per minute and hourly), reset times, and current usage percentage. Optimizely API limits: 30/min, 500/hour per project. Use before batch operations to avoid hitting limits. Optional: project. Returns rate limit metrics and reset timestamps.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | No | ||
| projectId | No |
Implementation Reference
- Tool availability configuration defining get_rate_limit_status as available across all hosting types in the Monitoring category with description 'Get rate limit status'.'get_rate_limit_status': { hostingTypes: ['dxp-paas', 'dxp-saas', 'self-hosted', 'unknown'], category: 'Monitoring', description: 'Get rate limit status' },
- lib/cache-manager.ts:99-104 (helper)Lists 'get_rate_limit_status' in noCacheOperations set, ensuring real-time results without caching.'get_monitoring_stats', 'get_rate_limit_status', ...(Array.isArray(options.noCacheOperations) ? options.noCacheOperations : options.noCacheOperations || []) ]),
- lib/rate-limiter.ts:512-544 (handler)Implements getStatus(projectId) method returning comprehensive RateLimitStatus object with current usage, limits, throttling, backoff, and failure counts. This is the core execution logic for the get_rate_limit_status tool.getStatus(projectId: string): RateLimitStatus { const now = Date.now(); const limits = this.projectLimits.get(projectId); const throttle = this.throttleState.get(projectId); if (!limits) { return { projectId, requestsLastMinute: 0, requestsLastHour: 0, isThrottled: false, consecutiveFailures: 0, backoffUntil: null, lastRequest: 0 }; } const oneMinuteAgo = now - (60 * 1000); const oneHourAgo = now - (60 * 60 * 1000); return { projectId, requestsLastMinute: limits.requests.filter(r => r.timestamp > oneMinuteAgo).length, requestsLastHour: limits.requests.filter(r => r.timestamp > oneHourAgo).length, maxRequestsPerMinute: this.options.maxRequestsPerMinute, maxRequestsPerHour: this.options.maxRequestsPerHour, isThrottled: throttle ? throttle.retryAfter > now : false, throttleRetryAfter: throttle?.retryAfter, consecutiveFailures: limits.consecutiveFailures, backoffUntil: limits.backoffUntil > now ? limits.backoffUntil : null, lastRequest: limits.lastRequest }; }