I'm trying to integrate Interactive Brokers (IBKR) OAuth 1.0a into my application. Currently, I'm stuck at the request token step (/oauth/request_token), where I receive a 401 error: invalid consumer. Request Details: OAuth Consumer Key: TESTCONS (for testing) Signature Method: RSA-SHA256 Callback URL: oob (out-of-band) Nonce and Timestamp: Generated dynamically Private Key: Loaded directly in the script Code: import requests import time import uuid import urllib.parse from requests_oauthlib import OAuth1 # API endpoint url = "https://api.ibkr.com/v1/api/oauth/request_token" # OAuth parameters oauth_params = { "oauth_consumer_key": "TESTCONS", "oauth_signature_method": "RSA-SHA256", "oauth_timestamp": str(int(time.time())), "oauth_nonce": uuid.uuid4().hex, "oauth_callback": "oob" } # Load RSA private key (masked) private_key = """-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBK... (masked) -----END PRIVATE KEY-----""" # Create OAuth1 object auth = OAuth1( client_key=oauth_params["oauth_consumer_key"], signature_method=oauth_params["oauth_signature_method"], rsa_key=private_key, nonce=oauth_params["oauth_nonce"], timestamp=oauth_params["oauth_timestamp"], callback_uri=oauth_params["oauth_callback"] ) # Make the request response = requests.post(url, auth=auth) # Check response if response.status_code == 200: credentials = urllib.parse.parse_qs(response.text) print(f"Request Token: {credentials.get('oauth_token')[0]}") print(f"Request Token Secret: {credentials.get('oauth_token_secret')[0]}") else: print(f"Error: {response.status_code}") print(response.text) Error Response {"error":"id: 92177, error: invalid consumer","statusCode":401}``` Continue reading...