GitHub API for developers, repositories and search
Look up a developer, read their contribution history and repositories, and search eight kinds of GitHub content with filters sent as plain JSON fields.
request.ts
import { Bridgly } from "@bridgly/sdk";const client = new Bridgly({ apiKey: "bgly_YOUR_KEY" });const res = await client.github.searchUsers({ location: "Berlin", language: "Rust", type: "user", sort: "followers", count: 10});if (res.type === "success") { console.log(res.data);}npm install @bridgly/sdk
All 13 GitHub endpoints
A profile lookup returns the public profile with follower and repository counts, company, location, website and the repositories the developer has pinned. The contributions endpoint returns the calendar behind the green squares: a count for every day in the window, plus totals split into commits, issues, pull requests and reviews.
From a username you can also list their repositories in the order you choose, the repositories they have starred, and their public projects.
Search is the larger half. There is one endpoint each for repositories, code, commits, issues, pull requests, discussions, users and topics, and each one accepts the filters that make sense for it: star and fork ranges, language, license, topics, labels, author, assignee, review status, created and updated dates, and more.
Developers
One account’s public profile, activity and work.
POST/github/get-profile
Profile: bio, company, location, followers, repository count and pinned repositories1 credit per requestDocs →
Request body
usernamestringrequired- GitHub username (login) without the "@", e.g. "torvalds".
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "id": "string", "databaseId": 0, "username": "string", "name": "string", "bio": "string", "company": "string", "location": "string", "email": "string", "websiteUrl": "string", "twitterUsername": "string", "avatarUrl": "string", "url": "string", "isHireable": true, "followersCount": 0, "followingCount": 0, "publicRepositoriesCount": 0, "createdAt": "string", "updatedAt": "string", "pinnedRepos": [ { "id": "string", "databaseId": 0, "name": "string", "nameWithOwner": "string", "owner": { "username": "string", "id": "string", "url": "string", "avatarUrl": "string" }, "description": "string", "url": "string", "homepageUrl": "string", "isPrivate": true, "isFork": true, "isArchived": true, "isTemplate": true, "primaryLanguage": { "name": "string", "color": "string" }, "stargazerCount": 0, "forkCount": 0, "watcherCount": 0, "openIssuesCount": 0, "diskUsage": 0, "license": { "key": "string", "name": "string", "spdxId": "string", "url": "string" }, "topics": [ "string" ], "createdAt": "string", "updatedAt": "string", "pushedAt": "string" } ] }}POST/github/get-contributions
Daily contribution counts, plus totals for commits, issues, pull requests and reviews1 credit per requestDocs →
Request body
usernamestringrequired- GitHub username (login) without the "@", e.g. "torvalds".
fromstring- ISO-8601 start of the contribution window (inclusive), e.g. "2025-01-01T00:00:00Z". Defaults to one year ago. Must be within one year of `to`.
tostring- ISO-8601 end of the contribution window (inclusive), e.g. "2025-12-31T00:00:00Z". Defaults to now.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "username": "string", "from": "string", "to": "string", "totalContributions": 0, "totalCommitContributions": 0, "totalIssueContributions": 0, "totalPullRequestContributions": 0, "totalPullRequestReviewContributions": 0, "totalRepositoryContributions": 0, "restrictedContributionsCount": 0, "days": [ { "date": "string", "count": 0, "weekday": 0, "color": "string" } ] }}POST/github/list-repositories
A user’s public repositories with language, stars, forks, topics and license1 credit per requestDocs →
Request body
usernamestringrequired- GitHub username (login) without the "@", e.g. "torvalds".
countinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
orderenum · default pushed- Sort order for the repositories. Defaults to "pushed".
- pushed | updated | created | name | stars
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "username": "string", "repositories": [ { "id": "string", "databaseId": 0, "name": "string", "nameWithOwner": "string", "owner": { "username": "string", "id": "string", "url": "string", "avatarUrl": "string" }, "description": "string", "url": "string", "homepageUrl": "string", "isPrivate": true, "isFork": true, "isArchived": true, "isTemplate": true, "primaryLanguage": { "name": "string", "color": "string" }, "stargazerCount": 0, "forkCount": 0, "watcherCount": 0, "openIssuesCount": 0, "diskUsage": 0, "license": { "key": "string", "name": "string", "spdxId": "string", "url": "string" }, "topics": [ "string" ], "createdAt": "string", "updatedAt": "string", "pushedAt": "string" } ], "after": "string" }}POST/github/list-starred
Repositories a user has starred, with their stats1 credit per requestDocs →
Request body
usernamestringrequired- GitHub username (login) without the "@", e.g. "torvalds".
countinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "username": "string", "repositories": [ { "id": "string", "databaseId": 0, "name": "string", "nameWithOwner": "string", "owner": { "username": "string", "id": "string", "url": "string", "avatarUrl": "string" }, "description": "string", "url": "string", "homepageUrl": "string", "isPrivate": true, "isFork": true, "isArchived": true, "isTemplate": true, "primaryLanguage": { "name": "string", "color": "string" }, "stargazerCount": 0, "forkCount": 0, "watcherCount": 0, "openIssuesCount": 0, "diskUsage": 0, "license": { "key": "string", "name": "string", "spdxId": "string", "url": "string" }, "topics": [ "string" ], "createdAt": "string", "updatedAt": "string", "pushedAt": "string" } ], "after": "string" }}POST/github/list-projects
A user’s public projects with title, description and status1 credit per requestDocs →
Request body
usernamestringrequired- GitHub username (login) without the "@", e.g. "torvalds".
countinteger · 1–10 · default 10- Number of results to return (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "username": "string", "projects": [ { "id": "string", "number": 0, "title": "string", "shortDescription": "string", "url": "string", "closed": true, "public": true, "createdAt": "string", "updatedAt": "string" } ], "after": "string" }}Search repositories and code
Find projects by stars, language, topic and activity, or find the files and commits inside them.
POST/github/search-repositories
Repositories filtered by stars, forks, language, topics, license and dates1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
ownersstring[]- Limit to these owners (users or orgs). Maps to `user:`.
reposstring[]- Limit to these "owner/name" repositories. Maps to `repo:`.
languagestring- Primary language, e.g. "TypeScript". Maps to `language:`.
starsobject- Filter by star count. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
stars.gtnumber · nullable- Strictly greater than this value.
stars.gtenumber · nullable- Greater than or equal to this value.
stars.ltnumber · nullable- Strictly less than this value.
stars.ltenumber · nullable- Less than or equal to this value.
forksobject- Filter by fork count. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
forks.gtnumber · nullable- Strictly greater than this value.
forks.gtenumber · nullable- Greater than or equal to this value.
forks.ltnumber · nullable- Strictly less than this value.
forks.ltenumber · nullable- Less than or equal to this value.
sizeobject- Filter by repository size in KB. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
size.gtnumber · nullable- Strictly greater than this value.
size.gtenumber · nullable- Greater than or equal to this value.
size.ltnumber · nullable- Strictly less than this value.
size.ltenumber · nullable- Less than or equal to this value.
createdobject- Filter by creation date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
created.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
created.gtestring · nullable- On or after this date (YYYY-MM-DD).
created.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
created.ltestring · nullable- On or before this date (YYYY-MM-DD).
pushedobject- Filter by date of last push. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
pushed.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
pushed.gtestring · nullable- On or after this date (YYYY-MM-DD).
pushed.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
pushed.ltestring · nullable- On or before this date (YYYY-MM-DD).
topicsstring[]- Require each of these topics. Maps to `topic:`.
licensestring- SPDX license key, e.g. "mit". Maps to `license:`.
archivedboolean- Filter by archived state. Maps to `archived:`.
visibilityenum- Repository visibility. Maps to `is:public` / `is:private`.
- public | private
forkenum · default exclude- Whether to include forks: "exclude" (default), "include" (`fork:true`), or "only" (`fork:only`).
- exclude | include | only
sortenum · default best-match- Sort field. Defaults to relevance ("best-match").
- best-match | stars | forks | updated | help-wanted-issues
orderenum · default desc- Sort direction. Defaults to "desc".
- desc | asc
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "repositories": [ { "id": "string", "databaseId": 0, "name": "string", "nameWithOwner": "string", "owner": { "username": "string", "id": "string", "url": "string", "avatarUrl": "string" }, "description": "string", "url": "string", "homepageUrl": "string", "isPrivate": true, "isFork": true, "isArchived": true, "isTemplate": true, "primaryLanguage": { "name": "string", "color": "string" }, "stargazerCount": 0, "forkCount": 0, "watcherCount": 0, "openIssuesCount": 0, "diskUsage": 0, "license": { "key": "string", "name": "string", "spdxId": "string", "url": "string" }, "topics": [ "string" ], "createdAt": "string", "updatedAt": "string", "pushedAt": "string" } ], "after": "string" }}POST/github/search-code
Files matching a query, with path, repository and link1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
ownersstring[]- Limit to these owners (users or orgs). Maps to `user:`.
reposstring[]- Limit to these "owner/name" repositories. Maps to `repo:`.
languagestring- Programming language, e.g. "Go". Maps to `language:`.
extensionstring- File extension without the dot, e.g. "ts". Maps to `extension:`.
filenamestring- Exact file name, e.g. "package.json". Maps to `filename:`.
pathstring- Path prefix within the repo, e.g. "src/app". Maps to `path:`.
forkenum · default exclude- Whether to include forks. Defaults to excluding them.
- exclude | include
sortenum · default best-match- Sort field. Defaults to relevance ("best-match").
- best-match | indexed
orderenum · default desc- Sort direction. Defaults to "desc".
- desc | asc
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
pageinteger · 1–100 · default 1- 1-based page number. Defaults to 1. Only the first 1,000 results of a search can be paged through.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "results": [ { "name": "string", "path": "string", "sha": "string", "url": "string", "htmlUrl": "string", "repository": { "id": 0, "nodeId": "string", "name": "string", "fullName": "string", "ownerLogin": "string", "url": "string", "isPrivate": true } } ], "nextPage": 0 }}POST/github/search-commits
Commits with message, author, committer, date and repository1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
ownersstring[]- Limit to these owners (users or orgs). Maps to `user:`.
reposstring[]- Limit to these "owner/name" repositories. Maps to `repo:`.
authorstring- Commits authored by this GitHub user. Maps to `author:`.
committerstring- Commits committed by this GitHub user. Maps to `committer:`.
authoredDateobject- Filter by author date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
authoredDate.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
authoredDate.gtestring · nullable- On or after this date (YYYY-MM-DD).
authoredDate.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
authoredDate.ltestring · nullable- On or before this date (YYYY-MM-DD).
committedDateobject- Filter by commit date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
committedDate.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
committedDate.gtestring · nullable- On or after this date (YYYY-MM-DD).
committedDate.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
committedDate.ltestring · nullable- On or before this date (YYYY-MM-DD).
hashstring- Commits with this SHA (or prefix). Maps to `hash:`.
mergeboolean- Only merge commits (true) or exclude them (false). Maps to `merge:`.
sortenum · default best-match- Sort field. Defaults to relevance ("best-match").
- best-match | author-date | committer-date
orderenum · default desc- Sort direction. Defaults to "desc".
- desc | asc
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
pageinteger · 1–100 · default 1- 1-based page number. Defaults to 1. Only the first 1,000 results of a search can be paged through.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "commits": [ { "sha": "string", "message": "string", "url": "string", "apiUrl": "string", "author": { "name": "string", "email": "string", "date": "string" }, "authorLogin": "string", "committer": { "name": "string", "email": "string", "date": "string" }, "committerLogin": "string", "commentCount": 0, "repository": { "id": 0, "nodeId": "string", "name": "string", "fullName": "string", "ownerLogin": "string", "url": "string", "isPrivate": true } } ], "nextPage": 0 }}POST/github/search-topics
Topics with description and featured or curated flags1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
featuredboolean- Only featured topics. Maps to `is:featured`.
curatedboolean- Only curated topics. Maps to `is:curated`.
repositoriesobject- Filter by number of repositories using the topic. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
repositories.gtnumber · nullable- Strictly greater than this value.
repositories.gtenumber · nullable- Greater than or equal to this value.
repositories.ltnumber · nullable- Strictly less than this value.
repositories.ltenumber · nullable- Less than or equal to this value.
createdobject- Filter by topic creation date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
created.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
created.gtestring · nullable- On or after this date (YYYY-MM-DD).
created.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
created.ltestring · nullable- On or before this date (YYYY-MM-DD).
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
pageinteger · 1–100 · default 1- 1-based page number. Defaults to 1. Only the first 1,000 results of a search can be paged through.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "topics": [ { "name": "string", "displayName": "string", "shortDescription": "string", "description": "string", "createdBy": "string", "featured": true, "curated": true, "score": 0 } ], "nextPage": 0 }}Search issues, pull requests and discussions
Filter by state, author, labels, review status and dates across every public repository or a chosen few.
POST/github/search-issues
Issues with state, author, labels, comment count and dates1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
ownersstring[]- Limit to these owners (users or orgs). Maps to `user:`.
reposstring[]- Limit to these "owner/name" repositories. Maps to `repo:`.
languagestring- Language of the containing repo. Maps to `language:`.
stateenum- Issue/PR state. Maps to `state:`.
- open | closed
authorstring- Opened by this user. Maps to `author:`.
assigneestring- Assigned to this user. Maps to `assignee:`.
mentionsstring- Mentioning this user. Maps to `mentions:`.
labelsstring[]- Require each of these labels. Maps to `label:`.
commentsobject- Filter by comment count. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
comments.gtnumber · nullable- Strictly greater than this value.
comments.gtenumber · nullable- Greater than or equal to this value.
comments.ltnumber · nullable- Strictly less than this value.
comments.ltenumber · nullable- Less than or equal to this value.
createdobject- Filter by creation date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
created.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
created.gtestring · nullable- On or after this date (YYYY-MM-DD).
created.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
created.ltestring · nullable- On or before this date (YYYY-MM-DD).
updatedobject- Filter by last update date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
updated.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
updated.gtestring · nullable- On or after this date (YYYY-MM-DD).
updated.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
updated.ltestring · nullable- On or before this date (YYYY-MM-DD).
closedobject- Filter by closed date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
closed.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
closed.gtestring · nullable- On or after this date (YYYY-MM-DD).
closed.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
closed.ltestring · nullable- On or before this date (YYYY-MM-DD).
orderenum · default desc- Sort direction. Defaults to "desc".
- desc | asc
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
reasonenum- State reason for closed issues. Maps to `reason:`.
- completed | not-planned | reopened
sortenum · default best-match- Sort field. Defaults to relevance ("best-match").
- best-match | created | updated | comments
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "issues": [ { "id": "string", "number": 0, "title": "string", "state": "string", "url": "string", "isPullRequest": true, "isDraft": true, "merged": true, "authorLogin": "string", "repository": "string", "repositoryUrl": "string", "commentsCount": 0, "labels": [ "string" ], "createdAt": "string", "updatedAt": "string", "closedAt": "string" } ], "after": "string" }}POST/github/search-pull-requests
Pull requests with state, draft and merged flags, labels and dates1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
ownersstring[]- Limit to these owners (users or orgs). Maps to `user:`.
reposstring[]- Limit to these "owner/name" repositories. Maps to `repo:`.
languagestring- Language of the containing repo. Maps to `language:`.
stateenum- Issue/PR state. Maps to `state:`.
- open | closed
authorstring- Opened by this user. Maps to `author:`.
assigneestring- Assigned to this user. Maps to `assignee:`.
mentionsstring- Mentioning this user. Maps to `mentions:`.
labelsstring[]- Require each of these labels. Maps to `label:`.
commentsobject- Filter by comment count. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
comments.gtnumber · nullable- Strictly greater than this value.
comments.gtenumber · nullable- Greater than or equal to this value.
comments.ltnumber · nullable- Strictly less than this value.
comments.ltenumber · nullable- Less than or equal to this value.
createdobject- Filter by creation date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
created.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
created.gtestring · nullable- On or after this date (YYYY-MM-DD).
created.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
created.ltestring · nullable- On or before this date (YYYY-MM-DD).
updatedobject- Filter by last update date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
updated.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
updated.gtestring · nullable- On or after this date (YYYY-MM-DD).
updated.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
updated.ltestring · nullable- On or before this date (YYYY-MM-DD).
closedobject- Filter by closed date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
closed.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
closed.gtestring · nullable- On or after this date (YYYY-MM-DD).
closed.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
closed.ltestring · nullable- On or before this date (YYYY-MM-DD).
orderenum · default desc- Sort direction. Defaults to "desc".
- desc | asc
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
draftboolean- Filter by draft state. Maps to `draft:`.
mergedobject- Filter by merge date (only merged PRs). Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
merged.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
merged.gtestring · nullable- On or after this date (YYYY-MM-DD).
merged.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
merged.ltestring · nullable- On or before this date (YYYY-MM-DD).
reviewenum- Review status. Maps to `review:`.
- none | required | approved | changes-requested
sortenum · default best-match- Sort field. Defaults to relevance ("best-match").
- best-match | created | updated | comments
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "issues": [ { "id": "string", "number": 0, "title": "string", "state": "string", "url": "string", "isPullRequest": true, "isDraft": true, "merged": true, "authorLogin": "string", "repository": "string", "repositoryUrl": "string", "commentsCount": 0, "labels": [ "string" ], "createdAt": "string", "updatedAt": "string", "closedAt": "string" } ], "after": "string" }}POST/github/search-discussions
Discussions with category, answered flag, comment count and dates1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
ownersstring[]- Limit to these owners (users or orgs). Maps to `user:`.
reposstring[]- Limit to these "owner/name" repositories. Maps to `repo:`.
authorstring- Opened by this user. Maps to `author:`.
commentsobject- Filter by comment count. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
comments.gtnumber · nullable- Strictly greater than this value.
comments.gtenumber · nullable- Greater than or equal to this value.
comments.ltnumber · nullable- Strictly less than this value.
comments.ltenumber · nullable- Less than or equal to this value.
createdobject- Filter by creation date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
created.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
created.gtestring · nullable- On or after this date (YYYY-MM-DD).
created.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
created.ltestring · nullable- On or before this date (YYYY-MM-DD).
updatedobject- Filter by last update date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
updated.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
updated.gtestring · nullable- On or after this date (YYYY-MM-DD).
updated.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
updated.ltestring · nullable- On or before this date (YYYY-MM-DD).
answeredboolean- Whether the discussion is answered. Maps to `is:answered`.
orderenum · default desc- Sort direction. Defaults to "desc".
- desc | asc
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "discussions": [ { "id": "string", "number": 0, "title": "string", "url": "string", "authorLogin": "string", "category": "string", "repository": "string", "repositoryUrl": "string", "commentsCount": 0, "isAnswered": true, "createdAt": "string", "updatedAt": "string" } ], "after": "string" }}Search people
Find users and organizations by location, language, follower count and name.
POST/github/search-users
Users and organizations with bio, location, followers and repository count1 credit per requestDocs →
Request body
querystring- Free-text search terms, matched against the default fields for this search type, e.g. "web framework".
typeenum- Restrict to users or organizations. Maps to `type:`.
- user | org
fullNamestring- Match a display name, e.g. "Grace Hopper". Maps to `fullname:`.
locationstring- Profile location, e.g. "San Francisco". Maps to `location:`.
languagestring- Users who code in this language. Maps to `language:`.
followersobject- Filter by follower count. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
followers.gtnumber · nullable- Strictly greater than this value.
followers.gtenumber · nullable- Greater than or equal to this value.
followers.ltnumber · nullable- Strictly less than this value.
followers.ltenumber · nullable- Less than or equal to this value.
reposobject- Filter by public repository count. Provide any of gt / gte / lt / lte; combine a lower and upper bound for a range.
repos.gtnumber · nullable- Strictly greater than this value.
repos.gtenumber · nullable- Greater than or equal to this value.
repos.ltnumber · nullable- Strictly less than this value.
repos.ltenumber · nullable- Less than or equal to this value.
createdobject- Filter by account creation date. Provide any of gt / gte / lt / lte as YYYY-MM-DD dates; combine a lower and upper bound for a range.
created.gtstring · nullable- Strictly after this date (YYYY-MM-DD).
created.gtestring · nullable- On or after this date (YYYY-MM-DD).
created.ltstring · nullable- Strictly before this date (YYYY-MM-DD).
created.ltestring · nullable- On or before this date (YYYY-MM-DD).
sortenum · default best-match- Sort field. Defaults to relevance ("best-match").
- best-match | followers | repositories | joined
orderenum · default desc- Sort direction. Defaults to "desc".
- desc | asc
countinteger · 1–10 · default 10- Number of results per page (1–10). Defaults to 10.
afterstring- Pagination cursor (the `after` value returned by a previous page). Omit for the first page.
Response
200 OK · application/json
{ "timeMs": 1840, "creditsCost": 1, "data": { "query": "string", "totalCount": 0, "users": [ { "id": "string", "type": "string", "username": "string", "name": "string", "bio": "string", "avatarUrl": "string", "url": "string", "location": "string", "followersCount": 0, "repositoriesCount": 0 } ], "after": "string" }}Why not the official GitHub API?
GitHub’s own REST and GraphQL APIs are good. If GitHub is the only source you need and its limits suit you, use them. Bridgly is worth it when GitHub is one of several platforms in your pipeline, or when you want the data without building the plumbing.
No tokens to rotate
GitHub’s API allows 60 unauthenticated requests an hour, and search allows 30 a minute even with a token. Bridgly needs no GitHub token at all.
Contributions without GraphQL
The contribution calendar is only available through GitHub’s GraphQL API. Here it is one POST with a username.
Filters as JSON
Send stars, dates, language and labels as typed fields instead of assembling a search query string by hand.
Your first GitHub call
Terminal
curl -X POST "https://api.bridgly.app/github/search-users" \ -H "Authorization: Bearer $BRIDGLY_KEY" \ -H "Content-Type: application/json" \ -d '{ "location": "Berlin", "language": "Rust", "type": "user", "sort": "followers", "count": 10}'With Bridgly connected to your AI agent, ask:
Find the 10 most-followed Rust developers in Berlin on GitHub and show what each of them has pinned.
What people build with GitHub data
Source engineers by what they have built
Search users by language and location, then read each candidate’s pinned repositories and the last year of contributions before anyone writes an outreach email.
Enrich developer signups
When someone signs up with a GitHub handle, pull their company, follower count and the languages of their pinned repositories to see who your product is actually reaching.
Watch an ecosystem
Search repositories by topic with a created-after date and a minimum star count to see which new projects in your space are gaining ground.
Find where your library is used
Search code for an import or a config key, limited to a filename like package.json, to find the public projects that depend on you.
What the GitHub API does not do
- Public data only. Private repositories and private contribution details are not returned.
- The contributions window is up to one year per call. Call it once per year for a longer history.
- Read-only. There are no endpoints to open issues, comment, star or push.
- File contents, releases and GitHub Actions runs are not covered yet.
GitHub API questions
GitHub already has an API. Why use this one?
GitHub’s API is good, and if GitHub is the only source you need, it may be all you want. Bridgly is useful when GitHub is one of several platforms in your pipeline and you want them behind one key, one response shape and one bill, or when you would rather send filters as JSON fields than build search query strings and manage tokens yourself.
Do I need a GitHub token?
No. Requests are authenticated with your Bridgly API key only.
Does it return private repositories or private contributions?
No. Results cover public data. The contributions response does include restrictedContributionsCount, which is the number of private contributions the user has chosen to show on their profile, without any detail about them.
Can I search code inside one repository or organization?
Yes. Every search endpoint accepts a list of owners and a list of owner/name repositories to restrict the search to.
How do range filters work?
Numeric and date filters take any of gt, gte, lt and lte. Send stars as {"gte": 100, "lte": 1000}, or created as {"gte": "2026-01-01"}.
What does a GitHub call cost?
One credit per request on every GitHub endpoint, including searches that return a full page of 10. What a credit costs in dollars depends on your pricing package, and goes as low as $1 per 1,000 credits at volume.
Your API key and credits work on every platform. See all platforms.
Common terms for GitHub API access
- GitHub API
- GitHub data API
- GitHub scraper API
- GitHub user API
- GitHub contributions API
- GitHub search API
- GitHub code search API
- GitHub repository API
- GitHub API without token
- Developer sourcing API
Start pulling GitHub data
100 free credits, no card. Your first call takes a minute.