Found out there was a block added yesterday for the default Python User-Agent. Changing how the headers are passed must change that as well.
Thanks for the update but we finally arrived at that conclusion between ourselves.
I've learned something useful about the way Python handles function arguments because the one I was using for passing the 'headers' data has instead been used by Python requests as the 'params' argument but I'd never realised this because it worked correctly.
In any function it seems that once all expected positional arguments have been assigned to their respective parameters, any additional ones are assigned to any additional keyword parameters. So call the function test(username, email=None) with test('stephen_33', 'my_email') and 'my_email' is assigned to email.
For years I've assumed it had to be of the form email='my_email' and anything else would raise an error. Live and learn!
Martin, there is a CHANGELOG forum in this group. The last staff entry was 2018
https://www.chess.com/clubs/forum/view/changelog?quote_id=38636044&page=2#comment-38636044
The level of communication to users about changes is appalling.