Skip to content

Rate Limits

Last updated: Phase 8.5

Integration API

The Integration API (/api/v1/integration/*) enforces per-key rate limiting:

SettingDefaultConfigurable
Requests per window1,000VALIDONX_API_RATE_LIMIT_REQUESTS
Window duration3,600 seconds (1 hour)VALIDONX_API_RATE_LIMIT_PERIOD

Rate limit key: api:{X-API-Key} (anonymous requests use api:anonymous).

Response Headers

Every Integration API response includes:

HeaderDescription
X-RateLimit-LimitMaximum requests per window
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the window resets

When Exceeded

HTTP 429 Too Many Requests:

json
{
  "error": {
    "code": "RATE_LIMIT.EXCEEDED",
    "message": "Too many requests.",
    "status": 429,
    "type": "rate_limit",
    "details": {
      "limit": 1000,
      "reset": 3200
    }
  },
  "meta": {
    "request_id": "uuid",
    "api_version": "1"
  }
}

Additional headers on 429 responses:

HeaderDescription
Retry-AfterSeconds until the limit resets
X-RateLimit-Remaining0

Login Rate Limit

The login endpoint (POST /api/auth/login) has a separate throttle:

SettingValue
Max attempts5
Decay period60 seconds

Exceeding returns 429 Too Many Requests.

Admin and Tenant APIs

The Admin API (/api/v1/admin/*) and Tenant API (/api/v1/tenant/*) do not currently enforce per-request rate limits beyond Laravel's default throttling. These APIs are authenticated and intended for dashboard use, not high-volume automation.

Best Practices

  • Cache license validation results locally (recommended TTL: 5-15 minutes)
  • Use exponential backoff when receiving 429 responses
  • Monitor X-RateLimit-Remaining header to preemptively throttle
  • Contact support if you need higher limits for your use case

Built by Veltara Works