Heat olive oil in a large pot over medium heat. Cook and stir onion in hot oil until golden brown. Season with salt and pepper. Mix in tomatoes, lentils, and spinach; pour in water. Season with basil, cardamom, cumin, cayenne pepper, and curry powder. Bring to a boil, reduce heat to low, and simmer for 25 minutes, stirring occasionally, until lentils are tender.
Transfer soup to a blender and purée until smooth before serving.