GITHUB API

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

[ ENDPOINTS ]

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 API? ]

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.

[ HOW TO USE IT ]

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
}'
[ USE CASES ]

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.

[ LIMITS ]

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.
[ FAQ ]

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.

[ SAME KEY, OTHER PLATFORMS ]

Your API key and credits work on every platform. See all platforms.

[ ALSO SEARCHED ]

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.

Start free with 100 credits →