Back to Hermes Agent

GitHub REST API Cheatsheet

skills/github/github-repo-management/references/github-api-cheatsheet.md

2026.6.55.9 KB
Original Source

GitHub REST API Cheatsheet

Base URL: https://api.github.com

All requests need: -H "Authorization: token $GITHUB_TOKEN"

Use the gh-env.sh helper to set $GITHUB_TOKEN, $GH_OWNER, $GH_REPO automatically:

bash
source "${HERMES_HOME:-$HOME/.hermes}/skills/github/github-auth/scripts/gh-env.sh"

Repositories

ActionMethodEndpoint
Get repo infoGET/repos/{owner}/{repo}
Create repo (user)POST/user/repos
Create repo (org)POST/orgs/{org}/repos
Update repoPATCH/repos/{owner}/{repo}
Delete repoDELETE/repos/{owner}/{repo}
List your reposGET/user/repos?per_page=30&sort=updated
List org reposGET/orgs/{org}/repos
Fork repoPOST/repos/{owner}/{repo}/forks
Create from templatePOST/repos/{owner}/{template}/generate
Get topicsGET/repos/{owner}/{repo}/topics
Set topicsPUT/repos/{owner}/{repo}/topics

Pull Requests

ActionMethodEndpoint
List PRsGET/repos/{owner}/{repo}/pulls?state=open
Create PRPOST/repos/{owner}/{repo}/pulls
Get PRGET/repos/{owner}/{repo}/pulls/{number}
Update PRPATCH/repos/{owner}/{repo}/pulls/{number}
List PR filesGET/repos/{owner}/{repo}/pulls/{number}/files
Merge PRPUT/repos/{owner}/{repo}/pulls/{number}/merge
Request reviewersPOST/repos/{owner}/{repo}/pulls/{number}/requested_reviewers
Create reviewPOST/repos/{owner}/{repo}/pulls/{number}/reviews
Inline commentPOST/repos/{owner}/{repo}/pulls/{number}/comments

PR Merge Body

json
{"merge_method": "squash", "commit_title": "feat: description (#N)"}

Merge methods: "merge", "squash", "rebase"

PR Review Events

"APPROVE", "REQUEST_CHANGES", "COMMENT"

Issues

ActionMethodEndpoint
List issuesGET/repos/{owner}/{repo}/issues?state=open
Create issuePOST/repos/{owner}/{repo}/issues
Get issueGET/repos/{owner}/{repo}/issues/{number}
Update issuePATCH/repos/{owner}/{repo}/issues/{number}
Add commentPOST/repos/{owner}/{repo}/issues/{number}/comments
Add labelsPOST/repos/{owner}/{repo}/issues/{number}/labels
Remove labelDELETE/repos/{owner}/{repo}/issues/{number}/labels/{name}
Add assigneesPOST/repos/{owner}/{repo}/issues/{number}/assignees
List labelsGET/repos/{owner}/{repo}/labels
Search issuesGET/search/issues?q={query}+repo:{owner}/{repo}

Note: The Issues API also returns PRs. Filter with "pull_request" not in item when parsing.

CI / GitHub Actions

ActionMethodEndpoint
List workflowsGET/repos/{owner}/{repo}/actions/workflows
List runsGET/repos/{owner}/{repo}/actions/runs?per_page=10
List runs (branch)GET/repos/{owner}/{repo}/actions/runs?branch={branch}
Get runGET/repos/{owner}/{repo}/actions/runs/{run_id}
Download logsGET/repos/{owner}/{repo}/actions/runs/{run_id}/logs
Re-runPOST/repos/{owner}/{repo}/actions/runs/{run_id}/rerun
Re-run failedPOST/repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs
Trigger dispatchPOST/repos/{owner}/{repo}/actions/workflows/{id}/dispatches
Commit statusGET/repos/{owner}/{repo}/commits/{sha}/status
Check runsGET/repos/{owner}/{repo}/commits/{sha}/check-runs

Releases

ActionMethodEndpoint
List releasesGET/repos/{owner}/{repo}/releases
Create releasePOST/repos/{owner}/{repo}/releases
Get releaseGET/repos/{owner}/{repo}/releases/{id}
Delete releaseDELETE/repos/{owner}/{repo}/releases/{id}
Upload assetPOSThttps://uploads.github.com/repos/{owner}/{repo}/releases/{id}/assets?name={filename}

Secrets

ActionMethodEndpoint
List secretsGET/repos/{owner}/{repo}/actions/secrets
Get public keyGET/repos/{owner}/{repo}/actions/secrets/public-key
Set secretPUT/repos/{owner}/{repo}/actions/secrets/{name}
Delete secretDELETE/repos/{owner}/{repo}/actions/secrets/{name}

Branch Protection

ActionMethodEndpoint
Get protectionGET/repos/{owner}/{repo}/branches/{branch}/protection
Set protectionPUT/repos/{owner}/{repo}/branches/{branch}/protection
Delete protectionDELETE/repos/{owner}/{repo}/branches/{branch}/protection

User / Auth

ActionMethodEndpoint
Get current userGET/user
List user reposGET/user/repos
List user gistsGET/gists
Create gistPOST/gists
Search reposGET/search/repositories?q={query}

Pagination

Most list endpoints support:

  • ?per_page=100 (max 100)
  • ?page=2 for next page
  • Check Link header for rel="next" URL

Rate Limits

  • Authenticated: 5,000 requests/hour
  • Check remaining: curl -s -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/rate_limit

Common curl Patterns

bash
# GET
curl -s -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$GH_OWNER/$GH_REPO

# POST with JSON body
curl -s -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$GH_OWNER/$GH_REPO/issues \
  -d '{"title": "...", "body": "..."}'

# PATCH (update)
curl -s -X PATCH \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$GH_OWNER/$GH_REPO/issues/42 \
  -d '{"state": "closed"}'

# DELETE
curl -s -X DELETE \
  -H "Authorization: token $GITHUB_TOKEN" \
  https://api.github.com/repos/$GH_OWNER/$GH_REPO/issues/42/labels/bug

# Parse JSON response with python3
curl -s ... | python3 -c "import sys,json; data=json.load(sys.stdin); print(data['field'])"