Rinse and soak the basmati rice for 20–30 minutes, then drain.
Heat oil in a large pot and fry onions until golden brown.
Add ginger-garlic paste and whole spices (cinnamon, cloves, cardamom). Stir for 1 minute.
Add chicken pieces, salt, turmeric, and masala. Cook until chicken is lightly browned.
Add tomatoes and cook until soft and well combined.
Add potatoes (if using) and cook for a few minutes.
Pour in water or stock and bring to a boil. Simmer until chicken is nearly cooked.
Add the soaked rice evenly over the top (do not stir too much).
Cover and cook on low heat until rice is tender and liquid is absorbed.
Let it rest for 10 minutes, then fluff gently with a fork.
Garnish with fresh coriander and serve.