POST /topologies raised a 500 with a raw SQLAlchemy IntegrityError traceback when the name collided with an existing topology. Catch the error at the router, verify it's the ix_topologies_name constraint (so unrelated integrity failures still surface as 500s with their real traceback), and return 409 with a helpful detail. Test covers the create-then-duplicate-create flow.