Heat oil in a large pot or Dutch oven over medium-high heat. Add chicken pieces and cook until browned on all sides, about 5 minutes. Remove chicken and set aside.
Reduce heat to medium. Add onion and cook until soft and golden, about 5 minutes. Add garlic and ginger; cook for 1 minute.
Stir in cumin, coriander, turmeric, paprika, and cayenne (if using). Cook for 30 seconds until fragrant.
Add crushed tomatoes, yogurt, salt, and water. Stir well, scraping up any browned bits from the bottom.
Return chicken to the pot. Bring to a simmer, then reduce heat to low. Cover and cook for 20-25 minutes, stirring occasionally, until chicken is tender and sauce has thickened.
Taste and adjust seasoning. Garnish with fresh cilantro before serving.
Tips
Serve with steamed basmati rice or warm naan bread.
For a creamier curry, stir in 1/4 cup heavy cream at the end.
Store leftovers in an airtight container in the refrigerator for up to 3 days.