For Serving (all optional):
Heat the olive oil in a large soup pot over medium heat.
Sauté the onions until soft and fully translucent; about 5 minutes. Add the garlic and sauté for 30 seconds or until fragrant. Next, add the tomato paste and mix to coat the onions and garlic.
Add the peppers, tomatoes, and vegetable broth to the pot. Season with salt, pepper, spices, and chili flakes. Bring to a boil, then reduce heat and simmer for 20 minutes.
Carefully transfer the soup to a vented high-speed blender. You may need to do this in batches depending on the size of your blender. Purée the soup on high until completely smooth. Alternatively, you can use an immersion blender to purée the soup in the pot.
Place the puréed soup back in the pot. Add the milk and heat just until warmed through. Serve soup warm with toppings of choice.
Leftover soup can be kept in the fridge for up to a week or in the freezer for 3 months. To reheat, place soup in a pot on the stove over medium heat. Bring to boil then reduce heat and let simmer for 5 minutes.
Milk options: I recommend using a neutral tasting full-fat plant-based milk like cashew or almond. Look for milk with around 5-7g of fat per cup. This will ensure the soup is rich and creamy tasting. You can make your own cashew milk by blending 1/2 cup raw cashews and 2 cups of filtered water in the blender. I’d avoid coconut milk due to its strong, sweet coconut flavor.