{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/RatelimitRequest",
  "title": "RatelimitRequest",
  "type": "object",
  "required": [
    "name",
    "limit",
    "duration",
    "autoApply"
  ],
  "properties": {
    "name": {
      "description": "The name of this rate limit. This name is used to identify which limit to check during key verification.\n\nBest practices for limit names:\n- Use descriptive, semantic names like 'api_requests', 'heavy_operations', or 'downloads'\n- Be consistent with naming conventions across your application\n- Create separate limits for different resource types or operation costs\n- Consider using namespaced names for better organization (e.g., 'files.downloads', 'compute.training')\n\nYou will reference this exact name when verifying keys to check against this specific limit.",
      "type": "string",
      "example": "api",
      "minLength": 3,
      "maxLength": 128
    },
    "limit": {
      "description": "The maximum number of operations allowed within the specified time window.\n\nWhen this limit is reached, verification requests will fail with `code=RATE_LIMITED` until the window resets. The limit should reflect:\n- Your infrastructure capacity and scaling limitations\n- Fair usage expectations for your service\n- Different tier levels for various user types\n- The relative cost of the operations being limited\n\nHigher values allow more frequent access but may impact service performance.",
      "type": "integer",
      "format": "int64",
      "minimum": 1
    },
    "duration": {
      "description": "The duration for each ratelimit window in milliseconds.\n\nThis controls how long the rate limit counter accumulates before resetting. Common values include:\n- 1000 (1 second): For strict per-second limits on high-frequency operations\n- 60000 (1 minute): For moderate API usage control\n- 3600000 (1 hour): For less frequent but costly operations\n- 86400000 (24 hours): For daily quotas\n\nShorter windows provide more frequent resets but may allow large burst usage. Longer windows provide more consistent usage patterns but take longer to reset after limit exhaustion.",
      "type": "integer",
      "format": "int64",
      "minimum": 1000
    },
    "autoApply": {
      "description": "Whether this ratelimit should be automatically applied when verifying a key.",
      "type": "boolean",
      "default": false
    }
  }
}