Skip to content

rate_limit & limit

fastlimit.rate_limit

rate_limit(default: str | RateLimitRule | None = None, *, ip: str | None = None, user: str | None = None, cost: int = 1, name: str | None = None) -> Any

Create a FastAPI dependency that enforces a rate limit.

The resolved rule is evaluated at request time — the limiter is looked up from app.state.

Parameters:

Name Type Description Default
default str | RateLimitRule | None

a rate string ("10/min") for IP-only limiting. Acts as shorthand for ip=. Cannot be combined with ip.

None
ip str | None

Rate string for the IP bucket. e.g. "10/min".

None
user str | None

Rate string for the authenticated-user bucket. e.g. "50/min".

None
cost int

Request cost. Useful for expensive endpoints. Default 1.

1
name str | None

Optional stable name for Redis key prefix.

None

Returns:

Type Description
Any

A fastapi.Depends object to use in dependencies=[...].

Examples::

# IP-only shorthand
dependencies=[rate_limit("10/min")]

# Explicit IP
dependencies=[rate_limit(ip="10/min")]

# Dual bucket
dependencies=[rate_limit(ip="10/min", user="50/min")]

# Pre-built rule
dependencies=[rate_limit(Rules.LOGIN)]

# Inline on a router
router = APIRouter(dependencies=[rate_limit("200/min")])

Raises:

Type Description
FastLimitNotInitialized

At request time if limiter.init_app(app) was never called.

RateLimitExceeded

At request time if the limit is exceeded.


fastlimit.limit

limit(default: str | RateLimitRule | None = None, *, ip: str | None = None, user: str | None = None, cost: int = 1, name: str | None = None) -> Callable[[Any], Any]

Decorator that adds a rate limit to a FastAPI route.

Identical arguments to fastlimit.depends.rate_limit. The route function does not need Request in its signature.

Parameters:

Name Type Description Default
default str | RateLimitRule | None

IP-only rate string.

None
ip str | None

Rate string for IP bucket.

None
user str | None

Rate string for user bucket.

None
cost int

Request cost per call.

1
name str | None

Stable Redis key name.

None

Returns:

Type Description
Callable[[Any], Any]

A decorator that injects the rate limit as a hidden FastAPI dependency.

Examples::

from fastlimit import limit

@router.get("/photos")
@limit("20/min")
async def list_photos(): ...

@router.post("/upload")
@limit(ip="5/min", user="30/min")
async def upload(): ...

# Stacking: each @limit adds an independent bucket
@router.get("/feed")
@limit("200/min")
@limit(user="1000/min")
async def feed(): ...