GitHub: why draft, ready for review or close was refused
GitHub's REST endpoint for updating a pull request, PATCH /repos/OWNER/REPO/pulls/NUMBER, takes title, body, state (open or closed), base and maintainer_can_modify, and no draft field: a pull request is closed there, and turned into a draft or marked ready for review with the GraphQL mutations convertPullRequestToDraft and markPullRequestReadyForReview, which take the pull request's id. The documented answers to the PATCH are 200, 403, and 422 when the request fails validation or the endpoint has been spammed. The refusals below are quoted from public reports, with GitHub's documented rules behind them (checked October 25, 2026).
mutation {
markPullRequestReadyForReview(input: {pullRequestId: "PR_…"}) {
pullRequest { isDraft }
}
}
What GitHub says, and why
Resource not accessible by integration (convertPullRequestToDraft)or(markPullRequestReadyForReview), from a workflow'sGITHUB_TOKEN: public reports found thatpull-requests: writealone was refused, and that addingcontents: writelet the same command through. Another found that a workflow run for a pull request from a fork gets a read-only token, which is refused as well.Resource not accessible by personal access token(FORBIDDEN): a public report found the same with a fine-grained token that had Pull requests read and write; a classic token converted the same pull request.- Closing needs less: in a public report, a workflow token with
contents: readandpull-requests: writewas refused the draft conversion but closed the pull request. In GitHub's list of permissions, thePATCHis Pull requests with write access, for a fine-grained token. - The role: in GitHub's table of repository roles, marking a draft ready for review and converting a pull request to a draft take the Write role or above; closing and reopening any pull request takes Triage or above.
- The plan: GitHub's documentation says drafts are available in public repositories with GitHub Free, GitHub Free for organizations, GitHub Pro and legacy per-repository plans, and in public and private repositories with GitHub Team and GitHub Enterprise Cloud. A private repository on GitHub Free or GitHub Pro has no drafts to convert to.
- Who may update: GitHub's documentation for the
PATCHsays that updating a pull request in a public repository takes write access to the head or source branch, and in a repository owned by an organization, membership of that organization.
What changes when it goes through
- GitHub's documentation says that marking a pull request ready for review requests reviews from any code owners.
- After converting to a draft, no one can merge the pull request until it is marked ready for review again; people subscribed to its notifications stay subscribed.
- A closed pull request can be reopened with
stateopen.
What to do
- A workflow: give its job
contents: writeas well aspull-requests: write. - A fine-grained token: give it Contents with write access as well as Pull requests, or use a classic token with the
reposcope (see which permission to add). - Your role: ask for the Write role to change the stage of someone's pull request, or Triage to close it.
- No drafts on the plan: leave the pull request open, and say in it that it is not ready yet.
- A merge refused because it is a draft: mark it ready for review first (see why GitHub refused the merge).
In IntelliJ IDEA: a draft gets only Post Pull Request, and nothing turns it back into a draft
How the GitHub support built into IntelliJ IDEA changes the stage of a pull request, in its source (checked October 31, 2026; IntelliJ IDEA: GHPRDetailsActionsComponentFactory.kt, CodeReviewDetailsActionsComponentFactory.kt, GHPRPostReviewAction.kt, GHPRCloseAction.kt, GHPRReviewFlowViewModelImpl.kt, GHPRDetailsServiceImpl.kt, GHGQLRequests.kt):
- What it offers: on a draft, the only button is Post Pull Request, which marks it ready for review (GraphQL
markPullRequestReadyForReview); there is no Close or merge on a draft there. On an open pull request, Close Pull Request is in the more-actions menu; on a closed one, the only button is Reopen Pull Request. Closing and reopening use the RESTPATCHabove withstate. - Who gets them: all three are on only for the author of the pull request or an account with Triage permission or above, as GitHub reported it when the IDE connected to the repository. So a Triage account sees Post Pull Request on someone else's draft, although GitHub's table above puts marking ready for review at Write.
- Nothing turns a pull request back into a draft: the source has a request for
markPullRequestReadyForReviewbut none forconvertPullRequestToDraft. Use GitHub for that. - When GitHub refuses, nothing appears on screen: the source writes the error to the IDE's log, where showing it is marked as still to do. The pull request is then loaded again, so the buttons follow its state on GitHub.
GitHub pull requests in IntelliJ IDEA
Pull Request Inbox for GitHub, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, shows Ready for Review on a draft, and Convert to Draft on a pull request you opened; Close asks first, and says that the pull request can be reopened on GitHub. Afterwards it says what changed. When GitHub refuses, it shows GitHub's words; for a token without the permission, it says so and points to Settings, where it asks for Pull requests and Contents with write access. The review inbox, diffs and conversations are free; approving, commenting, drafts, closing and merging are Pro (US$1.50 a month, with a 30-day trial).
GitHub is a trademark of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with or endorsed by GitHub, Inc. or JetBrains.
More: GitHub merge refused (405, 409) · GitHub review refused (422) · GitHub search 422 "Validation Failed" · "Resource not accessible by personal access token" · 401 "Bad credentials" · "Resource protected by organization SAML enforcement" · "API rate limit exceeded" · GitHub diff 406 "too_large", 3,000 files · GitHub line comment 422 "must be part of the diff" · GitHub branch update refused (422) · GitHub pull request not created (422, 403) · GitHub auto-merge refused · GitHub conversation not resolved · GitHub checks not shown (check runs 403) · GitHub file contents not read · GitHub compare refused (404, 422) · GitHub comment or reply refused (403 locked, archived) · GitHub merge method not allowed (405) · GitHub branch not found (404, 301) · GitHub Enterprise Server not reached · GitHub review request not shown · GitHub pull request list incomplete · GitHub 404 Not Found, renamed repositories (301, 307) · GitHub line comment outdated or not on the diff · GitHub pull requests not updating, notifications late · GitHub suggested change cannot be applied · GitHub required check stuck at "Expected" · GitHub code owner review required · GitHub merge blocked by unresolved conversations · GitHub merge blocked by unsigned commits · GitHub branch that merges through a merge queue · GitHub merge waiting for an approval of the most recent push · GitHub merge waiting for code scanning results · GitHub merge waiting for code quality results · GitHub merge blocked by a code coverage threshold · GitHub merge blocked by license compliance results · GitHub branch locked or its updates restricted · GitHub branch not deleted after merging · GitHub merge waiting for a team's approval (Required reviewers) · GitHub merge blocked by secret scanning alerts · GitHub stacked pull request not merging · GitHub push blocked by push rules · GitHub merge blocked by commit metadata rules · GitHub force push blocked · GitHub issue not closed by a merged pull request · GitHub pull request not checked out locally · GitHub pull request has merge conflicts · GitHub changes requested and dismissing a review · GitHub co-author not credited for a commit · GitHub dependency review check failed · GitHub Dependabot not rebasing its pull request · GitHub fork not syncing with upstream · GitHub pull request base branch not changing · GitHub pull request not reverting · GitHub pull request template not showing · GitHub pull request labels or assignees not added · GitHub pull request not closing or reopening · GitHub push blocked by push protection · GitHub pull request comment hidden · GitHub pull request blocked until deployments succeed · GitHub team review request replaced by members · GitHub pull request file no longer marked Viewed · GitHub pull request marked merged without being merged · GitHub Copilot review does not count as an approval · GitHub checks not running on a pull request a workflow created · GitHub Update branch button not shown on a pull request · GitHub checks failing on a Dependabot pull request · GitHub checks failing on a pull request from a fork · GitHub checks skipped by [skip ci] in a commit message · GitHub checks gone after the retention period · GitHub code review limits in a public repository · GitHub pull requests turned off or limited in a repository · GitHub checks run on every pull request in a stack · GitHub pull request showing commits already squash merged · GitHub pull request not showing a file diff · GitHub push to a pull request branch from a fork refused · GitHub check cancelled on a pull request · GitHub Rebase and merge not available · GitHub merge commit message not what you expected · GitHub pull request shows every line changed · GitHub API request timed out · GitHub pull request image or document diff not shown · GitHub review request refused (422) · GitHub pull request from Copilot: checks not running, approval not counted · GitHub push refused: GH006 and GH013 on a protected branch · GitHub "At least 1 approving review is required", approvals that do not count · GitHub pull request plugins for IntelliJ IDEA, compared · 日本語