After spending several hours, I found what we both missed:
-d "json=${JSON_OBJECT}"
Which means it's posting a string, so in python you need:
requests.post(url, data=f'json={json.dumps(postdata)}', headers=headers)