Wash and soak the basmati rice in water for 30 minutes. Drain and set aside.
Heat oil or ghee in a large pot over medium heat. Add the cinnamon stick, cloves, cardamom pods and bay leaf. Saute for a minute until fragrant. Add the sliced onions and cooked until golden brown.
Stir in the ginger-garlic paste and green chilies, cook for 2 minutes.
Add the chicken pieces and cook until they turn white.
Mix the chopped tomatoes, yogurt, turmeric powder, cumin, coriander, garam masala, red chili powder and salt. Cook until the tomatoes soften and the oil begins to separate from the mixture.
Stir in the chopped cilantro and mint leaves.
Add the rice to the pot and mix gently with the rice and the spices.
Pour in 4 cups of water and bring to a boil. Reduce the heat to low, cover the pot and let it simmer for 15-20 minutes or until the rice is fully cooked and the water is absorbed.
If using saffron, drizzle the saffron milk over the top of the rice.
Turn off the heat and let the Biryani rest for 10 minutes before serving.
Garnish with fried onions if desired.