← Back to Tutorials

13. Request Body

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

# Single body parameter
@app.post("/items/")
def create_item(item: Item):
    return {"name": item.name, "price": item.price}

# Body + path + query
@app.put("/items/{item_id}")
def update_item(
    item_id: int,
    item: Item,
    q: str = None
):
    return {"item_id": item_id, **item.dict(), "q": q}

Multiple Body Parameters

class User(BaseModel):
    username: str
    full_name: str = None

@app.put("/items/{item_id}")
def update_item(
    item_id: int,
    item: Item,
    user: User,
    importance: int = Body(..., ge=1)
):
    return {"item_id": item_id, "item": item, "user": user}
✏️ Exercise: Create a POST endpoint that accepts a User model (username, email, age) as the request body. Return the user data with a welcome message.