Thanks both for your comments, there are some good points here. Mixing parameters across verbs is absolutely laziness on my part – there would never be the same fields coming in from more than one place but I realise now it could be confusing.
The discussion on the content negotiation was good and the way I’ve pulled in fragments of code makes it look a bit … nonsense. Usually I use the Accept header with the q values, but I also like to add a format parameter on the URL in case anyone needs to override it for any reason (or, for example, doesn’t understand how to set their headers! It does happen, sadly, not everyone is a purist) and I’ve found this can be useful but agree that it shouldn’t be the main way that the content type is determined. Thanks for making that clear!