Skip to main content

FastAPI Docs Exception

License: MIT PyPI version CI

Automatically expose your custom FastAPI exceptions in Swagger / ReDoc — with proper grouping and examples.


✨ Features

Stop repeating responses={...} in every route : This lightweight utility turns your custom HTTPException subclasses into shared, documented OpenAPI responses — complete with example payloads.

Swagger UI screenshot that shows custom 404 & 500 error examples

Swagger UI screenshot that shows custom 404 & 500 error examples

  • Update docs: Convert your HTTPException subclasses into shared OpenAPI responses.
  • Grouped by status code: if you have multiple exceptions with the same status code, they will be grouped together.
  • Pydantic schema: Provide Pydantic models or tweak JSON Schema on the fly.

🚀 Installation

# With uv (recommended)
uv add fastapi_docs_exception
# Or the classic way
pip install fastapi_docs_exception

⚡ Quickstart

from fastapi import FastAPI, HTTPException
from fastapi_docs_exception import HTTPExceptionResponseFactory


# 1️⃣  Define your exceptions any way you like
class ApiNotFoundException(HTTPException):
    """Custom exception for API not found errors in FastAPI."""

    def __init__(self, detail: str = "API key not found or invalid"):
        super().__init__(status_code=404, detail=detail)


class NotFoundError(HTTPException):
    """Custom exception for not found errors in FastAPI."""

    def __init__(self, detail: str = "Resource not found in the storage"):
        super().__init__(status_code=404, detail=detail)


class InternalServerError(HTTPException):
    """Custom exception for internal server errors in FastAPI."""

    def __init__(self, detail: str = "Internal server error, please try again later"):
        super().__init__(status_code=500, detail=detail)


# 2️⃣  Feed them to the factory (classes allow more flexibility)
# You can specify Pydantic schemas, edit the JSON schema, etc.
exc_response_factory = HTTPExceptionResponseFactory()

app = FastAPI(
    responses=exc_response_factory.build([
        NotFoundError(),  # 404 response
        ApiNotFoundException(),  # 404 response (grouped with the previous one)
        InternalServerError(),  # 500 response (only one)
    ]),
)


# 3️⃣  Use your exceptions in the code
@app.get("/items/{item_id}")
def get_item(item_id: str):
    if item_id != "42":
        raise NotFoundError()
    return {"item_id": item_id}

Open http://localhost:8000/docs and you will see the custom 404 and 500 responses in the Swagger UI and ReDoc documentation with example payloads.


🔧 Development

# Clone
git clone https://github.com/your-user/fastapi_docs_exception.git
cd fastapi_docs_exception

# Optional: create a virtual env
uv venv          # makes .venv and activates it
source .venv/bin/activate

# Install dev dependencies (test, lint, type-checking)
uv pip install -e ".[dev]"

Lint, format, type-check (all in one)

# Run all lint with ruff (lint, format), ty, bandit
uv run lint

Run the test-suite

# Run all tests with pytest
uv run test

A coverage report will be shown in the terminal and htmlcov will be generated in the project root.

🤝 Contributing

All kinds of contributions are welcome – bug reports, feature ideas, docs fixes...

  1. Fork the repo & create your branch: git checkout -b feat/amazing-stuff
  2. Commit your changes with clear messages.
  3. Run uv run lint && uv run test and ensure everything stays green.
  4. Open a Pull Request describing why the change is useful.

Please use commitizen to format your commit messages, e.g. cz commit


📜 License

fastapi_docs_exception is distributed under the MIT License – see LICENSE for details.

Release files for fastapi-docs-exception 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-docs-exception 0.4.3
File Size Uploaded
fastapi_docs_exception-0.4.3.tar.gz 186.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-docs-exception 0.4.3
File Interpreter ABI Platform
fastapi_docs_exception-0.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 193.4 kB

Release files / fastapi_docs_exception-0.4.3.tar.gz

Download URL fastapi_docs_exception-0.4.3.tar.gz
Size 186.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e8b7cfed79b244a63e5a50a255dd98601dece89983e87e0cd6309f47a4a92e56
BLAKE2b-256 checksum
How to use checksums
6b481c5567cc509b56aa2ec6f80e5a1b626e8e06b730f9e94d2bb1f0ed922bdd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.3

Release files / fastapi_docs_exception-0.4.3-py3-none-any.whl

Download URL fastapi_docs_exception-0.4.3-py3-none-any.whl
Size 7.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c7897236d132a5e25a1e0486a1ed271dd84732724e207bfd072f96d90ad870d8
BLAKE2b-256 checksum
How to use checksums
8d1c9bd97abc7325585c23d759bb626f85a18a5829c6a9d6e8df7095d5baad9f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.3

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page