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.

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
- 1 What the edge-tts 403 error looks like
- 2 The cause: Microsoft changed how clients connect in October
- 3 openai-edge-tts on Synology: updating the image doesn’t fix it
- 4 The fix: upgrade edge-tts to 7.3.1 inside the container
- 5 I also changed the API key while I was at it
- 6 A note on using Edge TTS (commercial use)
- 7 Summary
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.

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.

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.
| Item | Result |
|---|---|
| Released | October 13, 2026 (19 days before I installed it) |
| Downloads | About 2.63 million per week |
| GitHub stars | About 12,000 |
| Known vulnerabilities or hijacking incidents | None |
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
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

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”.

⑤ 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.

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

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.

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
- Stop the old container (Action → Stop)
- With it still selected, click “Duplicate” → in the “Environment” step, change only the value of
API_KEYto the new key (leave the port, such as 5050, as it is) - Once the new container is running, you’re done

⚠️ 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.

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!










Leave a Reply