По умолчанию FastAPI возвращает ответы, используя JSONResponse, помещая содержимое, которое вы возвращаете из вашей операции пути, внутрь этого JSONResponse.
Он будет использовать код статуса по умолчанию или тот, который вы укажете в вашей операции пути.
Если вы хотите возвращать дополнительный статус код помимо основного, вы можете сделать это, возвращая объект Response напрямую, как JSONResponse, и устанавливая нужный статус код напрямую.
Например, скажем, вы хотите создать операцию пути, которая позволяет обновлять элементы и возвращает HTTP-код 200 "OK" при успешном выполнении.
Но вы также хотите, чтобы она принимала новые элементы. И если элемент ранее не существовал, он создаётся, и возвращался HTTP-код 201 "Created".
Чтобы реализовать это, импортируйте JSONResponse и возвращайте ваш контент напрямую, устанавливая нужный status_code:
Когда вы возвращаете объект Response напрямую, как в примере выше, он будет возвращён как есть.
Он не будет сериализован при помощи модели и т.д.
Убедитесь, что в нём содержатся именно те данные, которые вы хотите, и что значения являются валидным JSON (если вы используете JSONResponse).
Технические детали
Вы также можете использовать from starlette.responses import JSONResponse.
FastAPI предоставляет тот же starlette.responses через fastapi.responses просто для вашего удобства, как разработчика. Но большинство доступных Response-классов поступают напрямую из Starlette. То же самое касается и status.
Если вы возвращаете дополнительные коды статусов и ответы напрямую, они не будут включены в схему OpenAPI (документацию API), потому что FastAPI не может заранее знать, что вы собираетесь вернуть.