Pat chicken dry with paper towels. Remove skin from bone-in pieces. Dice onions, mince garlic, grate ginger, and chop tomatoes. Whisk yogurt until smooth.
Heat oil in a Dutch oven over medium heat. Add cumin seeds and sizzle for 30-45 seconds until fragrant. Add onions and green chili, cook for 15-18 minutes, stirring frequently, until deep golden brown.
Add garlic and ginger, cook for 2 minutes until fragrant. Stir in turmeric, coriander, cumin, and chili powder. Cook for 1-2 minutes, stirring constantly, to bloom the spices.
Add tomatoes and salt. Cook for 8-10 minutes, stirring frequently, until tomatoes break down and oil separates around the edges of the masala.
Reduce heat to medium. Add whisked yogurt one tablespoon at a time, stirring continuously after each addition. Cook for 2-3 minutes until fully incorporated and sauce is thick.
Add chicken and coat thoroughly in the masala. Cook for 3-4 minutes over medium heat. Pour in water, bring to a gentle boil, reduce heat to low, cover, and simmer for 20-25 minutes (bone-in) or 15-18 minutes (boneless).
Remove lid, check sauce consistency, and cook uncovered to reduce if needed. Stir in garam masala, adjust salt, garnish with cilantro, and serve hot with rice or naan.