This was reported on #249 but the issue and PR are closed without being merged and released. EctoErrorSerializer.format/3 calls changeset.errors directly instead of using traverse_errors/2 to walk through the changeset data to collect nested errors and render properly. It is possible that we can bring this fix back?