Por defecto, FastAPI devolverá las respuestas usando un JSONResponse, poniendo el contenido que devuelves desde tu path operation dentro de ese JSONResponse.
Usará el código de estado por defecto o el que establezcas en tu path operation.
Si quieres devolver códigos de estado adicionales aparte del principal, puedes hacerlo devolviendo una Response directamente, como un JSONResponse, y establecer el código de estado adicional directamente.
Por ejemplo, digamos que quieres tener una path operation que permita actualizar items, y devuelva códigos de estado HTTP de 200 "OK" cuando sea exitoso.
Pero también quieres que acepte items nuevos. Y cuando los items no existían antes, los crea, y devuelve un código de estado HTTP de 201 "Created".
Para lograr eso, importa JSONResponse, y devuelve tu contenido ahí directamente, estableciendo el status_code que quieras:
Cuando devuelves una Response directamente, como en el ejemplo anterior, se devolverá directamente.
No se serializará con un modelo, etc.
Asegúrate de que tenga los datos que quieres que tenga, y que los valores sean JSON válido (si estás usando JSONResponse).
Detalles Técnicos
También podrías usar from starlette.responses import JSONResponse.
FastAPI proporciona las mismas starlette.responses como fastapi.responses solo como una comodidad para ti, el desarrollador. Pero la mayoría de las respuestas disponibles vienen directamente de Starlette. Lo mismo con status.
Si devuelves códigos de estado y respuestas adicionales directamente, no se incluirán en el esquema de OpenAPI (la documentación de la API), porque FastAPI no tiene forma de saber de antemano lo que vas a devolver.