Skip to content


Subversion checkout URL

You can clone with
Download ZIP
:video_camera: A Node.JS module, which provides an object oriented wrapper for the YouTube v3 API.
Latest commit 42f7c17 @IonicaBizau Rebuild docs
Failed to load latest commit information.
example removed lines and require
lib Fix typos and remove JWT from code.
.gitignore Fix typos and remove JWT from code. :memo:
LICENSE Updated the year Rebuild docs
package.json Rebuild docs

youtube-api Support this project

A Node.JS module, which provides an object oriented wrapper for the Youtube v3 API.


$ npm i youtube-api


 * This script uploads a video (specifically `video.mp4` from the current
 * directory) to YouTube,
 * To run this script you have to create OAuth2 credentials and download them
 * as JSON and replace the `credentials.json` file. Then install the
 * dependencies:
 * npm i r-json lien opn bug-killer
 * Don't forget to run an `npm i` to install the `youtube-api` dependencies.
 * */

// Dependencies
var Youtube = require("youtube-api")
  , Fs = require("fs")
  , ReadJson = require("r-json")
  , Lien = require("lien")
  , Logger = require("bug-killer")
  , Opn = require("opn")

// Constants
// I downloaded the file from OAuth2 -> Download JSON
const CREDENTIALS = ReadJson("./credentials.json");

// Init lien server
var server = new Lien({
    host: "localhost"
  , port: 5000

// Authenticate
// You can access the Youtube resources via OAuth2 only.
var oauth = Youtube.authenticate({
    type: "oauth"
  , client_id: CREDENTIALS.web.client_id
  , client_secret: CREDENTIALS.web.client_secret
  , redirect_url: CREDENTIALS.web.redirect_uris[0]

    access_type: "offline"
  , scope: [""]

// Handle oauth2 callback"/oauth2callback", function (lien) {
    Logger.log("Trying to get the token using the following code: " +;
    oauth.getToken(, function(err, tokens) {
        if (err) { lien(err, 400); return Logger.log(err); }
            resource: {
                // Video title and description
                snippet: {
                    title: "Testing YoutTube API NodeJS module"
                  , description: "Test video upload via YouTube API"
                // I don't want to spam my subscribers
              , status: {
                    privacyStatus: "private"
            // This is for the callback function
          , part: "snippet,status"

            // Create the readable stream to upload the video
          , media: {
                body: Fs.createReadStream("video.mp4")
        }, function (err, data) {
            if (err) { return lien.end(err, 400); }


The official Youtube documentation is a very useful resource.

If you have any questions, just open an issue.


OAuth (Access Token)

    type: "oauth"
  , token: "your access token"

OAuth (Refresh Token)

    type: "oauth"
  , refresh_token: "your refresh token"
  , client_id: "your client id"
  , client_secret: "your client secret"
  , redirect_url: "your refresh url"

Server Key

Only for requests that don't require user authorization (certain list operations)

    type: "key"
  , key: "your server key"

How to contribute

Have an idea? Found a bug? See how to contribute.

Where is this library used?

If you are using this library in one of your projects, add it in this list. :sparkles:


KINDLY © Ionică Bizău

Something went wrong with that request. Please try again.