JSON hijacking: it seems this attack is no longer valid, but the argument was that instead of returning an array of users, you’d do {"users": [...]}; for consistency, you’d do {"user": {...}} too and that leads to using that same shape in the request,
Extensibility: APIs often allow preloading other entities in the same request, for example load the account details with the user {"user": {...}, "account": {...}}; you could do a similar thing for the requests.
But as @cmo pointed out - you can do whatever works for you.
Phoenix also does the same scoping for forms so doing it with json endpoints will make switching from one to the other easier as well. This makes it easier for beginners in the framework, which those generators cater to the most.
Is there a blog post or something which could take me to the other way?
I would like to try to replace a django backend with phoenix for a few of my applications without touching the frontend.
You can remove the pattern match %{"thing" => thing} = params in your controller functions and just replace it with %{} = thing if you want to not have it scoped to a field in the map.