{"id":48908317,"url":"https://github.com/eljijuna/api-hooks","last_synced_at":"2026-06-07T19:01:07.593Z","repository":{"id":351366024,"uuid":"1210671549","full_name":"ElJijuna/api-hooks","owner":"ElJijuna","description":"A collection of React hooks for popular APIs (npm, GitHub, Bundlephobia) built on TanStack Query. Provides typed, reusable hooks for data fetching, caching, and async state management with a simple and consistent API.","archived":false,"fork":false,"pushed_at":"2026-06-02T22:26:02.000Z","size":3085,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T00:15:10.008Z","etag":null,"topics":["bundlephobia","github","npm","osv","react-query"],"latest_commit_sha":null,"homepage":"https://eljijuna.github.io/api-hooks/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ElJijuna.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-14T16:37:24.000Z","updated_at":"2026-06-02T22:26:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ElJijuna/api-hooks","commit_stats":null,"previous_names":["eljijuna/api-hooks"],"tags_count":84,"template":false,"template_full_name":null,"purl":"pkg:github/ElJijuna/api-hooks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElJijuna%2Fapi-hooks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElJijuna%2Fapi-hooks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElJijuna%2Fapi-hooks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElJijuna%2Fapi-hooks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ElJijuna","download_url":"https://codeload.github.com/ElJijuna/api-hooks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElJijuna%2Fapi-hooks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34034028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bundlephobia","github","npm","osv","react-query"],"created_at":"2026-04-16T22:01:11.650Z","updated_at":"2026-06-07T19:01:07.586Z","avatar_url":"https://github.com/ElJijuna.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# api-hooks\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/ElJijuna/api-hooks/main/public/assets/api-hooks.png\" alt=\"api-hooks logo\" width=\"240\" /\u003e\n\u003c/p\u003e\n\nA collection of React hooks for popular APIs, built on [`@tanstack/react-query`](https://tanstack.com/query).\n\n[![CI](https://github.com/ElJijuna/api-hooks/actions/workflows/ci.yml/badge.svg)](https://github.com/ElJijuna/api-hooks/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue?logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n\n## Packages\n\n### [`@api-hooks/npm`](packages/npm#readme)\n\nReact hooks for the [npm registry API](https://github.com/npm/registry/blob/main/docs/REGISTRY-API.md).\n\n[![npm](https://img.shields.io/npm/v/@api-hooks/npm)](https://www.npmjs.com/package/@api-hooks/npm)\n[![npm downloads](https://img.shields.io/npm/dm/@api-hooks/npm)](https://www.npmjs.com/package/@api-hooks/npm)\n\n| Hook | Returns |\n| ---- | ------- |\n| `useNpmPackage(name)` | `NpmPackument` |\n| `useNpmPackageVersion(name, version)` | `NpmPackageVersion` |\n| `useNpmPackageLatest(name)` | `NpmPackageVersion` |\n| `useNpmPackageVersions(name)` | `NpmPackageVersion[]` |\n| `useNpmPackageDistTags(name)` | `NpmDistTags` |\n| `useNpmPackageMaintainers(name)` | `NpmPerson[]` |\n| `useNpmPackageDownloads(name, options?)` | `NpmDownloadPoint` |\n| `useNpmPackageDownloadRange(name, options?)` | `NpmDownloadRange` |\n| `useNpmMaintainer(username)` | `NpmUser` |\n| `useNpmMaintainerPackages(username, options?)` | `NpmSearchResult` |\n| `useNpmMaintainerPackagesInfinite(username, options?)` | `InfiniteData\u003cNpmSearchResult\u003e` |\n| `useNpmSearch(text, options?)` | `NpmSearchResult` |\n| `useNpmSearchInfinite(text, options?)` | `InfiniteData\u003cNpmSearchResult\u003e` |\n| `useNpmUser(username)` | `NpmAuthenticatedUser` |\n| `useNpmUserPackages(username, params?)` | `NpmUserPackages` |\n\n---\n\n### [`@api-hooks/gh`](packages/gh#readme)\n\nReact hooks for the [GitHub REST API](https://docs.github.com/en/rest).\n\n[![npm](https://img.shields.io/npm/v/@api-hooks/gh)](https://www.npmjs.com/package/@api-hooks/gh)\n[![npm downloads](https://img.shields.io/npm/dm/@api-hooks/gh)](https://www.npmjs.com/package/@api-hooks/gh)\n\n| Hook | Returns |\n| ---- | ------- |\n| `useGhUser(login)` | `GitHubUser` |\n| `useGhUserRepos(login, params?)` | `GitHubPagedResponse\u003cGitHubRepository\u003e` |\n| `useGhCurrentUser()` | `GitHubUser` |\n| `useGhUserFollowers(login, params?)` | `GitHubPagedResponse\u003cGitHubUser\u003e` |\n| `useGhUserFollowing(login, params?)` | `GitHubPagedResponse\u003cGitHubUser\u003e` |\n| `useGhUserPublicEvents(login, params?)` | `GitHubPagedResponse\u003cGitHubEvent\u003e` |\n| `useGhUserOrganizations(login, params?)` | `GitHubPagedResponse\u003cGitHubOrganization\u003e` |\n| `useGhUserContributionMap(login, params?)` | `ContributionCalendar` |\n| `useGhRepo(owner, name)` | `GitHubRepository` |\n| `useGhRepoCommits(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubCommit\u003e` |\n| `useGhRepoBranches(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubBranch\u003e` |\n| `useGhRepoBranch(owner, name, branch)` | `GitHubBranch` |\n| `useGhRepoTags(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubTag\u003e` |\n| `useGhRepoReleases(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubRelease\u003e` |\n| `useGhRepoLatestRelease(owner, name)` | `GitHubRelease` |\n| `useGhRepoForks(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubRepository\u003e` |\n| `useGhRepoContents(owner, name, path?, params?)` | `GitHubContent \\| GitHubContent[]` |\n| `useGhRepoRaw(owner, name, path, params?)` | `string` |\n| `useGhRepoMultipleRaw(owner, name, paths, params?)` | `Record\u003cstring, string\u003e` |\n| `useGhRepoTopics(owner, name)` | `string[]` |\n| `useGhRepoContributors(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubUser\u003e` |\n| `useGhRepoIssues(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubIssue\u003e` |\n| `useGhRepoPullRequests(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubPullRequest\u003e` |\n| `useGhRepoWebhooks(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubWebhook\u003e` |\n| `useGhRepoAdvisories(owner, name, params?)` | `GitHubPagedResponse\u003cGitHubRepositoryAdvisory\u003e` |\n| `useGhRepoAdvisory(owner, name, ghsaId)` | `GitHubRepositoryAdvisory` |\n| `useGhCreateFork(owner, name)` | `GitHubRepository` |\n| `useGhCreateIssue(owner, name)` | `GitHubIssue` |\n| `useGhIssue(owner, name, number)` | `GitHubIssue` |\n| `useGhIssueComments(owner, name, number, params?)` | `GitHubPagedResponse\u003cGitHubIssueComment\u003e` |\n| `useGhPullRequest(owner, name, number)` | `GitHubPullRequest` |\n| `useGhPullRequestCommits(owner, name, number, params?)` | `GitHubPagedResponse\u003cGitHubCommit\u003e` |\n| `useGhPullRequestFiles(owner, name, number, params?)` | `GitHubPagedResponse\u003cGitHubPullRequestFile\u003e` |\n| `useGhPullRequestReviews(owner, name, number, params?)` | `GitHubPagedResponse\u003cGitHubReview\u003e` |\n| `useGhPullRequestReviewComments(owner, name, number, params?)` | `GitHubPagedResponse\u003cGitHubReviewComment\u003e` |\n| `useGhPullRequestIsMerged(owner, name, number)` | `boolean` |\n| `useGhMergePullRequest(owner, name, number)` | `MergeResult` |\n| `useGhCreatePullRequestReview(owner, name, number)` | `GitHubReview` |\n| `useGhRequestReviewers(owner, name, number)` | `GitHubPullRequest` |\n| `useGhUpdatePullRequest(owner, name, number)` | `GitHubPullRequest` |\n| `useGhAddPullRequestComment(owner, name, number)` | `GitHubReviewComment` |\n| `useGhCommit(owner, name, ref)` | `GitHubCommit` |\n| `useGhCommitStatuses(owner, name, ref, params?)` | `GitHubPagedResponse\u003cGitHubCommitStatus\u003e` |\n| `useGhCommitCombinedStatus(owner, name, ref)` | `GitHubCombinedStatus` |\n| `useGhCommitCheckRuns(owner, name, ref, params?)` | `GitHubPagedResponse\u003cGitHubCheckRun\u003e` |\n| `useGhCommitComments(owner, name, ref, params?)` | `GitHubPagedResponse\u003cGitHubCommitComment\u003e` |\n| `useGhCreateCommitStatus(owner, name, ref)` | `GitHubCommitStatus` |\n| `useGhAddCommitComment(owner, name, ref)` | `GitHubCommitComment` |\n| `useGhOrg(name)` | `GitHubOrganization` |\n| `useGhOrgRepos(name, params?)` | `GitHubPagedResponse\u003cGitHubRepository\u003e` |\n| `useGhOrgMembers(name, params?)` | `GitHubPagedResponse\u003cGitHubUser\u003e` |\n| `useGhSearchRepos(q, params?)` | `GitHubPagedResponse\u003cGitHubRepository\u003e` |\n| `useGhAdvisories(params?)` | `GitHubPagedResponse\u003cGitHubAdvisory\u003e` |\n| `useGhAdvisory(ghsaId)` | `GitHubAdvisory` |\n| `useGhAdvisoryByCve(cveId)` | `GitHubAdvisory \\| null` |\n| `useGhGist(gistId, options?)` | `GitHubGist` |\n| `useGhGists(params?, options?)` | `GitHubPagedResponse\u003cGitHubGist\u003e` |\n| `useGhGistsInfinite(params?, options?)` | `InfiniteData\u003cGitHubPagedResponse\u003cGitHubGist\u003e\u003e` |\n| `useGhGistCommits(gistId, params?)` | `GitHubPagedResponse\u003cGistCommit\u003e` |\n| `useGhGistForks(gistId, params?)` | `GitHubPagedResponse\u003cGistFork\u003e` |\n| `useGhGistComments(gistId, params?)` | `GitHubPagedResponse\u003cGistComment\u003e` |\n| `useGhGistIsStarred(gistId)` | `boolean` |\n| `useGhCreateGist()` | `GitHubGist` |\n| `useGhUpdateGist(gistId)` | `GitHubGist` |\n| `useGhDeleteGist(gistId)` | `void` |\n| `useGhForkGist(gistId)` | `GitHubGist` |\n| `useGhStarGist(gistId)` | `void` |\n| `useGhUnstarGist(gistId)` | `void` |\n| `useGhAddGistComment(gistId)` | `GistComment` |\n| `useGhUpdateGistComment(gistId)` | `GistComment` |\n| `useGhDeleteGistComment(gistId)` | `void` |\n\n---\n\n### [`@api-hooks/bp`](packages/bp#readme)\n\nReact hooks for the [Bundlephobia API](https://bundlephobia.com).\n\n[![npm](https://img.shields.io/npm/v/@api-hooks/bp)](https://www.npmjs.com/package/@api-hooks/bp)\n[![npm downloads](https://img.shields.io/npm/dm/@api-hooks/bp)](https://www.npmjs.com/package/@api-hooks/bp)\n\n| Hook | Returns |\n| ---- | ------- |\n| `useBpPackageSize(name, options?)` | `BundleSize` |\n| `useBpPackageVersionSize(name, version, options?)` | `BundleSize` |\n| `useBpPackageHistory(name, options?)` | `PackageHistory` |\n| `useBpPackageSimilar(name, options?)` | `SimilarPackages` |\n\n---\n\n### [`@api-hooks/osv`](packages/osv#readme)\n\nReact hooks for the [OSV (Open Source Vulnerabilities) API](https://osv.dev).\n\n[![npm](https://img.shields.io/npm/v/@api-hooks/osv)](https://www.npmjs.com/package/@api-hooks/osv)\n[![npm downloads](https://img.shields.io/npm/dm/@api-hooks/osv)](https://www.npmjs.com/package/@api-hooks/osv)\n\n| Hook | Returns |\n| ---- | ------- |\n| `useOsvVuln(id, options?)` | `OsvVulnerability` |\n| `useOsvQuery(params, options?)` | `OsvQueryResult` |\n| `useOsvQueryBatch(queries, options?)` | `OsvBatchQueryResult` |\n\n---\n\n## Requirements\n\nAll packages require the following peer dependencies:\n\n| Peer dependency | Version |\n| --------------- | ------- |\n| `react` | `\u003e=19.0.0` |\n| `@tanstack/react-query` | `^5.0.0` |\n\n## License\n\nMIT © [ElJijuna](https://github.com/ElJijuna)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feljijuna%2Fapi-hooks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feljijuna%2Fapi-hooks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feljijuna%2Fapi-hooks/lists"}