Group Details Private

Global Moderators

Forum wide moderators

  • S

    Title:** SmartAPI order placement – AG8001 Invalid Token even with fresh login (Client M173002)

    Hi Team,

    I am facing a consistent AG8001 - Invalid Token error on the order placement API for my account M173002, even when using a freshly generated jwtToken from generateSession.

    Login works fine (Python SDK)

    I am using the official smartapi-python SDK:

    from SmartApi.smartConnect import SmartConnect import pyotp, json API_KEY = "hbeV0h3A" # for M173002 CLIENT_CODE = "M173002" PASSWORD = "<hidden>" TOTP_SECRET = "<hidden>" obj = SmartConnect(api_key=API_KEY) totp = pyotp.TOTP(TOTP_SECRET).now() data = obj.generateSession(CLIENT_CODE, PASSWORD, totp) print("Login response:", json.dumps(data, indent=2))

    This returns:

    { "status": true, "message": "SUCCESS", "data": { "clientcode": "M173002", "jwtToken": "Bearer eyJhbGciOiJIUzUxMiJ9....uiswy9BT8U...", "refreshToken": "...", "feedToken": "...", "exchanges": ["nse_fo","nse_cm","cde_fo","ncx_fo","bse_fo","bse_cm","mcx_fo"], "products": ["MARGIN","MIS","NRML","CNC","CO","BO"] } }

    So authentication, exchanges, and products are all fine and I receive a valid jwtToken.

    2) Immediate order placement via raw HTTP (no delay)

    Right after login, I call the order endpoint using the same API key and the same jwtToken:

    import requests, json url = "https://apiconnect.angelone.in/rest/secure/angelbroking/order/v1/placeOrder" headers = { "X-API-Key": "hbeV0h3A", # same as used in SmartConnect "Authorization": "Bearer eyJhbGciOiJIUzUxMiJ9....uiswy9BT8U...", "X-ClientLocalIP": "127.0.0.1", "X-ClientPublicIP": "127.0.0.1", "X-MACAddress": "00:00:00:00:00:00", "X-UserType": "USER", "X-SourceID": "WEB", "Accept": "application/json", "Content-Type": "application/json" } payload = { "variety": "NORMAL", "tradingsymbol": "NIFTY24MAR2625700PE", "symboltoken": "62792", "transactiontype": "BUY", "exchange": "NFO", "ordertype": "MARKET", "producttype": "NRML", "duration": "DAY", "price": "0", "triggerprice": "0", "quantity": "1" } resp = requests.post(url, headers=headers, json=payload) print("Status code:", resp.status_code) print("Raw body repr:", repr(resp.text))

    Actual response:

    Status code: 200 Raw body repr: '{"success":false,"message":"Invalid Token","errorCode":"AG8001","data":""}' JSON body: {'success': False, 'message': 'Invalid Token', 'errorCode': 'AG8001', 'data': ''}

    Important notes:

    X-API-Key in login and in order request is exactly the same: hbeV0h3A. Authorization header uses the fresh jwtToken returned by generateSession (no manual editing except removing the “Bearer ” when needed). The order request is sent immediately after login in the same session, so token expiry is not the issue. IP headers (X-ClientLocalIP, X-ClientPublicIP) and other mandatory headers are present.

    Still, the order endpoint always returns AG8001 - Invalid Token.

    3) What I suspect The auth service is issuing a jwtToken/refreshToken correctly (SUCCESS response). But the order microservice is rejecting the same token with AG8001. This looks like a backend token validation / mapping issue between the auth service and the order service for my API key. 4) Request

    Please check the SmartAPI backend configuration for:

    Client Code: M173002 API Key: hbeV0h3A

    Specifically:

    Verify that tokens issued by generateSession for this API key are accepted by the order/v1/placeOrder service. Confirm if there are any additional requirements (IP whitelisting, device binding, etc.) beyond the headers shown above. Fix the AG8001 behaviour or let me know if anything needs to be changed on my side.

    Thanks in advance.

    read more
  • A

    @mr_s Try Trading API key.

    read more
  • M

    @algo_trading_50 I have checked, I am using current historical api key

    read more
  • A

    @mr_s Your API key is incorrect.

    { "status": false, "message": "Invalid API Key", "errorcode": "AG8004", "data": null }

    read more