node package manager


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


Patreon PayPal AMA Version Downloads Get help on Codementor

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

☁️ Installation

$ npm i --save youtube-api

📋 Example

 * 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.
 * */
const Youtube = require("youtube-api")
    , fs = require("fs")
    , readJson = require("r-json")
    , Lien = require("lien")
    , Logger = require("bug-killer")
    , opn = require("opn")
    , prettyBytes = require("pretty-bytes")
// I downloaded the file from OAuth2 -> Download JSON 
const CREDENTIALS = readJson(`${__dirname}/credentials.json`);
// Init lien server 
let server = new Lien({
    host: "localhost"
  , port: 5000
// Authenticate 
// You can access the Youtube resources via OAuth2 only. 
let 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 
server.addPage("/oauth2callback", lien => {
    Logger.log("Trying to get the token using the following code: " + lien.query.code);
    oauth.getToken(lien.query.code, (err, tokens) => {
        if (err) {
            lien.lien(err, 400);
            return Logger.log(err);
        Logger.log("Got the tokens.");
        lien.end("The video is being uploaded. Check out the logs in the terminal.");
        var req = Youtube.videos.insert({
            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")
        }, (err, data) => {
        setInterval(function () {
            Logger.log(`${prettyBytes(req.req.connection._bytesDispatched)} bytes uploaded.`);
        }, 250);

📝 Documentation

The official Youtube documentation is a very useful resource.

If you have any questions, please ask them on Stack Overflow and eventually open an issue and link your question there.


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.

💰 Donations

Another way to support the development of my open-source modules is to set up a recurring donation, via Patreon. 🚀

PayPal donations are appreciated too! Each dollar helps.

Thanks! ❤️

💫 Where is this library used?

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

  • adasq-services-ytv—It creates news feed from youtube search result, for specific queries
  • anitube (by kikura-yuichiro)—node module for getting youtube video url of japanese animation OP/ED movie
  • kyot-sunday-playlists (by Alin Pandichi)—Kyot Sunday Playlists
  • mediacenterjs (by Jan Smolders)—A NodeJS based mediacenter for your browser
  • mediacenterjs-youtube (by Jan Smolders)—A Youtube app for mediacenterjs
  • node-red-contrib-youtube (by—Youtube nodes for node-red
  • node-red-node-youtube (by Jay Long)—A Node-RED node to access Youtube Data API.
  • node-youtubeapi-simplifier (by Haidy777)—The Youtube-API probably isn't the simplest api in the world. So why isn't there a simplifier? Well, don't worry, now there is one :)
  • pullplaylist (by Sameid Usmani)—Youtube video downloader in pure javascript.
  • steam-chat-bot (by See contributors)—Simplified interface for a steam chat bot with lots of built-in functionality
  • test-youtube-api—Test Youtube API NodeJS module
  • YouSlackBot (by SoNiKBooM)—Insert Youtube videos posted to Slack into a Youtube playlist.
  • youtube-album-uploader (by Jared Chapiewsky)—Uploads an mp3 album to Youtube
  • youtube-dler (by Ayoub Ider AGHBAL)—A command line tool to download youtube videos/audio and playlists
  • youtube-playlist-info (by Benjamin Kaiser)—Youtube playlist information fetcher.
  • youtube-vanitystats (by Sebastian Patten)—A scheduled job that will will query YouTube's API for a given video ID. It will then email you the number of views and amount of revenue you have made since the last time it was run.

📜 License

MIT © Ionică Bizău