Heat olive oil in a large pot over medium heat. Add onions and sauté until softened, about 5 minutes.
Stir in garlic and cook for 1 minute until fragrant.
Add tomatoes, tomato paste, broth, basil, oregano, salt, and pepper. Bring to a boil, then reduce heat and simmer for 20 minutes.
Remove from heat and carefully blend the soup using an immersion blender until smooth.
Stir in cream or coconut milk if desired, then taste and adjust seasoning.
Ladle into bowls and garnish with fresh basil and croutons before serving.