General

fastapi-pagination provides a way to customize your input and output models.

In most cases, you will find the customizer you need in the fastapi_pagination.customization module.

CustomizedPage works similar to how typing.Annotated works, but as arguments it accepts instances of the PageCustomizer protocol.

Here is an example of how to increase the default size of params:

from typing import TypeVar

from fastapi import FastAPI, Query
from fastapi_pagination import Page, paginate, add_pagination
from fastapi_pagination.customization import CustomizedPage, UseParamsFields

app = FastAPI()
add_pagination(app)

T = TypeVar("T")

CustomPage = CustomizedPage[
    Page[T],
    UseParamsFields(
        size=Query(100, ge=1, le=1000),
    ),
]

# req: GET /nums
@app.get("/nums")
async def get_nums() -> CustomPage[int]:
    return paginate(range(1_000))