GitHub Activity API
Public events with typed payload (Push commits/ref, PR/issue action) — 90-event ceiling.
GET request to /v1/github/activity that responds with clean JSON and costs ~12 credits (0.4/result). Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the GitHub Activity API?
Recent public events from /users/{login}/events/public with a normalized payload per type: PushEvent → ref, size, commits[{sha,message}]; PullRequestEvent → action + PR fields; IssuesEvent → action + issue fields. actor is omitted (same as username). GitHub caps this feed at 90 events (~90 days) — eventCeiling is echoed and pagination stops there (limit max 90). Opaque nextCursor from the Link header. Not a contribution graph — use github/contributions for the heatmap.
What you get
- Bulk list of activity with metadata
- Dates, URLs, and engagement fields when available
- Configurable result limit
- Ideal for monitoring and content pipelines
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/github/activity?username=getify" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"username": "getify",
"eventCeiling": 90,
"totalReturned": 2,
"nextCursor": "eyJ2IjoxLCJrIjoiYWN0aXZpdHkiLCJwIjoyfQ",
"hasMore": true,
"events": [
{
"id": "9001",
"type": "PushEvent",
"repo": "getify/You-Dont-Know-JS",
"repoUrl": "https://github.com/getify/You-Dont-Know-JS",
"payload": {
"ref": "refs/heads/2nd-ed",
"head": "deadbeef",
"before": "cafebabe",
"size": 1,
"distinctSize": 1,
"commits": [
{
"sha": "deadbeef",
"message": "typo fix",
"authorName": "Kyle Simpson",
"authorEmail": "getify@gmail.com",
"distinct": true
}
]
},
"createdAt": "2026-07-01T10:00:00Z",
"public": true
},
{
"id": "9002",
"type": "IssuesEvent",
"repo": "getify/You-Dont-Know-JS",
"repoUrl": "https://github.com/getify/You-Dont-Know-JS",
"payload": {
"action": "opened",
"number": 7,
"title": "Clarify chapter 3",
"url": "https://github.com/getify/You-Dont-Know-JS/issues/7",
"state": "open"
},
"createdAt": "2026-06-28T10:00:00Z",
"public": true
}
]
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success, cached, creditsUsed, and a data object with the following fields:
Top-level fields
usernameAccount username / handle.eventCeilingHard cap of 90 — GitHub's /users/{u}/events/public limit. hasMore is false once reached.totalReturnedNumber of items returned in this response.nextCursorOpaque Link-header cursor. Pagination stops at eventCeiling.hasMoreWhether more results are available beyond this page. When true, pass nextCursor to fetch the next page.
Events
Each item in events contains:
idStable platform ID for the item.typeGitHub event enum: PushEvent, PullRequestEvent, IssuesEvent, CreateEvent, WatchEvent, ForkEvent, …repoowner/name of the repository the event targets.repoUrlRepo url URL.payloadType-specific details — PushEvent: ref/size/commits[]; PullRequestEvent/IssuesEvent: action + entity fields.createdAtCreation date (ISO 8601).publicPublic. Example: true.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| username | string | Yes | GitHub username or profile URL, e.g. getify. |
| limit | integer | No | Max items to return (default 30, max 90). Billed per result. |
| cursor | string | No | Opaque cursor from a previous nextCursor. Pagination stops after GitHub's 90-event public activity ceiling. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. Envelope includes cached + cachedAt on hits. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs ~12 credits (0.4/result) — billed per result, so the exact amount scales with how many items you request. Pass cache=true for a free 24h cache hit; default is always fresh (metrics refresh within ~1 hour).
How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/github/activityand parse the JSON response.
Use cases
Push forensics
Read PushEvent payload.commits[].message + ref — not just 'someone pushed'.
Issue/PR actions
Track opened/closed/merged via IssuesEvent and PullRequestEvent payload.action.
Bounded feed
Respect eventCeiling=90 — this is recent public activity, not a full history archive.
Frequently asked questions
What does the GitHub Activity API do?+
The GitHub Activity API lets you list items in bulk with metadata from a public GitHub GitHub resource using one GET request to /v1/github/activity. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the GitHub Activity API cost?+
At the default limit this endpoint costs 12 credits (0.4 per result). Billing scales with how many results you request. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a GitHub API key or OAuth?+
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why is there an eventCeiling of 90?+
GitHub's /users/{u}/events/public returns at most 90 events (and only ~90 days). We echo eventCeiling and stop hasMore there — deep pagination past that is not available.
Where is the commit message / branch?+
On PushEvent rows, payload.ref is the branch and payload.commits[] has sha + message. Other types expose payload.action and the related entity fields.
Is the GitHub Activity API suitable for production use?+
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Hits include cached + cachedAt. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
More GitHub APIs
Ready to use the GitHub Activity API?
Sign up, grab your key, and make your first call in 60 seconds.