Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.limitly.dev/llms.txt

Use this file to discover all available pages before exploring further.

The Limitly Python SDK provides comprehensive plan management capabilities to configure rate limits and usage policies.

Creating Plans

Create new usage plans for your application:
from limitly import Limitly

limitly = Limitly(api_key="your_limitly_api_key")

# Create a new plan
new_plan = limitly.plans.create({
    "name": "Basic Plan",
    "description": "Basic usage plan with 1000 requests per month",
    "max_requests": 1000,
    "request_period": "month",
    "is_active": True
})

print(f"New plan created: {new_plan.data.id}")

Listing Plans

Retrieve all available plans:
# Get all plans
plans = limitly.plans.list()

print(f"Available plans: {plans.data}")

Getting Plan Details

Get detailed information about a specific plan:
# Get plan details
plan = limitly.plans.get("plan_123")

print("Plan details:", {
    "id": plan.data.id,
    "name": plan.data.name,
    "description": plan.data.description,
    "max_requests": plan.data.max_requests,
    "request_period": plan.data.request_period,
    "is_active": plan.data.is_active
})

Updating Plans

Update plan properties:
# Update a plan
updated_plan = limitly.plans.update("plan_123", {
    "name": "Updated Basic Plan",
    "description": "Updated description",
    "max_requests": 2000,
    "request_period": "month"
})

print(f"Updated plan: {updated_plan.data}")

Deleting Plans

Delete plans when they’re no longer needed:
# Delete a plan
limitly.plans.delete("plan_123")

print("Plan deleted successfully")

Plan Usage

Get usage statistics for a plan:
# Get plan usage
usage = limitly.plans.get_usage("plan_123")

print("Plan usage:", {
    "plan_id": usage.data.plan_id,
    "plan_name": usage.data.plan_name,
    "max_requests": usage.data.max_requests,
    "total_requests": usage.data.total_requests,
    "percentage_used": usage.data.percentage_used,
    "users_count": usage.data.users_count,
    "api_keys_count": usage.data.api_keys_count
})

Plan Users

Get all users associated with a plan:
# Get plan users
users = limitly.plans.get_users("plan_123")

print(f"Plan users: {users.data.users}")

Plan API Keys

Get all API keys associated with a plan:
# Get plan API keys
api_keys = limitly.plans.get_keys("plan_123")

print(f"Plan API keys: {api_keys.data.api_keys}")

FastAPI Example

Here’s a complete example of plan management in a FastAPI application:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from limitly import Limitly

app = FastAPI()
limitly = Limitly(api_key=os.getenv("LIMITLY_API_KEY"))

class CreatePlanRequest(BaseModel):
    name: str
    description: str = None
    max_requests: int
    request_period: str
    is_active: bool = True

@app.post("/api/plans")
async def create_plan(request: CreatePlanRequest):
    try:
        new_plan = limitly.plans.create({
            "name": request.name,
            "description": request.description,
            "max_requests": request.max_requests,
            "request_period": request.request_period,
            "is_active": request.is_active
        })
        
        return {
            "success": True,
            "plan": new_plan.data
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/api/plans")
async def list_plans():
    try:
        plans = limitly.plans.list()
        
        return {
            "success": True,
            "plans": plans.data,
            "count": plans.count
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Flask Example

Here’s a complete example of plan management in a Flask application:
from flask import Flask, request, jsonify
from limitly import Limitly

app = Flask(__name__)
limitly = Limitly(api_key=os.getenv("LIMITLY_API_KEY"))

@app.route("/api/plans", methods=["POST"])
def create_plan():
    try:
        data = request.get_json()
        
        new_plan = limitly.plans.create({
            "name": data["name"],
            "description": data.get("description"),
            "max_requests": data["max_requests"],
            "request_period": data["request_period"],
            "is_active": data.get("is_active", True)
        })
        
        return jsonify({
            "success": True,
            "plan": new_plan.data
        })
    except Exception as e:
        return jsonify({
            "success": False,
            "error": str(e)
        }), 500

@app.route("/api/plans", methods=["GET"])
def list_plans():
    try:
        plans = limitly.plans.list()
        
        return jsonify({
            "success": True,
            "plans": plans.data,
            "count": plans.count
        })
    except Exception as e:
        return jsonify({
            "success": False,
            "error": str(e)
        }), 500

Plan Properties

The SDK supports the following plan properties:
  • id: Unique identifier for the plan
  • owner_id: ID of the plan owner
  • name: Human-readable name for the plan
  • description: Optional description of the plan
  • max_requests: Maximum number of requests allowed
  • request_period: Period for the limit (‘day’, ‘week’, ‘month’, ‘year’)
  • is_active: Whether the plan is active
  • created_at: Timestamp when the plan was created
  • updated_at: Timestamp when the plan was last updated

Plan Periods

The SDK supports the following request periods:
  • day: Daily limits
  • week: Weekly limits
  • month: Monthly limits
  • year: Yearly limits

Error Handling

Handle plan management errors:
from limitly import Limitly, LimitlyError

limitly = Limitly(api_key=os.getenv("LIMITLY_API_KEY"))

try:
    plan = limitly.plans.create({
        "name": "Test Plan",
        "max_requests": 1000,
        "request_period": "month"
    })
    
    print(f"Plan created: {plan.data.id}")
    
except LimitlyError as e:
    if "Invalid request period" in str(e):
        print("Invalid request period")
    elif "Plan name exists" in str(e):
        print("Plan name already exists")
    else:
        print(f"Unexpected error: {e}")
except Exception as e:
    print(f"Unexpected error: {e}")

CLI Management

Use the CLI tool for plan management:
# Create a plan
limitly plans create --name "Basic Plan" --description "Basic usage" --max-requests 1000 --request-period month

# List plans
limitly plans list

# Get plan details
limitly plans get --plan-id plan_123

# Update a plan
limitly plans update --plan-id plan_123 --name "Updated Plan"

# Delete a plan
limitly plans delete --plan-id plan_123

Next Steps