Edge TTS 403 Error Fix: When openai-edge-tts on Synology Stops Making Audio

机のノートパソコンと黒い箱(NAS)の前で、イヤホンをして首をかしげるスーツマン

I run a small system on my home NAS (a Synology) that makes English shadowing material for me automatically.

I paste in an English news article, AI summarizes it, and I get Anki cards with audio read aloud in three accents: American, British and Australian.

The part that does the reading aloud is Edge TTS. I run it as a container on my Synology (openai-edge-tts).

But when I used it again after about half a year, it had stopped making audio. The error was 403.

When I looked into it, people all over the world had been getting the same error since October 2026, and the cause was a change on Microsoft’s side.

On top of that, with the Synology container, updating the image doesn’t fix it, which makes it a bit tricky. So here’s how I fixed it.

Suitman wearing earphones, tilting his head in front of a laptop and a small black box (NAS)

What you’ll learn
• What causes the edge-tts “403, Invalid response status” error
• How to fix openai-edge-tts on Synology when updating the image doesn’t help
• How to upgrade edge-tts to 7.3.1 inside the container (safely, with a hash check)
• Bonus: how I changed the API key while I was at it

スポンサーリンク

What the edge-tts 403 error looks like

The audio is made in the step where n8n (an automation tool) calls the Edge TTS container. In n8n’s execution log, only that step had turned red and stopped.

n8n execution log: only the HTTP Request that makes the audio has turned red and stopped

Here’s what the error looked like.

500 - {"details":"403, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1?...&Sec-MS-GEC-Version=1-143.0.3650.75'","error":"An internal server error occurred"}

The container (openai-edge-tts) returns 500, but the real cause is the 403 inside it. It means Microsoft’s text-to-speech service, which the container talks to, is turning the request away.

Going back through the log, the last time audio was made successfully was May 25.

The cause: Microsoft changed how clients connect in October

I asked Claude (my AI assistant) to look into it. On the GitHub page of edge-tts, the Python library that Edge TTS uses inside, there were lots of reports starting in October 2026 saying “suddenly getting 403.” Not just in English, but in Chinese too.

The cause is that in October, Microsoft updated the token check clients must pass when they connect (Sec-MS-GEC). Older versions of edge-tts don’t support the new check, so they get turned away at the door.

The edge-tts developer responded quickly: version 7.3.0, released on October 13, 2026, supports the new check (Sec-MS-GEC v2), and 7.3.1 came out the same day.

Suitman wearing earphones, puzzled because no sound is coming

How to tell if you have an old version

If the error URL ends with a number that starts with “1-”, like Sec-MS-GEC-Version=1-143.0.3650.75, you have an old version of edge-tts. New versions use “2-”.

By the way, at one point someone reported “7.3.1 still doesn’t fix it (it still says 1-).” The author replied, “No, that’s a problem with your environment,” and the person came back with “I checked, and it was my mistake,” and closed it. If you’re searching for this error, you might run into that report and get confused, so keep that in mind.

openai-edge-tts on Synology: updating the image doesn’t fix it

Normally, you’d expect to fix this by pulling the latest image in Container Manager (the Synology app for managing Docker containers).

But the container I use, travisvn/openai-edge-tts, hasn’t been updated on GitHub since July 2025, and the newest image on Docker Hub was from February 18, 2026. The edge-tts inside is still 7.2.7.

In other words, even if you update the image, the edge-tts inside stays old.

So I decided to update just the edge-tts inside the container.

The fix: upgrade edge-tts to 7.3.1 inside the container

Before installing it, I did my usual safety check.

ItemResult
ReleasedOctober 13, 2026 (19 days before I installed it)
DownloadsAbout 2.63 million per week
GitHub starsAbout 12,000
Known vulnerabilities or hijacking incidentsNone

It’s a widely used library, so it looked safe.

① Open a shell inside the container

Container Manager → “Container” → open openai-edge-tts → “Terminal” tab → “Create” → click the “bash” that appears on the left, and you get a black terminal screen.

② Check the current version

python3 -m pip show edge-tts | head -3
Checking the edge-tts version in the container terminal: it shows 7.2.7, with a BrokenPipeError below

Version: 7.2.7. An old version, just as I thought.

There was also an error below it, ERROR: Pipe to stdout was broken. According to Claude, that’s only because I added head -3 (show just the first three lines), so pip is saying “the place I was writing to has already closed.” It’s harmless.

③ Swap it for 7.3.1

echo 'edge-tts==7.3.1 --hash=sha256:2a3c79d6235a7a736d681233823ce5492e829b43eb47beae49aa181237a8f9a4' > /tmp/edge-tts.txt && python3 -m pip install --no-deps --require-hashes -r /tmp/edge-tts.txt
  • --hash: the package won’t install unless its hash (a kind of fingerprint of the file) matches, so only the exact file you checked gets installed. You can find the hash on the 7.3.1 page of PyPI (the site that distributes Python packages)
  • --no-deps: don’t touch any other packages
Screen showing edge-tts successfully upgraded to 7.3.1

If you see Successfully installed edge-tts-7.3.1, it worked. You can ignore the yellow warning about running as root and the notice that a new version of pip is available.

④ Restart the container

In the “Container” list, select openai-edge-tts, then “Action” → “Restart”.

Right after restarting the openai-edge-tts container in Container Manager

⑤ Retry in n8n from the step that failed

In n8n’s executions screen, open the failed execution and click the circular arrow at the top right → “Retry with original workflow”. It picks up again from the step that failed (making the audio).

Along the way, a “Production Checklist” pop-up appeared. It’s just n8n’s list of recommendations. The “Enable MCP access” item in it only adds one more way to control n8n from outside, so if you don’t use it, you can leave it off.

Retrying the failed execution in n8n and it succeeding

It turned green, and all three audio files were made ♪( ´θ`)ノ

Suitman listening through earphones, looking relieved

Recreating the container undoes the fix
Because you installed it directly inside the container, recreating it in Container Manager (Duplicate or reset) or updating the image puts edge-tts back to 7.2.7. If that happens, just do steps ② to ④ again.

I also changed the API key while I was at it

openai-edge-tts lets you set a key (API_KEY) that callers must send. Mine was still the simple test key from when I first set it up, so I took this chance to change it.

It can only be reached from inside my home and over Tailscale (a private network of just my own devices), so it wasn’t urgent, but it’s better to fix these things when you notice them.

You can’t change it in Container Manager’s “Settings”

When I stopped the container and opened “Settings”, the only things I could change were the name, memory and CPU.

Container Manager Settings: only the name, memory and CPU can be changed

As the notice there says, to change environment variables (like API_KEY), you recreate the container with “Duplicate”.

Recreate it with “Duplicate”, changing only API_KEY

  1. Stop the old container (Action → Stop)
  2. With it still selected, click “Duplicate” → in the “Environment” step, change only the value of API_KEY to the new key (leave the port, such as 5050, as it is)
  3. Once the new container is running, you’re done
The new container made with Duplicate is running, and the old one is stopped

⚠️ The new container is built from the image, so edge-tts goes back to 7.2.7. Do steps ③ and ④ again in the new container.

I made the new key with my password manager (letters and numbers only, 32+ characters). Symbols can sometimes break things when you paste them into settings.

In n8n, keep the key in a credential instead of typing it in

On the n8n side, I had typed the key directly into the HTTP Request settings, so I changed that too.

In n8n’s “Credentials” (its safe place for login details), create a “Header Auth” credential with Authorization as the Name and Bearer plus your key as the Value.

n8n Header Auth credential (the key is hidden)

Then in the HTTP Request node, set “Authentication” to “Generic Credential Type” → “Header Auth” and pick that credential. The key no longer shows up in the settings screen or in exported files, which feels much safer.

Finally, I tested it with a short English sentence I wrote myself and confirmed that all three audio files were made. Once that worked, I deleted the old container I had stopped.

A note on using Edge TTS (commercial use)

Oh, one more thing.

Edge TTS uses the “Read aloud” feature of Microsoft Edge in an unofficial way. As happened this time, it can suddenly stop working because of changes on Microsoft’s side.

Also, “edge-tts commercial use” shows up in Google’s search suggestions, so a lot of people seem to wonder about it. In Microsoft’s Q&A, there’s an answer saying that using it commercially without an Azure (Microsoft’s paid cloud service) subscription could violate the terms.

So I only use the audio I make for my own study. If you want to use the audio on a blog or YouTube, look into the official Azure AI Speech service.

Summary

How to fix the edge-tts 403 error
• The cause is Microsoft’s change in October. Old edge-tts (7.2.x) gets rejected with 403
• Upgrading edge-tts to 7.3.0 or later (7.3.1 here) fixes it
• On Synology, openai-edge-tts stays old inside even if you update the image → swap it with pip inside the container
• Recreating the container undoes it, so reinstall each time
• To change the API key, recreate the container with “Duplicate”. In n8n, keep the key in a Header Auth credential

When an error shows up, I honestly can’t tell what’s wrong on my own. But AI can look at n8n and the inside of the container with me, so I can fix things just by asking in plain words. That’s really reassuring.

I hope this helps if you’re stuck on the same “edge-tts 403” error.

If you run things on a Synology NAS too, these posts might help.

☕ Enjoyed this post?

I'm a Japanese blogger who spent 8 years relearning English from scratch.
If this post helped you, a coffee would mean a lot — thank you for reading!