← Back to Tutorials

20. Header Parameters

from fastapi import FastAPI, Header
from typing import Optional

app = FastAPI()

# Read a header
@app.get("/items/")
def read_items(user_agent: Optional[str] = Header(None)):
    return {"User-Agent": user_agent}

# Custom header
@app.get("/check-auth/")
def check_auth(x_token: str = Header(...)):
    if x_token != "my-secret-token":
        return {"error": "Invalid token"}
    return {"message": "Authenticated"}

# Duplicate headers (multiple values)
from typing import List

@app.get("/headers/")
def read_headers(x_tag: Optional[List[str]] = Header(None)):
    return {"X-Tag values": x_tag}

# Common headers
@app.get("/request-info/")
def request_info(
    host: str = Header(...),
    accept: str = Header(None),
    accept_language: str = Header(None),
    authorization: str = Header(None)
):
    return {
        "host": host,
        "accept": accept,
        "language": accept_language,
        "has_auth": authorization is not None
    }
✏️ Exercise: Create an endpoint that reads an X-API-Key header. Validate it against a hardcoded key and return 401 if invalid.