Draft Pull Requests
Create a draft PR
gh api --method POST repos/:owner/:repo/pulls -f title="My new feature" -f body="Description of changes" -f head="feature-branch" -f base="main" -F draft=true
For cross-repo PRs, use head="username:branch".
Get PR details (check if draft)
gh api repos/:owner/:repo/pulls/<number>
Response includes "draft": true|false and "state": "open|closed".
Check if PR is draft (minimal output)
gh api repos/:owner/:repo/pulls/<number> --jq '{draft, state, title}'
Convert draft to ready for review
gh api --method PATCH repos/:owner/:repo/pulls/<number> -F draft=false
Note: Cannot convert back to draft via API once marked ready.
List open draft PRs
gh api repos/:owner/:repo/pulls --jq '.[] | select(.draft) | {number, title}'
List my open PRs in a repo
gh api repos/:owner/:repo/pulls -f state=open --jq '.[] | select(.user.login=="USERNAME") | {number, title, draft}'
PR Conversation Comments
Comments on the PR timeline (not on specific lines of code).
List conversation comments
gh api repos/:owner/:repo/issues/<number>/comments
Create a conversation comment
gh api --method POST repos/:owner/:repo/issues/<number>/comments -f body="Comment text"
Discussions (GraphQL)
List discussions:
gh api graphql -f query='query($owner:String!,$repo:String!) { repository(owner:$owner,name:$repo) { discussions(first:10) { nodes { number title url } } } }' -F owner=OWNER -F repo=REPO
View discussion:
gh api graphql -f query='query($owner:String!,$repo:String!,$number:Int!) { repository(owner:$owner,name:$repo) { discussion(number:$number) { title body comments(first:10) { nodes { body author { login } } } } } }' -F owner=OWNER -F repo=REPO -F number=NUM
Search discussions:
gh api graphql -f query='query($q:String!) { search(query:$q,type:DISCUSSION,first:10) { nodes { ...on Discussion { number title url } } } }' -f q="repo:OWNER/REPO QUERY"