If you're using dried beans, start by rinsing them under cold running water. Soak them overnight in a large bowl filled with plenty of water. The next day, drain and rinse them thoroughly before cooking. For canned beans, the process is simpler—just drain and rinse them well in a colander to wash away excess sodium.
In a large stockpot, heat a drizzle of olive oil over medium heat. Add diced onions, garlic, carrots, and celery to the pot. Cook the vegetables for about 5 to 7 minutes, stirring often, until they’re softened and aromatic. This step builds the flavorful base for your soup.
Next, stir in ground cumin, smoked paprika, and chili powder if you like a bit of heat. Let the spices sauté with the vegetables for about a minute to release their fragrance. Then, pour in the diced tomatoes, beans, bay leaf, and broth. Gently stir everything together until well combined.
Bring the soup to a gentle boil, then lower the heat to a simmer. Cover the pot and let it cook for about 60 minutes, stirring occasionally if you're using dried beans. If you're using canned beans, reduce the simmering time to about 30 minutes since they’re already tender.
Once the beans are tender and the soup has developed deep flavor, season it with salt and pepper to taste. For a creamier texture, blend a portion of the soup using an immersion blender or standard blender, then stir it back in. Serve hot, garnished with fresh cilantro, a dollop of sour cream, and a squeeze of lime juice for a bright, zesty finish.