Bad Request - Invalid Transport

I am trying to create an EventSub subscription for a python bot by following Twitch’s API documentation, but I’m getting an invalid transport error and there’s no activity on my ngrok endpoint when I call the post request. The transport section of the body seems pretty straightforward, am I wrong or have I done something else incorrectly? Thanks very much for any assistance.

headers = {
    'Client-ID': config['CLIENT_ID'],
    'Authorization': 'Bearer ' + config['ACCESS_TOKEN']
}

body = {
    'type': 'channel.follow',
    'version': '1',
    'condition': {
        'broadcaster_user_id': config['BROADCASTER_ID']
    },
    'transport': {
        'method': 'webhook',
        'callback': ngrok_endpoint,
        'secret': secret
    }
}

r = requests.post(
    'https://api.twitch.tv/helix/eventsub/subscriptions',
    body,
    headers=headers
)

Returns: {'error': 'Bad Request', 'status': 400, 'message': 'invalid transport'}

You sent a HTTP post/form body instead of JSON body.

Also check that that you are using the SSL version of the ngrok endpoint

Awesome, thank you Barry. Do I just need to change the formatting of the dictionary, i.e. double quotes instead of single? Or do I need to make it an actual JSON object?

Appreciate the help

Actual JSON object. Changing quotes type doesn’t do anything

Thanks much