While fetching the data for positions using API, the LTP(last_price) that is returned is stale and everytime it returns same LTP for positions even if the query is made after interval of 1 or 5 min. It looks like, the positions API service is returning the LTP from some cache or stale data.
The last price field in positions APIs is not updated in real-time, as it's designed to prioritize quantity and acquired average price fields. So, if you are looking for a real-time P&L update, you will have to use the last_price field from the websocket stream.
Positions API is meant only for knowing the m2m of the account in the market. It is not a an API to fetch realtime data. We suggest fetching the last price from Quote API/Websockets API and calculate P&L at your end.