In a large bowl, combine chicken with yogurt, lemon juice, ginger-garlic paste, turmeric, chili powder, biryani masala, and salt. Marinate for at least 30 minutes.
Bring water to a boil with whole spices and salt. Add basmati rice and cook until 70% done. Drain and set aside.
Heat oil or ghee in a large pan and fry sliced onions until golden brown.
Add marinated chicken and cook until tender and the oil begins to separate.
Stir in chopped tomatoes, cilantro, and mint. Cook until the mixture thickens.
In a heavy pot, layer half the rice over the chicken mixture, then add the remaining rice on top.
Drizzle saffron milk over the rice for color and aroma.
Cover tightly and cook on low heat (dum) for 20–25 minutes.
Let the biryani rest for 10 minutes before opening the lid.
Gently mix and serve hot.