Soop-e Mahi (سوپ ماهی) — Persian Saffron and White Fish Velouté
A luxurious Persian-style velouté featuring tender white fish in a silky saffron broth. Leek, celery, carrot, bell pepper, and fresh herbs build sweetness and aroma, finished with a light creaminess for an elegant, comforting bowl.

Printable Recipe Card
Servings: 4 · Total: 80 min · Difficulty: medium
Ingredients (quick list)
- 0.25 tsp Saffron threads (crushed, then bloomed in hot water)
- 60 ml Hot water (about 60–70°C, not boiling)
- 500 g White fish fillet (boneless, skinless; cod, haddock, pollock, or sea bass)
- 15 ml Lemon juice (freshly squeezed)
- 6 g Fine sea salt (divided)
- 1 g Black pepper (freshly ground)
- 15 ml Olive oil (or neutral oil)
- 20 g Unsalted butter (for velouté richness)
- 120 g Small onion (finely diced)
- 180 g Leek (white and light-green parts only, thinly sliced and well rinsed)
- 120 g Celery (small dice)
- 150 g Carrot (small dice)
+ 9 more in the full ingredients section below.
Steps (summary)
- Bloom the saffron: crush the saffron threads to a fine powder, then stir into 60 ml hot water (about 60–70°C). Cover and steep…
- Season the fish for a short marinade: toss fish with lemon juice, 3 g of the salt, and black pepper. Refrigerate 15 minutes whi…
- Build the aromatic base: in a heavy pot over medium heat, warm olive oil and melt butter. Add onion and leek with a splash of s…
- Toast spices and form the velouté roux: add minced garlic and cook 45 seconds until fragrant. Stir in garlic masala spice for 3…
- Simmer the soup: whisk in fish stock gradually to prevent lumps, then add bay leaf and the remaining 3 g salt. Bring to a gentl…
- Poach the fish and finish with saffron: slide the marinated fish into the barely simmering soup (small bubbles only). Poach 6–8…
+ 1 more steps in the full instructions section below.
Cultural Background
Fish soups are commonly enjoyed in Iran’s coastal regions, where seafood is paired with fresh herbs and warming aromatics. Saffron is widely used in Persian cooking for its color and fragrance, often reserved for dishes served to guests or on special occasions.
Equipment
💡 Tips
- Keep the soup at a gentle simmer when the fish goes in; boiling breaks the fish into dry fragments.
- For extra silkiness, blend only 2 cups (about 450 ml) of the soup base before adding fish, then return to the pot; this keeps texture velvety while preserving fish pieces.
- If your stock is salty, reduce added salt to 3–4 g total and adjust at the end.
- Rinse sliced leek thoroughly to remove grit; sand can ruin the velouté texture.
- Bloom saffron in hot (not boiling) water to preserve floral notes and avoid bitterness.
⚠️ Common Mistakes
❌ Boiling the soup after adding cream
💡 Why: High heat can cause the dairy to split, making the velouté look grainy and taste flat.
✅ Fix: Keep heat very low once cream is added; reheat gently until steaming, never boiling.
❌ Adding stock all at once to the flour mixture
💡 Why: The roux can clump, creating lumps that are hard to dissolve once the soup simmers.
✅ Fix: Whisk in stock gradually in 3–4 additions, fully smoothing each addition before adding more.
❌ Overcooking the fish
💡 Why: White fish dries out quickly and breaks into chalky pieces, clouding the soup.
✅ Fix: Poach at a bare simmer and start checking at 6 minutes; remove from heat as soon as fish flakes.
❌ Not washing leeks thoroughly
💡 Why: Leeks often trap grit between layers, which can make the soup unpleasantly sandy.
✅ Fix: Slice first, then soak and swish in a bowl of cold water; lift out and drain well before cooking.
🧊 How to Store
Cool quickly and refrigerate in an airtight container up to 2 days. Reheat gently over low heat until steaming (do not boil) to prevent curdling and overcooking the fish. Freezing is not recommended because cream and fish can separate and turn grainy.
📅 Make Ahead
Chop all vegetables and refrigerate in airtight containers up to 24 hours. Bloom saffron up to 12 hours ahead and refrigerate; bring to room temperature before using. Cook the soup base (without fish, herbs, or cream) up to 1 day ahead, then reheat gently and finish with fish, saffron, cream, and herbs just before serving.
🍽️ Pairs Well With
- Barley bread or crusty bread
- Lemon wedges
- Simple cucumber and herb salad
- Pickled vegetables
Regional Variations
- Caspian Sea coastOften finished with more fresh herbs and a brighter sour note from extra lemon; some cooks use a lighter broth and keep the soup less creamy to highlight the fish.
- Persian Gulf coastMay include a warmer spice profile and more peppers; the soup can be served with additional citrus on the side and a slightly thicker, heartier texture.
Ingredients
- 0.25 tspSaffron threads (crushed, then bloomed in hot water)
- 60 mlHot water (about 60–70°C, not boiling)
- 500 gWhite fish fillet (boneless, skinless; cod, haddock, pollock, or sea bass)
- 15 mlLemon juice (freshly squeezed)
- 6 gFine sea salt (divided)
- 1 gBlack pepper (freshly ground)
- 15 mlOlive oil (or neutral oil)
- 20 gUnsalted butter (for velouté richness)
- 120 gSmall onion (finely diced)
- 180 gLeek (white and light-green parts only, thinly sliced and well rinsed)
- 120 gCelery (small dice)
- 150 gCarrot (small dice)
- 120 gRed bell pepper (small dice)
- 12 gGarlic cloves (minced (about 3 cloves))
- 2 tspGarlic masala spice (use a mild blend; reduce to 1 tsp if very spicy)
- 25 gAll-purpose flour (for velouté thickening)
- 900 mlFish stock (or light chicken/vegetable stock, low-sodium)
- 1 leafBay leaf (optional but recommended)
- 120 mlHeavy cream (or cooking cream)
- 20 gFresh coriander (finely chopped, stems and leaves)
- 40 gSpring onions (thinly sliced)
🔄 Substitutions
- White fish fillet→ Salmon or trout
- Heavy cream→ Evaporated milk (unsweetened)
- All-purpose flour→ Cornstarch
Instructions
- 1
Bloom the saffron: crush the saffron threads to a fine powder, then stir into 60 ml hot water (about 60–70°C). Cover and steep 10–15 minutes until deeply golden. Meanwhile, pat the fish dry and cut into 3–4 cm pieces to help it poach evenly without breaking apart.
- 2
Season the fish for a short marinade: toss fish with lemon juice, 3 g of the salt, and black pepper. Refrigerate 15 minutes while you prep vegetables. This brief rest firms the fish and gently perfumes it, but avoids the “cooked” texture that longer acidic marination can cause.
- 3
Build the aromatic base: in a heavy pot over medium heat, warm olive oil and melt butter. Add onion and leek with a splash of stock if needed; cook 6–8 minutes, stirring, until soft and translucent. Add celery, carrot, and red bell pepper; cook 8 minutes until vegetables begin to sweeten.
- 4
Toast spices and form the velouté roux: add minced garlic and cook 45 seconds until fragrant. Stir in garlic masala spice for 30 seconds. Sprinkle in flour and stir constantly 2 minutes to cook out raw flour. The mixture should look like a thick paste coating the vegetables without browning.
- 5
Simmer the soup: whisk in fish stock gradually to prevent lumps, then add bay leaf and the remaining 3 g salt. Bring to a gentle simmer over medium-high heat, then reduce to low and simmer 12–15 minutes, partially covered, until carrots are tender and the soup lightly thickens.
- 6
Poach the fish and finish with saffron: slide the marinated fish into the barely simmering soup (small bubbles only). Poach 6–8 minutes, stirring once very gently, until fish flakes and turns opaque. Stir in the bloomed saffron (all liquid) and simmer 2 minutes to perfume the broth.
- 7
Cream and herbs: lower heat to the minimum and stir in heavy cream. Warm 2–3 minutes without boiling to keep the velouté smooth. Remove bay leaf. Stir in chopped coriander and most spring onions, reserving a little for garnish. Taste and adjust salt, thickness, and aroma before serving hot.
🪪 Recipe Passport
Cultural Background
Fish soups are commonly enjoyed in Iran’s coastal regions, where seafood is paired with fresh herbs and warming aromatics. Saffron is widely used in Persian cooking for its color and fragrance, often reserved for dishes served to guests or on special occasions.
Regional Variations
Researched from multiple sources and validated by the Zaffaron editorial team. Every recipe is tested for accuracy, measurements, and cultural authenticity.
Nutrition per serving
Pairs well with
If you enjoyed this recipe, here are a few related Zaffaron recipes to try next.
Does your family make this differently?
Every family has their own version. Maybe your grandmother adds a secret ingredient, or your aunt has a completely different technique. Preserve your family's version — with their name on it, forever.
You Might Also Like

Jujeh Kabab (جوجه کباب) — Saffron-Turmeric Chicken with Rustic Tomato Sauce
Persian · Kebabs · 45 min

Jigar Kabab (جگر کباب) — Classic Persian Lamb Liver Skewers
Persian · Kebabs · 33 min

Persian Sweet Corn Soup (سوپ ذرت) — Silky Golden Comfort Soup
Persian · Soups · 50 min

Romanian Tripe Soup (Ciorbă de burtă) — Creamy Sour Beef Tripe Soup
Romanian · Soups · 270 min

Cold Beet Soup (Aukstā zupa) — Latvian Kefir Beet Summer Soup
Latvian · Soups · 45 min

Azerbaijani Milk Rice Porridge (Südlü Sıyıq) — Creamy Breakfast Bowl
Azerbaijani · Rice Dishes · 40 min

Keshkek (Keşkek) — Creamy Ceremonial Wheat and Lamb Stew
Turkish · Stews · 240 min

Bulgarian Banitsa (Баница) — Flaky Sirene-Filled Phyllo Pie
Bulgarian · Breads · 68 min
Reviews
Cooked this recipe?
Tap the stars to rate it — that's all it takes. A few words are welcome but optional.
No ratings yet. Cooked this one? Be the first to rate it — it takes one tap.