# GitHub Developer Data — official REST API profiles, repos, issues, pulls, commits, code search

> GitHub user profile
> ReefAPI engine `github` · 39 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/github/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /github/v1/user — 1 credit
GitHub user profile

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `anon_tier` (enum, optional) — Set to 1/true to deliberately use the anonymous GitHub API tier (no token, 60/hr per proxy IP, multiplied by the gateway's fresh-IP rotation) instead of a pooled PAT. Normally the engine auto-selects a PAT and only falls back to anonymous when no token has budget; this forces the anonymous path. [one of: 1, true]

**Returns:** user{} — login, id, name, bio, company, blog, location, public_repos, followers, following, created_at

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/user_repos — 1 credit
repositories owned by a user

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `type` (enum, optional) — Filter the repository list by relationship/visibility (accepted values vary slightly between user and org endpoints). [one of: all, owner, member, public, private, forks, sources]
- `sort` (enum, optional) — Field to sort repositories by. [one of: created, updated, pushed, full_name]
- `direction` (enum, optional) — Sort direction. [one of: asc, desc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (repositories: name, full_name, description, stars, forks, language, topics, pushed_at); meta has has_more/next_page/next_cursor + rate-limit

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/user_followers — 1 credit
followers for a user

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (follower user summaries: login, id, avatar_url, html_url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/user_following — 1 credit
accounts followed by a user

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (followed user summaries: login, id, avatar_url, html_url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/user_gists — 1 credit
public gists for a user

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (gists: id, description, files, public, created_at, html_url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/repo — 1 credit
repository metadata

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).

**Returns:** repo{} — full_name, description, stars, forks, watchers, open_issues, language, topics, license, default_branch, timestamps

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_issues — 1 credit
repository issues

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `state` (enum, optional) — Filter issues/pull requests by state. [one of: open, closed, all]
- `since` (string, optional) — Only records updated at/after this ISO-8601 timestamp.
- `sort` (enum, optional) — Field to sort issues by. [one of: created, updated, comments]
- `direction` (enum, optional) — Sort direction. [one of: asc, desc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (issues: number, title, state, user, labels, comments, created_at, body; pull_request key if the issue is a PR); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_pulls — 1 credit
repository pull requests

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `state` (enum, optional) — Filter issues/pull requests by state. [one of: open, closed, all]
- `sort` (enum, optional) — Field to sort pull requests by. [one of: created, updated, popularity, long-running]
- `direction` (enum, optional) — Sort direction. [one of: asc, desc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (pull requests: number, title, state, user, head/base, merged_at, created_at); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_commits — 1 credit
repository commits

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `sha` (string, optional) — Commit listing: branch name or commit SHA to start from (defaults to the repository's default branch).
- `path` (string, optional) — Only commits that touch this file path.
- `author` (string, optional) — Only commits by this GitHub login or email.
- `since` (string, optional) — Only records updated at/after this ISO-8601 timestamp.
- `until` (string, optional) — Only commits before this ISO-8601 timestamp.
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (commits: sha, commit.message, author, committer, date, html_url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_contributors — 1 credit
repository contributors

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `anon` (enum, optional) — Set to 1/true to also include anonymous contributors. [one of: 1, true]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (contributors: login, id, contributions, avatar_url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_releases — 1 credit
repository releases

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (releases: tag_name, name, body, draft, prerelease, published_at, assets); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_stargazers — 1 credit
repository stargazers

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (stargazer user summaries: login, id, avatar_url, html_url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_forks — 1 credit
repository forks

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `sort` (enum, optional) — Field to sort forks by. [one of: newest, oldest, stargazers, watchers]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (forked repositories: full_name, owner, stars, created_at); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_languages — 0 credits
repository language byte counts

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).

**Returns:** object mapping language name -> bytes of code (e.g. {"Python": 12345})

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_contents — 1 credit
repository content metadata for a path

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `path` (string, optional) — Path to a file or directory inside the repository (omit or '/' for the repository root).
- `ref` (string, optional) — Branch, tag, or commit SHA to read from (defaults to the default branch).

**Returns:** file: content metadata (name, path, size, sha, download_url, base64 content); directory: items[] of entries (name, path, type, size)

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/repo_readme — 1 credit
repository README metadata/content URL

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `ref` (string, optional) — Branch, tag, or commit SHA to read from (defaults to the default branch).

**Returns:** readme{} — name, path, size, sha, download_url, base64-encoded content

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/org — 1 credit
organization profile

**Parameters:**
- `org` (string, required) — GitHub organization login.

**Returns:** org{} — login, name, description, blog, location, public_repos, followers, created_at

### POST /github/v1/org_repos — 1 credit
organization repositories

**Parameters:**
- `org` (string, required) — GitHub organization login.
- `type` (enum, optional) — Filter the repository list by relationship/visibility (accepted values vary slightly between user and org endpoints). [one of: all, owner, member, public, private, forks, sources]
- `sort` (enum, optional) — Field to sort repositories by. [one of: created, updated, pushed, full_name]
- `direction` (enum, optional) — Sort direction. [one of: asc, desc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (org repositories: name, full_name, description, stars, language, pushed_at); meta has pagination + rate-limit

### POST /github/v1/org_members — 1 credit
public organization members

**Parameters:**
- `org` (string, required) — GitHub organization login.
- `filter` (enum, optional) — Filter organization members. [one of: all, 2fa_disabled]
- `role` (enum, optional) — Filter organization members by role. [one of: all, admin, member]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (member user summaries: login, id, avatar_url, html_url); meta has pagination + rate-limit

### POST /github/v1/search_repos — 2 credits
search repositories

**Parameters:**
- `q` (string, required) — GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').
- `sort` (enum, optional) — Field to sort search results by (omit for best-match relevance). [one of: stars, forks, help-wanted-issues, updated]
- `order` (enum, optional) — Sort direction for search results (only applies when sort is set). [one of: desc, asc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.

**Returns:** { total_count, incomplete_results, items[] } of repositories; meta has total, next_page, rate-limit (GitHub caps search at the first 1000 results)

**Example request body:**
```json
{
  "q": "fastapi",
  "per_page": 5
}
```

### POST /github/v1/search_users — 2 credits
search users

**Parameters:**
- `q` (string, required) — GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').
- `sort` (enum, optional) — Field to sort search results by (omit for best-match relevance). [one of: followers, repositories, joined]
- `order` (enum, optional) — Sort direction for search results (only applies when sort is set). [one of: desc, asc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.

**Returns:** { total_count, incomplete_results, items[] } of users; meta has total, next_page, rate-limit (search capped at first 1000 results)

**Example request body:**
```json
{
  "q": "fastapi"
}
```

### POST /github/v1/search_code — 3 credits
search code (token required by GitHub)

**Parameters:**
- `q` (string, required) — GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').
- `sort` (enum, optional) — Field to sort search results by (omit for best-match relevance). [one of: indexed]
- `order` (enum, optional) — Sort direction for search results (only applies when sort is set). [one of: desc, asc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.

**Returns:** { total_count, incomplete_results, items[] } of code matches (name, path, repository); meta has total + rate-limit. Requires a GitHub token.

**Example request body:**
```json
{
  "q": "fastapi"
}
```

### POST /github/v1/search_issues — 2 credits
search issues and pull requests

**Parameters:**
- `q` (string, required) — GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').
- `sort` (enum, optional) — Field to sort search results by (omit for best-match relevance). [one of: comments, created, updated, reactions]
- `order` (enum, optional) — Sort direction for search results (only applies when sort is set). [one of: desc, asc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.

**Returns:** { total_count, incomplete_results, items[] } of issues/PRs; meta has total, next_page, rate-limit (search capped at first 1000 results)

**Example request body:**
```json
{
  "q": "fastapi"
}
```

### POST /github/v1/search_topics — 2 credits
search GitHub topics

**Parameters:**
- `q` (string, required) — GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.

**Returns:** { total_count, incomplete_results, items[] } of topics (name, display_name, short_description, featured, curated, repository count signals); meta has total + rate-limit. Uses the mercy preview media type.

**Example request body:**
```json
{
  "q": "fastapi"
}
```

### POST /github/v1/search_commits — 2 credits
search commits across GitHub

**Parameters:**
- `q` (string, required) — GitHub search query, including qualifiers (e.g. 'language:python stars:>1000', 'author:torvalds').
- `sort` (enum, optional) — Field to sort search results by (omit for best-match relevance). [one of: author-date, committer-date]
- `order` (enum, optional) — Sort direction for search results (only applies when sort is set). [one of: desc, asc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.

**Returns:** { total_count, incomplete_results, items[] } of commits (sha, commit.message, author, repository); meta has total + rate-limit (capped at first 1000). Uses the cloak preview media type; query needs at least one qualifier, e.g. 'repo:owner/name fix'.

**Example request body:**
```json
{
  "q": "fastapi"
}
```

### POST /github/v1/repo_branches — 1 credit
repository branches

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (branches: name, commit{sha,url}, protected); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react",
  "per_page": 5
}
```

### POST /github/v1/repo_tags — 1 credit
repository tags

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (tags: name, commit{sha,url}, zipball_url, tarball_url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react",
  "per_page": 5
}
```

### POST /github/v1/repo_topics — 0 credits
repository topics (labels)

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).

**Returns:** { names[] } — the topic strings attached to the repository. Uses the mercy preview media type.

**Example request body:**
```json
{
  "owner": "facebook",
  "repo": "react"
}
```

### POST /github/v1/issue_detail — 1 credit
single issue detail

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `number` (integer, required) — Issue or pull request number (the #N shown in the GitHub UI).

**Returns:** issue{} — number, title, state, body, user, labels, assignees, milestone, comments count, reactions, created_at/updated_at/closed_at (pull_request key if a PR)

### POST /github/v1/issue_comments — 1 credit
comments on an issue or PR

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `number` (integer, required) — Issue or pull request number (the #N shown in the GitHub UI).
- `since` (string, optional) — Only records updated at/after this ISO-8601 timestamp.
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (comments: id, user, body, created_at, updated_at, reactions, html_url); meta has pagination + rate-limit

### POST /github/v1/pull_detail — 1 credit
single pull request detail

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `number` (integer, required) — Issue or pull request number (the #N shown in the GitHub UI).

**Returns:** pull{} — number, title, state, body, user, head/base, merged, mergeable, merged_at, review_comments, commits, additions, deletions, changed_files, labels

### POST /github/v1/pull_reviews — 1 credit
reviews on a pull request

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `number` (integer, required) — Issue or pull request number (the #N shown in the GitHub UI).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (reviews: id, user, state APPROVED/CHANGES_REQUESTED/COMMENTED, body, submitted_at, commit_id); meta has pagination + rate-limit

### POST /github/v1/pull_files — 1 credit
files changed in a pull request

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `number` (integer, required) — Issue or pull request number (the #N shown in the GitHub UI).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (changed files: filename, status, additions, deletions, changes, patch, blob_url); meta has pagination + rate-limit

### POST /github/v1/pull_commits — 1 credit
commits in a pull request

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `number` (integer, required) — Issue or pull request number (the #N shown in the GitHub UI).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (commits: sha, commit.message, author, committer, date, html_url); meta has pagination + rate-limit

### POST /github/v1/commit_detail — 1 credit
single commit detail with diff stats and changed files

**Parameters:**
- `owner` (string, required) — Repository owner — the user or organization login (the part before the slash in owner/repo).
- `repo` (string, required) — Repository name (the part after the slash in owner/repo).
- `sha` (string, required) — Commit SHA (full or short) — or a branch/tag name that resolves to a commit — to fetch the single-commit detail for.

**Returns:** commit{} — sha, commit.message, author, committer, stats{additions,deletions,total}, files[] (filename, status, additions, deletions, patch), parents, html_url

### POST /github/v1/user_events — 1 credit
public activity events for a user

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (public events: id, type PushEvent/IssuesEvent/…, repo, payload, created_at); meta has pagination + rate-limit

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/user_orgs — 1 credit
organizations a user belongs to (public)

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (organization summaries: login, id, description, avatar_url, url); meta has pagination + rate-limit

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/user_starred — 1 credit
repositories a user has starred

**Parameters:**
- `username` (string, required) — GitHub user login (the @handle, without the @).
- `sort` (enum, optional) — Field to sort starred repositories by. [one of: created, updated]
- `direction` (enum, optional) — Sort direction. [one of: asc, desc]
- `page` (integer, optional, default 1) — 1-based page number. Page forward with meta.next_page.
- `per_page` (integer, optional, default 100) — Results per page (1-100, default 100). Larger values are clamped.
- `cursor` (string, optional) — Opaque pagination cursor (forwarded as ?after=). Use the value from meta.next_cursor; ignored by the search_* actions.

**Returns:** items[] (starred repositories: full_name, owner, description, stars, language, topics, pushed_at); meta has pagination + rate-limit

**Example request body:**
```json
{
  "username": "torvalds"
}
```

### POST /github/v1/rate_limit — 0 credits
current token/IP rate-limit status

**Parameters:** none

**Returns:** rate-limit buckets (core, search, graphql, …) — each shows limit, remaining requests, and reset timestamp for the configured GitHub token or anonymous IP

## More
- Try it live, no code: https://reefapi.com/playground?engine=github
- Human docs page: https://reefapi.com/docs/github
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
