Parameters API Reference¶
Complete reference for all parameter classes in FastOpenAPI.
Query¶
Extract and validate query parameters from the URL query string.
Signature¶
Query(
default: Any = None,
*,
alias: str | None = None,
title: str | None = None,
description: str | None = None,
gt: float | None = None,
ge: float | None = None,
lt: float | None = None,
le: float | None = None,
min_length: int | None = None,
max_length: int | None = None,
pattern: str | None = None,
strict: bool | None = None,
multiple_of: float | None = None,
allow_inf_nan: bool | None = None,
max_digits: int | None = None,
decimal_places: int | None = None,
examples: list[Any] | None = None,
deprecated: bool | None = None,
include_in_schema: bool = True,
json_schema_extra: dict[str, Any] | None = None,
)
Parameters¶
- default: Default value if not provided (default:
None) - alias: Alternative name in the query string
- title: Title for OpenAPI documentation
- description: Description for OpenAPI documentation
- gt: Greater than validation (numbers)
- ge: Greater than or equal validation (numbers)
- lt: Less than validation (numbers)
- le: Less than or equal validation (numbers)
- min_length: Minimum length (strings/arrays)
- max_length: Maximum length (strings/arrays)
- pattern: Regular expression pattern (strings)
- strict: Enable strict type checking
- multiple_of: Number must be a multiple of this value
- allow_inf_nan: Allow infinity and NaN values
- max_digits: Maximum number of digits
- decimal_places: Maximum decimal places
- examples: Example values for documentation
- deprecated: Mark as deprecated in docs
- include_in_schema: Include in OpenAPI schema
- json_schema_extra: Extra JSON schema properties
Example¶
@router.get("/items")
def list_items(
page: int = Query(1, ge=1, description="Page number"),
per_page: int = Query(10, ge=1, le=100, description="Items per page"),
search: str | None = Query(None, description="Search query"),
):
return {"page": page, "per_page": per_page}
Path¶
Extract and validate path parameters from the URL path.
Signature¶
Path(
default: Any = ..., # Always required (...)
*,
alias: str | None = None,
title: str | None = None,
description: str | None = None,
gt: float | None = None,
ge: float | None = None,
lt: float | None = None,
le: float | None = None,
min_length: int | None = None,
max_length: int | None = None,
pattern: str | None = None,
strict: bool | None = None,
multiple_of: float | None = None,
allow_inf_nan: bool | None = None,
max_digits: int | None = None,
decimal_places: int | None = None,
examples: list[Any] | None = None,
deprecated: bool | None = None,
include_in_schema: bool = True,
json_schema_extra: dict[str, Any] | None = None,
)
Parameters¶
Same as Query, except:
- default: Must be
...(ellipsis) - path parameters are always required
Important¶
Path parameters cannot have default values. Attempting to provide a default value other than ... will raise a ValueError.
Example¶
@router.get("/users/{user_id}/posts/{post_id}")
def get_post(
user_id: int = Path(..., ge=1, description="User ID"),
post_id: int = Path(..., ge=1, description="Post ID"),
):
return {"user_id": user_id, "post_id": post_id}
Header¶
Extract and validate HTTP header values.
Signature¶
Header(
default: Any = None,
*,
alias: str | None = None,
convert_underscores: bool = True,
title: str | None = None,
description: str | None = None,
gt: float | None = None,
ge: float | None = None,
lt: float | None = None,
le: float | None = None,
min_length: int | None = None,
max_length: int | None = None,
pattern: str | None = None,
strict: bool | None = None,
multiple_of: float | None = None,
allow_inf_nan: bool | None = None,
max_digits: int | None = None,
decimal_places: int | None = None,
examples: list[Any] | None = None,
deprecated: bool | None = None,
include_in_schema: bool = True,
json_schema_extra: dict[str, Any] | None = None,
)
Parameters¶
Same as Query, plus:
- convert_underscores: Automatically convert underscores to hyphens (default:
True)
Example¶
@router.get("/items")
def list_items(
user_agent: str | None = Header(None, alias="User-Agent"),
api_key: str = Header(..., alias="X-API-Key", description="API Key"),
):
return {"user_agent": user_agent}
Note: HTTP headers are case-insensitive but typically use kebab-case (e.g., User-Agent, X-API-Key).
Cookie¶
Extract and validate HTTP cookie values.
Signature¶
Cookie(
default: Any = None,
*,
alias: str | None = None,
title: str | None = None,
description: str | None = None,
gt: float | None = None,
ge: float | None = None,
lt: float | None = None,
le: float | None = None,
min_length: int | None = None,
max_length: int | None = None,
pattern: str | None = None,
strict: bool | None = None,
multiple_of: float | None = None,
allow_inf_nan: bool | None = None,
max_digits: int | None = None,
decimal_places: int | None = None,
examples: list[Any] | None = None,
deprecated: bool | None = None,
include_in_schema: bool = True,
json_schema_extra: dict[str, Any] | None = None,
)
Parameters¶
Same as Query.
Example¶
@router.get("/profile")
def get_profile(
session_id: str = Cookie(..., description="Session ID"),
preferences: str | None = Cookie(None),
):
return {"session_id": session_id}
Body¶
Extract and validate JSON request body.
Signature¶
Body(
default: Any = None,
*,
media_type: str = "application/json",
alias: str | None = None,
title: str | None = None,
description: str | None = None,
gt: float | None = None,
ge: float | None = None,
lt: float | None = None,
le: float | None = None,
min_length: int | None = None,
max_length: int | None = None,
pattern: str | None = None,
strict: bool | None = None,
multiple_of: float | None = None,
allow_inf_nan: bool | None = None,
max_digits: int | None = None,
decimal_places: int | None = None,
examples: list[Any] | None = None,
deprecated: bool | None = None,
include_in_schema: bool = True,
json_schema_extra: dict[str, Any] | None = None,
)
Parameters¶
Same as Query, plus:
- media_type: MIME type of the body (default:
"application/json")
Example¶
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@router.post("/items")
def create_item(item: Item = Body(...)):
return item
Form¶
Extract and validate form data from application/x-www-form-urlencoded requests.
Signature¶
Form(
default: Any = None,
*,
media_type: str = "application/x-www-form-urlencoded",
alias: str | None = None,
title: str | None = None,
description: str | None = None,
gt: float | None = None,
ge: float | None = None,
lt: float | None = None,
le: float | None = None,
min_length: int | None = None,
max_length: int | None = None,
pattern: str | None = None,
strict: bool | None = None,
multiple_of: float | None = None,
allow_inf_nan: bool | None = None,
max_digits: int | None = None,
decimal_places: int | None = None,
examples: list[Any] | None = None,
deprecated: bool | None = None,
include_in_schema: bool = True,
json_schema_extra: dict[str, Any] | None = None,
)
Parameters¶
Same as Body.
Example¶
@router.post("/login")
def login(
username: str = Form(...),
password: str = Form(...),
):
return {"username": username}
File¶
Handle file uploads from multipart/form-data requests.
Signature¶
File(
default: Any = None,
*,
media_type: str = "multipart/form-data",
alias: str | None = None,
title: str | None = None,
description: str | None = None,
examples: list[Any] | None = None,
deprecated: bool | None = None,
include_in_schema: bool = True,
json_schema_extra: dict[str, Any] | None = None,
)
Parameters¶
Same as Form (inherits from Form, validation constraints don't apply to files).
Example¶
from fastopenapi import File, FileUpload
@router.post("/upload")
def upload_file(file: FileUpload = File(...)):
content = file.read() # Sync frameworks
return {
"filename": file.filename,
"content_type": file.content_type,
"size": file.size
}
@router.post("/upload-async")
async def upload_file_async(file: FileUpload = File(...)):
content = await file.aread() # Async frameworks
return {"filename": file.filename}
Validation Constraints¶
All parameter classes support Pydantic validation constraints:
Numeric Constraints¶
- gt: Greater than
- ge: Greater than or equal
- lt: Less than
- le: Less than or equal
- multiple_of: Must be a multiple of this value
age: int = Query(..., ge=0, le=150)
price: float = Query(..., gt=0, le=1000000)
quantity: int = Query(..., multiple_of=10)
String Constraints¶
- min_length: Minimum string length
- max_length: Maximum string length
- pattern: Regular expression pattern
username: str = Query(..., min_length=3, max_length=50)
email: str = Query(..., pattern=r'^[\w\.-]+@[\w\.-]+\.\w+$')
Number Constraints¶
- max_digits: Maximum total digits
- decimal_places: Maximum decimal places
- allow_inf_nan: Allow infinity and NaN
Metadata¶
All parameters support OpenAPI metadata:
@router.get("/items")
def list_items(
search: str = Query(
None,
title="Search Query",
description="Search items by name or description",
examples=["laptop", "phone"],
deprecated=False,
alias="q"
)
):
return {}
- title: Short title for the parameter
- description: Longer description
- examples: Example values (shown in OpenAPI docs)
- deprecated: Mark parameter as deprecated
- alias: Alternative parameter name
- include_in_schema: Include in OpenAPI schema (default:
True) - json_schema_extra: Additional JSON schema properties
See Also¶
- Request Parameters Guide - Usage examples
- Validation Guide - Validation patterns
- Types Reference - Core type definitions