serpentiel

If your code authenticates as a GitHub App, addUpvote and removeUpvote will never work. No permission unlocks them. No token the App can mint changes it. GitHub refuses integrations as a class, and the only place that’s written down is a community thread that’s been sitting unanswered for years. Stop debugging and go build something else.

Here’s the wall:

{
  "type": "FORBIDDEN",
  "message": "Resource not accessible by integration"
}

This error smells like a missing permission, so that’s where your time goes first — into the permissions matrix, hunting for the one that unlocks it. It doesn’t exist. An App holding read and write on Discussions can create discussions, post comments, and toggle reactions; the same credentials that do all of that are refused the upvote. One mutation, walled off alone.

Token type doesn’t save you either. Installation token — refused. User-to-server token, the one minted when a person signs in through your App and acts as that person — refused. That same person, same account, clicking the arrow on github.com: works. The gate doesn’t care who asks. It cares what kind of credential asks.

The documentation says nothing. A community discussion has carried the question for years; the answer so far is the error message.

One consolation prize exists: upvoteCount reads fine, so you can render a number nobody can change. Don’t. A control that errors is a broken promise, and a count without a control is a taunt. If upvotes can’t work, the honest version of the feature is its absence.

comments