timerring

Fix the Ghost Notification of Github

October 13, 2025 · 1 min read · Page View:
Tutorial
Git | Github
If you have any questions, feel free to comment below. Click the block can copy the code.
And if you think it's helpful to you, just click on the ads which can support this site. Thanks!

I ran into a stubborn GitHub notification blue dot that wouldn’t go away even though the Notifications page showed nothing. Here’s the quick, safe way I found to resolve it, plus a few alternatives and notes on why it happens.

Ghost Notification #

GitHub’s inbox badge showed an unread indicator, but opening https://github.com/notifications displayed no items. I reckon it must be a bug for Github. This appears to be a stale unread state on GitHub’s side that sometimes lingers after the original notification gets cleared or deleted.

Quick reset #

Use a temporary Personal Access Token (PAT) with just the notifications scope to tell the GitHub API to mark everything as read:

  1. Create a short‑lived token:

    • Go to https://github.com/settings/tokens/new. And grant only the notifications permission.
  2. Open your Notifications page and browser console:

    • Visit https://github.com/notifications.
    • Open DevTools Console (F12 on macOS).
  3. Paste and run this script (replace the token string):

const token = "YOUR_TOKEN_HERE"; // temporary PAT with `notifications` scope

fetch("https://api.github.com/notifications", {
  method: "PUT",
  headers: {
    Accept: "application/vnd.github+json",
    Authorization: `Bearer ${token}`,
  },
  body: JSON.stringify({}), // empty body marks all notifications as read
}).then((response) => {
  if (response.status === 205) {
    console.log("Success: the blue dot should be gone. You can delete the token now.");
  } else {
    console.error("Request failed. Status:", response.status);
    response.json().then((data) => console.error("Error details:", data));
  }
}).catch((error) => console.error("Network error:", error));
  1. Delete the token
    • Return to the token page and delete it after confirming the dot is gone.

Why this happens #

The issue was solved by there is a blue dot in my inbox, but I can’t find anything in notification page[1]. Occasionally the unread counter gets stuck due to a stale entry (for example, the underlying issue/discussion was removed or already cleared). As most people expect, a global ‘Mark all as read’ resets it; but in reality, it only resolved after calling the API directly. This bug has been reported to Github many years ago, but it’s still not fixed. So some hackers use this method to notify lots of users to their spam websites.


Related readings


<< prev | Disable SIP on... Continue strolling

If you want to follow my updates, or have a coffee chat with me, feel free to connect with me: