Heat the olive oil in a large soup pot over medium heat.
Add the onion, carrots, and celery. Cook for about 6 to 8 minutes until softened.
Stir in the garlic, smoked paprika, cumin, chili powder, and cayenne pepper. Cook for 1 minute until fragrant.
Add the tomato paste and stir well.
Pour in the diced tomatoes, vegetable broth, black beans, oregano, and bay leaf.
Bring the soup to a gentle boil, then reduce the heat and simmer uncovered for 25 to 30 minutes.
Remove the bay leaf.
Blend about half of the soup using an immersion blender, leaving some whole beans for texture. Alternatively, transfer half the soup to a blender and return it to the pot.
Stir in the lime juice and season with salt and black pepper.
Serve hot with fresh cilantro on top.