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.

API Key Management

The Limitly Python SDK provides comprehensive API key management capabilities for your application.

Creating API Keys

Create new API keys for your users:
from limitly import Limitly

limitly = Limitly(api_key="your_limitly_api_key")

# Create a new API key
new_api_key = limitly.api_keys.create({
    "name": "User API Key",
    "user_id": 123,
    "plan_id": "plan_456",
    "status": "active"
})

print(f"New API key: {new_api_key.data.api_key}")

Listing API Keys

Retrieve all API keys for the authenticated owner:
# Get all API keys
api_keys = limitly.api_keys.list()

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

Getting API Key Details

Get detailed information about a specific API key:
# Get API key details
api_key = limitly.api_keys.get("key_123")

print("API key details:", {
    "id": api_key.data.id,
    "name": api_key.data.name,
    "status": api_key.data.status,
    "created_at": api_key.data.created_at,
    "user_id": api_key.data.user_id,
    "plan_id": api_key.data.plan_id
})

Updating API Keys

Update API key properties:
# Update an API key
updated_api_key = limitly.api_keys.update("key_123", {
    "name": "Updated API Key Name",
    "status": "inactive"
})

print(f"Updated API key: {updated_api_key.data}")

Deleting API Keys

Delete API keys when they’re no longer needed:
# Delete an API key
limitly.api_keys.delete("key_123")

print("API key deleted successfully")

Regenerating API Keys

Regenerate an existing API key to get a new key value:
# Regenerate an API key
regenerated_api_key = limitly.api_keys.regenerate("key_123")

print(f"New API key value: {regenerated_api_key.data.api_key}")

API Key Usage

Get usage statistics for an API key:
# Get API key usage
usage = limitly.api_keys.get_usage("key_123")

print("API key usage:", {
    "totalRequests": usage.data.totalRequests,
    "requestsInPeriod": usage.data.requestsInPeriod,
    "percentageUsed": usage.data.percentageUsed,
    "limit": usage.data.limit,
    "planName": usage.data.planName
})

API Key Requests History

Get detailed request history for an API key:
# Get API key requests history
requests = limitly.api_keys.get_requests("key_123")

print("Request history:", {
    "totalRequests": requests.data.totalRequests,
    "requestsInPeriod": requests.data.requestsInPeriod,
    "requestsDetails": requests.data.requestsInPeriodDetails
})

FastAPI Example

Here’s a complete example of API key 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 CreateApiKeyRequest(BaseModel):
    name: str
    user_id: int = None
    plan_id: str = None
    status: str = "active"

@app.post("/api/keys")
async def create_api_key(request: CreateApiKeyRequest):
    try:
        new_api_key = limitly.api_keys.create({
            "name": request.name,
            "user_id": request.user_id,
            "plan_id": request.plan_id,
            "status": request.status
        })
        
        return {
            "success": True,
            "api_key": new_api_key.data
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

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

Flask Example

Here’s a complete example of API key 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/keys", methods=["POST"])
def create_api_key():
    try:
        data = request.get_json()
        
        new_api_key = limitly.api_keys.create({
            "name": data["name"],
            "user_id": data.get("user_id"),
            "plan_id": data.get("plan_id"),
            "status": data.get("status", "active")
        })
        
        return jsonify({
            "success": True,
            "api_key": new_api_key.data
        })
    except Exception as e:
        return jsonify({
            "success": False,
            "error": str(e)
        }), 500

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

Error Handling

Handle API key management errors:
from limitly import Limitly, LimitlyError

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

try:
    api_key = limitly.api_keys.create({
        "name": "Test Key",
        "user_id": 123,
        "plan_id": "plan_456"
    })
    
    print(f"API key created: {api_key.data.api_key}")
    
except LimitlyError as e:
    if "Invalid user" in str(e):
        print("User not found")
    elif "Invalid plan" in str(e):
        print("Plan not found")
    else:
        print(f"Unexpected error: {e}")
except Exception as e:
    print(f"Unexpected error: {e}")

CLI Management

Use the CLI tool for API key management:
# Create an API key
limitly api-keys create --name "Test Key" --user-id 123 --plan-id plan_456

# List API keys
limitly api-keys list

# Get API key details
limitly api-keys get --key-id key_123

# Update an API key
limitly api-keys update --key-id key_123 --name "Updated Name"

# Delete an API key
limitly api-keys delete --key-id key_123

API Key Properties

The SDK supports the following API key properties:
  • id: Unique identifier for the API key
  • name: Human-readable name for the API key
  • status: Either ‘active’ or ‘inactive’
  • created_at: Timestamp when the API key was created
  • last_used_at: Timestamp of last usage (optional)
  • user_id: Associated user ID (optional)
  • plan_id: Associated plan ID (optional)
  • api_key: The actual API key value (only included in creation/regeneration)

Next Steps