FastAPI 0.100.0 (July 2023) added full Pydantic v2 support, and versions from there on resolve Pydantic 2 by default. The rename list that breaks existing schemas is short but hits almost every project: class Config: orm_mode = True becomes model_config = ConfigDict(from_attributes=True), .dict() becomes .model_dump(), .json() becomes .model_dump_json(), parse_obj becomes model_validate, and allow_population_by_field_name becomes populate_by_name.
The subtler break is that Optional[str] no longer implies a default of None. In Pydantic v2 a field annotated Optional[str] with no default is required and may be null, so requests that previously omitted it now fail with a missing-field error. Write Optional[str] = None to restore the old meaning.
Run the official bump-pydantic tool for the mechanical renames, then read the diff, because it cannot infer intent for the optional-field change. Pinning pydantic>=2 in your own dependencies makes the resolution explicit rather than leaving it to whatever the lock happens to pick.