Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »


    octonode Gitter chat

    FOSSA Status

    octonode is a library for nodejs to access the github v3 api


    npm install octonode


    var github = require('octonode');
    // Then we instantiate a client with or without a token (as show in a later section)
    var ghme           =;
    var ghuser         = client.user('pksunkara');
    var ghrepo         = client.repo('pksunkara/hub');
    var ghorg          ='flatiron');
    var ghissue        = client.issue('pksunkara/hub', 37);
    var ghmilestone    = client.milestone('pksunkara/hub', 37);
    var ghlabel        = client.label('pksunkara/hub', 'todo');
    var ghpr           ='pksunkara/hub', 37);
    var ghrelease      = client.release('pksunkara/hub', 37);
    var ghgist         = client.gist();
    var ghteam         =;
    var ghproject      = client.project('pksunkara/hub', 37);
    var ghnotification = client.notification(37);
    var ghsearch =;

    Build a client which accesses any public information

    var client = github.client();
    client.get('/users/pksunkara', {}, function (err, status, body, headers) {
      console.log(body); //json object

    Build a client from an access token

    var client = github.client('someaccesstoken');
    client.get('/user', {}, function (err, status, body, headers) {
      console.log(body); //json object

    Build a client from credentials

    var client = github.client({
      username: 'pksunkara',
      password: 'password'
    client.get('/user', {}, function (err, status, body, headers) {
      console.log(body); //json object

    Build a client from client keys

    var client = github.client({
      id: 'abcdefghijklmno',
      secret: 'abcdefghijk'
    client.get('/user', {}, function (err, status, body, headers) {
      console.log(body); //json object

    Build a client from a different host

    You can configure the protocol, hostname and port to use. For example to connect to a GitHub Enterprise instance.

    var client = github.client({
      username: 'pksunkara',
      password: 'password'
      hostname: ''
    client.get('/user', {}, function (err, status, body, headers) {
      console.log(body); //json object

    Request Options

    Request options can be set by setting defaults on the client. (e.g. Proxies)

    var client = github.client();
    client.requestDefaults['proxy'] = ''

    These options are passed through to request, see their API here:


    You can set proxies dynamically by using the example above, but Octonode will respect environment proxies by default. Just set this using: export HTTP_PROXY='' if you are using the command line

    Many of the below use cases use parts of the above code

    Conditional requests

    The client supports conditional requests and helps you respecting rate limits by caching information that hasn't changed. You can add the If-None-Match header to each request calling the conditional method.

    var client = github.client();
    // This add If-None-Match header to the request

    More info about conditional requests can be founded here.


    Authenticate to github in cli mode (desktop application)

    Note: Ensure that the scopes argument is an object containing the required note property. For two-factor authentication add the One Time Password otp key with its corresponding code to the configuration object.

    var scopes = {
      'scopes': ['user', 'repo', 'gist'],
      'note': 'admin script'
      username: 'pksunkara',
      password: 'password'
    }).login(scopes, function (err, id, token, headers) {
      console.log(id, token);

    Revoke authentication to github in cli mode (desktop application)

      username: 'pksunkara',
      password: 'password'
    }).revoke(id, function (err) {
      if (err) throw err;

    Authenticate to github in web mode (web application)

    // Web application which authenticates to github
    var http = require('http')
      , url = require('url')
      , qs = require('querystring')
      , github = require('octonode');
    // Build the authorization config and url
    var auth_url = github.auth.config({
      id: 'mygithubclientid',
      secret: 'mygithubclientsecret',
      apiUrl: 'https://optional-internal-github-enterprise/api/v3',
      webUrl: 'https://optional-internal-github-enterprise'
    }).login(['user', 'repo', 'gist']);
    // Store info to verify against CSRF
    var state = auth_url.match(/&state=([0-9a-z]{32})/i);
    // Web server
    http.createServer(function (req, res) {
      uri = url.parse(req.url);
      // Redirect to github login
      if (uri.pathname=='/login') {
        res.writeHead(302, {'Content-Type': 'text/plain', 'Location': auth_url})
        res.end('Redirecting to ' + auth_url);
      // Callback url from github login
      else if (uri.pathname=='/auth') {
        var values = qs.parse(uri.query);
        // Check against CSRF attacks
        if (!state || state[1] != values.state) {
          res.writeHead(403, {'Content-Type': 'text/plain'});
        } else {
          github.auth.login(values.code, function (err, token, headers) {
            res.writeHead(200, {'Content-Type': 'text/plain'});
      } else {
        res.writeHead(200, {'Content-Type': 'text/plain'})
    console.log('Server started on 3000');

    Rate Limiting

    You can also check your rate limit status by calling the following.

    client.limit(function (err, left, max, reset) {
      console.log(left); // 4999
      console.log(max);  // 5000
      console.log(reset);  // 1372700873 (UTC epoch seconds)

    API Callback Structure

    All the callbacks for the following will take first an error argument, then a data argument, like this:, data, headers) {
      console.log("error: " + err);
      console.log("data: " + data);
      console.log("headers:" + headers);


    If a function is said to be supporting pagination, then that function can be used in many ways as shown below. Results from the function are arranged in pages.

    The page argument is optional and is used to specify which page of issues to retrieve. The perPage argument is also optional and is used to specify how many issues per page.

    // Normal usage of function
    ghrepo.issues(callback); //array of first 30 issues
    // Using pagination parameters
    ghrepo.issues(2, 100, callback); //array of second 100 issues
    ghrepo.issues(10, callback); //array of 30 issues from page 10
    // Pagination parameters can be set with query object too
      page: 2,
      per_page: 100,
      state: 'closed'
    }, callback); //array of second 100 issues which are closed

    Github authenticated user api

    Token/Credentials required for the following:

    Get information about the user (GET /user); //json

    Update user profile (PATCH /user)

      "name": "monalisa octocat",
      "email": "",
    }, callback);

    Get emails of the user (GET /user/emails)

    ghme.emails(callback); //array of emails

    Set emails of the user (POST /user/emails)

    ghme.emails(['', ''], callback); //array of emails
    ghme.emails('', callback); //array of emails

    Delete emails of the user (DELETE /user/emails)

    ghme.emails(['', '']);

    Get the followers of the user (GET /user/followers)

    ghme.followers(callback); //array of github users

    Get users whom the user is following (GET /user/following)

    This query supports pagination.

    ghme.following(callback); //array of github users

    Check if the user is following a user (GET /user/following/marak)

    ghme.following('marak', callback); //boolean

    Follow a user (PUT /user/following/marak)


    Unfollow a user (DELETE /user/following/marak)


    Get public keys of a user (GET /user/keys)

    ghme.keys(callback); //array of keys

    Get a single public key (GET /user/keys/1)

    ghme.keys(1, callback); //key

    Create a public key (POST /user/keys)

    ghme.keys({"title":"laptop", "key":"ssh-rsa AAA..."}, callback); //key

    Update a public key (PATCH /user/keys/1)

    ghme.keys(1, {"title":"desktop", "key":"ssh-rsa AAA..."}, callback); //key

    Delete a public key (DELETE /user/keys/1)


    Get the starred repos for the user (GET /user/starred)

    This query supports pagination.

    ghme.starred(callback); //array of repos

    Check if you have starred a repository (GET /user/starred/pksunkara/octonode)

    ghme.checkStarred('flatiron/flatiron', callback); //boolean

    Star a repository (PUT /user/starred/pksunkara/octonode)'flatiron/flatiron');

    Unstar a repository (DELETE /user/starred/pksunkara/octonode)


    Get the subscriptions of the user (GET /user/subscriptions)

    This query supports pagination.

    ghme.watched(callback); //array of repos

    List your public and private organizations (GET /user/orgs)

    This query supports pagination.

    ghme.orgs(callback); //array of orgs

    List your repositories (GET /user/repos)

    This query supports pagination.

    ghme.repos(callback); //array of repos

    Create a repository (POST /user/repos)

      "name": "Hello-World",
      "description": "This is your first repo",
    }, callback); //repo

    Fork a repository (POST /repos/pksunkara/hub/forks)

    ghme.fork('pksunkara/hub', callback); //forked repo

    List all issues across owned and member repositories (GET /user/issues)

    This query supports pagination.

      page: 2,
      per_page: 100,
      filter: 'assigned',
      state: 'open',
      sort: 'created'
    }, callback); //array of issues

    List user teams (GET /user/teams)

    This query supports pagination.

      page: 1,
      per_page: 50
    }, callback); //array of team memberships

    List notifications

    Options based on

    ghme.notifications({}, callback); //array of notifications

    Github users api

    No token required for the following

    Get information about a user (GET /users/pksunkara); //json

    Get user followers (GET /users/pksunkara/followers)

    This query supports pagination.

    ghuser.followers(callback); //array of github users

    Get user followings (GET /users/pksunkara/following)

    This query supports pagination.

    ghuser.following(callback); //array of github users

    Get user public repos (GET /users/pksunkara/repos)

    This query supports pagination.

    ghuser.repos(callback); //array of public github repos

    Get events performed by a user (GET /users/pksunkara/events)

    This query supports pagination.

    Optionally, supply an array of Event Types to filter by.['PushEvent'], callback); //array of PushEvent events

    Or leave it out to get all Event Types.; //array of events

    Get user public organizations (GET /users/pksunkara/orgs)

    This query supports pagination.

    ghuser.orgs(callback); //array of organizations

    Github repositories api

    Get information about a repository (GET /repos/pksunkara/hub); //json

    Edit a repository (PATCH /repos/pksunkara/hub)

      private: false
    }, callback); // repo

    Get the collaborators for a repository (GET /repos/pksunkara/hub/collaborators)

    ghrepo.collaborators(callback); //array of github users

    Check if a user is collaborator for a repository (GET /repos/pksunkara/hub/collaborators/marak)

    ghrepo.collaborators('marak', callback); //boolean

    Get the commits for a repository (GET /repos/pksunkara/hub/commits)

    ghrepo.commits(callback); //array of commits

    Get a certain commit for a repository (GET /repos/pksunkara/hub/commits/18293abcd72)

    ghrepo.commit('18293abcd72', callback); //commit

    Get a comparison between branches for a repository (GET /repos/pksunkara/hub/compare/master...develop)'master', 'develop', callback); //compare develop to master

    Get the tags for a repository (GET /repos/pksunkara/hub/tags)

    ghrepo.tags(callback); //array of tags

    Get the releases for a repository (GET /repos/pksunkara/hub/releases)

    ghrepo.releases(callback); //array of releases

    Get the languages for a repository (GET /repos/pksunkara/hub/languages)

    ghrepo.languages(callback); //array of languages

    Get the contributors for a repository (GET /repos/pksunkara/hub/contributors)

    ghrepo.contributors(callback); //array of github users

    Get the branches for a repository (GET /repos/pksunkara/hub/branches)

    This query supports pagination.

    ghrepo.branches(callback); //array of branches

    Get a branch for a repository (GET /repos/pksunkara/hub/branches/master)

    ghrepo.branch('master', callback); //branch

    Create a Reference (POST /repos/pksunkara/hub/git/refs)

    ghrepo.createReference('master', '18293abcd72', callback);

    Get the issues for a repository (GET /repos/pksunkara/hub/issues)

    This query supports pagination.

    ghrepo.issues(callback); //array of issues

    Create an issue for a repository (POST /repos/pksunkara/hub/issues)

      "title": "Found a bug",
      "body": "I'm having a problem with this.",
      "assignee": "octocat",
      "milestone": 1,
      "labels": ["Label1", "Label2"]
    }, callback); //issue

    Get the milestones for a repository (GET /repos/pksunkara/hub/milestones)

    This query supports pagination.

    ghrepo.milestones(callback); //array of milestones

    Create a milestone for a repository (POST /repos/pksunkara/hub/milestones)

      "title": "Sprint 345",
      "description": "The sprint where we fix all the things!",
      "due_on": new Date(2014, 7, 1)
    }, callback); //milestone

    Get the projects for a repository (GET /repos/pksunkara/hub/projects)

    This query supports pagination.

    ghrepo.projects(callback); //array of projects

    Create a project for a repository (POST /repos/pksunkara/hub/projects)

      "name": "Sprint 345",
      "body": "The sprint where we fix all the things!"
    }, callback); //project

    Get the labels for a repository (GET /repos/pksunkara/hub/labels)

    This query supports pagination.

    ghrepo.labels(callback); //array of labels

    Create a label for a repository (POST /repos/pksunkara/hub/labels)

      "name": "Priority",
      "color": "ff0000",
    }, callback); //label

    Get the pull requests for a repository (GET /repos/pksunkara/hub/pulls)

    This query supports pagination.

    ghrepo.prs(callback); //array of pull requests

    Create a pull request (POST /repos/pksunkara/hub/pulls){
      "title": "Amazing new feature",
      "body": "Please pull this in!",
      "head": "octocat:new-feature",
      "base": "master"
    }, callback); //pull request

    Get the hooks for a repository (GET /repos/pksunkara/hub/hooks)

    This query supports pagination.

    ghrepo.hooks(callback); //array of hooks

    Create a hook (POST /repos/pksunkara/hub/hooks)

      "name": "web",
      "active": true,
      "events": ["push", "pull_request"],
      "config": {
        "url": ""
    }, callback); // hook

    Delete a hook (DELETE /repos/pksunkara/hub/hooks/37)

    ghrepo.deleteHook(37, callback);

    Get the README for a repository (GET /repos/pksunkara/hub/readme)

    ghrepo.readme(callback); //file
    ghrepo.readme('v0.1.0', callback); //file

    Get the root contents on a branch called "myBranch"

    ghrepo.contents('', "myBranch", callback);

    Get the contents of a path in repository

    ghrepo.contents('lib/index.js', callback); //path
    ghrepo.contents('lib/index.js', 'v0.1.0', callback); //path

    Create a file at a path in repository

    ghrepo.createContents('lib/index.js', 'commit message', 'content', callback); //path
    ghrepo.createContents('lib/index.js', 'commit message', 'content', 'v0.1.0', callback); //path

    Update a file at a path in repository

    ghrepo.updateContents('lib/index.js', 'commit message', 'content', 'put-sha-here', callback); //path
    ghrepo.updateContents('lib/index.js', 'commit message', 'content', 'put-sha-here', 'master', callback); //path
    ghrepo.updateContents('lib/index.js', 'commit message', 'content', 'put-sha-here', 'v0.1.0', callback); //path

    Delete a file at a path in repository

    ghrepo.deleteContents('lib/index.js', 'commit message', 'put-sha-here', callback); //path
    ghrepo.deleteContents('lib/index.js', 'commit message', 'put-sha-here', 'v0.1.0', callback); //path

    Get archive link for a repository

    ghrepo.archive('tarball', callback); //link to archive
    ghrepo.archive('zipball', 'v0.1.0', callback); //link to archive

    Get the blob for a repository (GET /repos/pksunkara/hub/git/blobs/SHA)

    ghrepo.blob('18293abcd72', callback); //blob

    Get users who starred a repository (GET /repos/pksunkara/hub/stargazers)

    ghrepo.stargazers(1, 100, callback); //array of users
    ghrepo.stargazers(10, callback);     //array of users
    ghrepo.stargazers(callback);         //array of users

    Get the teams for a repository (GET /repos/pksunkara/hub/teams)

    ghrepo.teams(callback); //array of teams

    Get a git tree (GET /repos/pksunkara/hub/git/trees/18293abcd72)

    ghrepo.tree('18293abcd72', callback); //tree
    ghrepo.tree('18293abcd72', true, callback); //recursive tree

    Delete the repository (DELETE /repos/pksunkara/hub)


    List statuses for a specific ref (GET /repos/pksunkara/hub/statuses/master)

    ghrepo.statuses('master', callback); //array of statuses

    List the combined status for a specific ref (GET /repos/pksunkara/hub/commits/master/status)

    ghrepo.combinedStatus('master', callback); //array of statuses

    Create status (POST /repos/pksunkara/hub/statuses/SHA)

    ghrepo.status('18e129c213848c7f239b93fe5c67971a64f183ff', {
      "state": "success",
      "target_url": "",
      "description": "Build success."
    }, callback); // created status

    GitHub notifications api

    Mark a thread as read


    Subscribe to a thread


    Unsubscribe from a thread


    Mute a thread


    Github organizations api

    Get information about an organization (GET /orgs/flatiron); //json

    Update an organization (POST /orgs/flatiron)

      blog: ''
    }, callback); // org

    List organization repositories (GET /orgs/flatiron/repos)

    This query supports pagination.

    ghorg.repos(callback); //array of repos

    Create an organization repository (POST /orgs/flatiron/repos)

      name: 'Hello-world',
      description: 'My first world program'
    }, callback); //repo

    Get an organization's teams (GET /orgs/flatiron/teams)

    This query supports pagination.

    ghorg.teams(callback); //array of teams

    Get an organization's members (GET /orgs/flatiron/members)

    This query supports pagination.

    ghorg.members(callback); //array of github users

    Check an organization member (GET /orgs/flatiron/members/pksunkara)

    ghorg.member('pksunkara', callback); //boolean

    Check a member's public membership in an org (GET /orgs/flatiron/public_members/pksunkara)

    ghorg.publicMember('pksunkara', callback); //boolean

    Publicize a user’s membership (PUT /orgs/flatiron/public_members/pksunkara)

    ghorg.publicizeMembership('pksunkara', callback);

    Conceal a user’s membership (DELETE /orgs/flatiron/public_members/pksunkara)

    ghorg.concealMembership('pksunkara', callback);

    Check a member's membership status (GET /orgs/flatiron/memberships/pksunkara)

    ghorg.membership('pksunkara', callback); //membership status object indicating state, role, etc.

    Create an organization team (POST /orgs/flatiron/teams)

      "name": "new team name",
      "permission": "push",
      "repo_names": [
    }, callback);

    Get the hooks for a Organization (GET /orgs/flatiron/hooks)

    This query supports pagination.

    ghorg.hooks(callback); //array of hooks

    Create a hook (POST /orgs/flatiron/hooks)

      "name": "web",
      "active": true,
      "events": ["push", "pull_request"],
      "config": {
        "url": ""
    }, callback); // hook

    Delete a hook (DELETE /orgs/flatiron/hooks/37)

    ghorg.deleteHook(37, callback);

    Github issues api

    Get a single issue (GET /repos/pksunkara/hub/issues/37); //issue

    Edit an issue for a repository (PATCH /repos/pksunkara/hub/issues/37)

      "title": "Found a bug and I am serious",
    }, callback); //issue

    List comments on an issue (GET /repos/pksunkara/hub/issues/37/comments)

    This query supports pagination.

    ghissue.comments(callback); //array of comments

    Create a comment (POST /repos/pksunkara/hub/issues/37/comments)

      body: 'Me too.'
    }, callback);

    Edit a comment (PATCH /repos/pksunkara/hub/issues/comments/3)

    ghissue.updateComment(3, {
      body: 'The updated body of the comment.'
    }, callback);

    Delete a comment (DELETE /repos/pksunkara/hub/issues/comments/3)

    ghissue.deleteComment(3, callback);

    List labels on an issue (GET /repos/pksunkara/hub/issues/37/labels)


    Add label(s) (POST /repos/pksunkara/hub/issues/37/labels)

    ghissue.addLabels(['label-name'], callback);

    Replace all labels (PUT /repos/pksunkara/hub/issues/37/labels)

    ghissue.replaceAllLabels(['label-name'], callback);

    Remove a single label (DELETE /repos/pksunkara/hub/issues/37/labels/label-name)

    ghissue.removeLabel('label-name', callback);

    Remove all labels (DELETE /repos/pksunkara/hub/issues/37/labels)


    Github milestones api

    Get a single milestone (GET /repos/pksunkara/hub/milestones/37); //milestone

    Edit a milestone for a repository (PATCH /repos/pksunkara/hub/milestones/37)

      "title": "Updated milestone title",
    }, callback); //milestone

    Delete a milestone for a repository (DELETE /repos/pksunkara/hub/milestones/37)

    ghmilestone.delete(callback); //milestone

    Github projects api

    Get a single project (GET /repos/pksunkara/hub/projects/37); //project

    Edit a project for a repository (PATCH /repos/pksunkara/hub/projects/37)

      "name": "Updated project name",
    }, callback); //project

    Delete a project for a repository (DELETE /repos/pksunkara/hub/projects/37)

    ghproject.delete(callback); //project

    Github labels api

    Get a single label (GET /repos/pksunkara/hub/labels/todo); //label

    Edit a label for a repository (PATCH /repos/pksunkara/hub/labels/todo)

      "color": "000000",
    }, callback); //label

    Delete a label for a repository (PATCH /repos/pksunkara/hub/labels/todo)

    ghlabel.delete(callback); //label

    Github Merge API

    Merge a branch (POST /repose/pksunkara/hub/merges)

    ghrepo.merge({ base: baseBranch, head: destinationBranch }, callback);

    Github pull requests api

    Get a single pull request (GET /repos/pksunkara/hub/pulls/37); //pull request

    Update a pull request (PATCH /repos/pksunkara/hub/pulls/37)

      'title': 'Wow this pr'
    }, callback); //pull request

    Close a pull request

    ghpr.close(callback); //pull request

    Get if a pull request has been merged (GET /repos/pksunkara/hub/pulls/37/merge)

    ghpr.merged(callback); //boolean

    List commits on a pull request (GET /repos/pksunkara/hub/pulls/37/commits)

    ghpr.commits(callback); //array of commits

    List comments on a pull request (GET /repos/pksunkara/hub/pulls/37/comments)

    ghpr.comments(callback); //array of comments

    Add a comment on a pull request (POST /repos/pksunkara/hub/pulls/37/comments)

      body: 'my comment',
      commit_id: '8cde3b6c5be2c3067cd87ee4117c0f65e30f3e1f', // needed to comment on current time in PR
      path: 'file.txt', // optional
      position: 4 // optional
    }, callback);

    Remove a comment on a pull request (DELETE /repos/pksunkara/hub/pulls/37/comments/104)

    ghpr.removecomment(104, callback);

    List files in pull request (GET /repos/pksunkara/hub/pulls/37/files)

    ghpr.files(callback); //array of files

    List pull request reviews (GET /repos/pksunkara/hub/pulls/37/reviews); //array of pull request reviews

    Get a single pull request review (GET /repos/pksunkara/hub/pulls/37/reviews/104), callback); //pull request review

    Delete a pending pull request review (DELETE /repos/pksunkara/hub/pulls/37/reviews/104)

    ghpr.removeReview(104, callback); //pull request review

    List comments for a pull request review (GET /repos/pksunkara/hub/pulls/37/reviews/104/comments)

    ghpr.reviewComments(104, callback); //array of review comments

    Create a pull request review (POST /repos/pksunkara/hub/pulls/37/reviews)

      body: 'review message', // optional
      comments: [ // optional
          body: 'comment message', // required for each optional comment
          path: 'file.txt', // required for each optional comment
          position: 4 // required for each optional comment
      event: 'APPROVE || COMMENT || REQUEST_CHANGES' // optional
    }, callback); //pull request review

    Submit a pull request review (POST /repos/pksunkara/hub/pulls/37/reviews/104/events)

    ghpr.submitReview(104, {
      body: 'review message', // optional
      event: 'APPROVE || COMMENT || REQUEST_CHANGES' // required
    }, callback); //pull request review

    Dismiss a pull request review (PUT /repos/pksunkara/hub/pulls/37/reviews/104/dismissals)

    ghpr.dismissReview(104, 'dismissal message', callback); //pull request review

    List review requests (GET /repos/pksunkara/hub/pulls/37/requested_reviewers)

    ghpr.reviewRequests(callback); //array of review requests

    Create review request(s) (POST /repos/pksunkara/hub/pulls/37/requested_reviewers)

    ghpr.createReviewRequests(['user1', 'user2'], callback); //pull request

    Delete review request(s) (DELETE /repos/pksunkara/hub/pulls/37/requested_reviewers)

    ghpr.removeReviewRequests(['user1', 'user2'], callback); //pull request

    Github releases api

    Create release (POST /repos/pksunkara/releases)

      tag_name: 'v1.0.0',
      draft: true
    }, callback);

    Upload assets in a release (POST /

    var archive = fs.readFileSync(__dirname, '');
    // Will upload a file with the default options
      name: '',
      contentType: 'application/zip',
      uploadHost: ''
    ghrelease.uploadAssets(archive, callback);
    // Will upload a file with your custom options
    var image = fs.readFileSync(__dirname, 'octonode.png');
    var options = {
      name: 'octonode.png',
      contentType: 'image/png',
      uploadHost: ''
    ghrelease.uplaodAssets(image, options, callback)

    Github gists api

    List authenticated user's gists (GET /gists)

    This query supports pagination.

    ghgist.list(callback); //array of gists

    List authenticated user's public gists (GET /gists/public)

    This query supports pagination.

    ghgist.public(callback); //array of gists

    List authenticated user's starred gists (GET /gists/starred)

    This query supports pagination.

    ghgist.starred(callback); //array of gists

    List a user's public gists (GET /users/pksunkara/gists)

    This query supports pagination.

    ghgist.user('pksunkara', callback); //array of gists

    Get a single gist (GET /gists/37)

    ghgist.get(37, callback); //gist

    Create a gist (POST /gists)

      description: "the description",
      files: { ... }
    }), callback); //gist

    Edit a gist (PATCH /gists/37)

    ghgist.edit(37, {
      description: "hello gist"
    }, callback); //gist

    Delete a gist (DELETE /gists/37)


    Fork a gist (POST /gists/37/forks)

    ghgist.fork(37, callback); //gist

    Star a gist (PUT /gists/37/star);

    Unstar a gist (DELETE /gists/37/unstar)


    Check if a gist is starred (GET /gists/37/star)

    ghgist.check(37); //boolean

    List comments on a gist (GET /gists/37/comments)

    ghgist.comments(37, callback); //array of comments

    Create a comment (POST /gists/37/comments)

    ghgist.comments(37, {
      body: "Just commenting"
    }, callback); //comment

    Get a single comment (GET /gists/comments/1)

    ghgist.comment(1, callback); //comment

    Edit a comment (POST /gists/comments/1)

    ghgist.comment(1, {
      body: "lol at commenting"
    }, callback); //comment

    Delete a comment (DELETE /gists/comments/1)


    Github teams api

    Get a team (GET /team/37); //json

    Get the team members (GET /team/37/members)

    ghteam.members(callback); //array of github users

    Check if a user is part of the team (GET /team/37/members/pksunkara)

    ghteam.member('pksunkara', callback); //boolean

    Add a user to a team (PUT /team/37/members/pksunkara)

    ghteam.addUser("pksunkara", callback); //boolean

    Remove a user from a team (DELETE /team/37/members/pksunkara)

    ghteam.removeUser("pksunkara", callback); //boolean

    Get team membership (GET /teams/37/memberships/pksunkara)

    ghteam.membership("pksunkara", callback); //boolean

    Add team membership (PUT /teams/37/memberships/pksunkara)

    ghteam.addMembership("pksunkara", callback); //boolean

    Remove team membership (DELETE /team/37/memberships/pksunkara)

    ghteam.removeMembership("pksunkara", callback); //boolean

    List all repos of a team (GET /team/37/repos)

    ghteam.repos(callback); //array of repos

    Remove a repo from a team (DELETE /team/37/repos/flatiron/hub)

    ghteam.removeRepo("flatiron/hub", callback);

    Delete a team (DELETE /team/37)


    Github search api

    Search issues

      q: 'windows+state:open+repo:pksunkara/hub',
      sort: 'created',
      order: 'asc'
    }, callback); //array of search results

    Search repositories

      q: 'hub+language:go',
      sort: 'created',
      order: 'asc'
    }, callback); //array of search results

    Search users

      q: 'tom+followers:>100',
      sort: 'created',
      order: 'asc'
    }, callback); //array of search results

    Search code

      q: 'auth+in:file+repo:pksunkara/hub',
      sort: 'created',
      order: 'asc'
    }, callback); //array of search results

    Get all Organizations / Users

    This query supports pagination.

    Note: For listing all Organizations / Users pagination is powered exclusively by the since parameter ( Github APIs ) . since denotes the login ID of last org / user you encountered. Also, note that it's important to pass true as third param when using pagination.


      var client = github.client();
      client.get('/organizations', callback);
      // OR
      client.get('/organizations', since, per_page, true, callback);


      var client = github.client();
      client.get('/users', callback);
      // OR
      client.get('/users', since, per_page, true, callback);


    Before run test copy the config.example.json file in test folder to config.json and populate it with your github information.

    Is suggested to fork repo and run test on your copy.

    npm test

    If you like this project, please watch this and follow me.


    Here is a list of Contributors


    The following method names use underscore as an example. The library contains camel cased method names.

    // public repos for unauthenticated, private and public for authenticated
    me.is_watching('repo', callback);
    me.start_watching('repo', callback);
    me.stop_watching('repo', callback);
    // organization data
    var org = octonode.Organization('bulletjs');
    org.update(dict_with_update_properties, callback);
    org.is_public_member('user', callback);
    org.make_member_public('user', callback);
    org.conceal_member('user', callback);
    org.get_team('team', callback);
    org.create_team({name:'', repo_names:'', permission:''}, callback);
    org.edit_team({name:'', permission:''}, callback);
    org.delete_team('name', callback);
    org.get_team_members('team', callback);
    org.get_team_member('team', 'user', callback);
    org.remove_member_from_team('user', 'team', callback);
    org.create_repository({name: ''}, callback);
    org.get_team_repositories('team', callback);
    org.get_team_repository('team', 'name', callback);
    org.add_team_repository('team', 'name', callback);
    org.remove_team_repository('team', 'name', callback);
    var repo = octonode.Repository('pksunkara/octonode');
    repo.update({name: ''}, callback);
    // collaborator information
    repo.add_collaborator('name', callback);
    repo.remove_collaborator('name', callback);
    // commit data
    repo.get_commit('sha-id', callback);
    repo.get_commit_comments('SHA ID', callback);
    repo.comment_on_commit({body: '', commit_id: '', line: '', path: '', position: ''}, callback);
    repo.get_single_comment('comment id', callback);
    repo.edit_single_comment('comment id', callback);
    repo.delete_single_comment('comment id', callback);
    // downloads
    repo.create_download({name: ''}, 'filepath', callback);
    // keys
    repo.get_deploy_key('id', callback);
    repo.create_deploy_key({title: '', key: ''}, callback);
    repo.edit_deploy_key({title: '', key: ''}, callback);
    repo.delete_deploy_key('id', callback);
    // watcher data
    // pull requests
    repo.get_pull_request_comment('id', callback);
    repo.reply_to_pull_request_comment('id', 'body', callback);
    repo.edit_pull_request_comment('id', 'body', callback);
    repo.get_issues(params, callback);
    repo.get_issue('id', callback);
    repo.create_issue({title: ''}, callback);
    repo.edit_issue({title: ''}, callback);
    repo.get_issue_comments('issue', callback);
    repo.get_issue_comment('id', callback);
    repo.create_issue_comment('id', 'comment', callback);
    repo.edit_issue_comment('id', 'comment', callback);
    repo.delete_issue_comment('id', callback);
    repo.get_issue_events('id', callback);
    repo.get_event('id', callback);
    repo.get_label('id', callback);
    repo.create_label('name', 'color', callback);
    repo.edit_label('name', 'color', callback);
    repo.delete_label('id', callback);
    repo.get_labels_for_milestone_issues('milestone', callback);
    repo.get_milestone('id', callback);
    repo.create_milestone('title', callback);
    repo.edit_milestone('title', callback);
    repo.delete_milestone('id', callback);
    // raw git access
    repo.create_blob('content', 'encoding', callback);
    repo.get_commit('sha-id', callback);
    repo.create_commit('message', 'tree', [parents], callback);
    repo.get_reference('ref', callback);
    repo.update_reference('ref', 'sha', force, callback);

    I accept pull requests and guarantee a reply back within a day



    FOSSA Status

    Bug Reports

    Report here. Guaranteed reply within a day.


    Pavan Kumar Sunkara (

    Follow me on github, twitter


    npm i octonode

    Downloadslast 7 days







    last publish


    • avatar