npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

r6api.js

v4.4.1

Published

Node.js wrapper around Rainbow Six: Siege API.

Downloads

374

Readme

Table of Contents

Links

Installation

$ yarn add r6api.js
# OR
$ npm install r6api.js

Initialization

To setup this package, you need to provide Ubisoft account credentials (email and password). Credentials should be handled as you would handle any other secure value, it is recommended to use dotenv package to load environment variables from a .env.

Do not use your real Ubisoft account. It is highly recommended to create a new account for using this package. Visit account.ubisoft.com/login to create new account.

Example

require('dotenv').config();
const R6API = require('r6api.js').default;

// // Or ES6 way
// import * as dotenv from 'dotenv';
// dotenv.config();
// import R6API from 'r6api.js';

const { UBI_EMAIL: email = '', UBI_PASSWORD: password = '' } = process.env;
const r6api = new R6API({ email, password });

// export default async () => { // ES6
exports.default = async () => {

  const username = 'Daniel.Nt';
  const platform = 'uplay';

  const { 0: player } = await r6api.findByUsername(platform, username);
  if (!player) return 'Player not found';

  const { 0: stats } = await r6api.getStats(platform, player.id);
  if (!stats) return 'Stats not found';
  const { pvp: { general } } = stats;

  return `${player.username} has played ${general.matches} matches.`;

};
Daniel.Nt has played 5648 matches.

API

Table of Contents

Definitions

| Param | Type | Description | | ----------- | -------------------- | --------------------------------------------------------------------- | | platform | string | Either uplay (pc), xbl (Xbox Live) or psn (PlayStation Network) | | platformAll | string | platform, steam, epic or amazon | | username/s | string \| string[] | | | id/s | string \| string[] | |


constructor

Options

| Param | Type | Required | Default | Description | | --------------- | -------- | -------- | ------- | --------------------------------------------------------------------- | | email | string | false | | Ubisoft account email | | password | string | false | | Ubisoft account password | | ubiAppId | string | false | | Ubi-AppId header value | | authFileDirPath | string | false | | Path for directory where authentication file is stored | | authFileName | string | false | | Name for authentication file | | authFilePath | string | false | | If set authFileDirPath and authFileName options are being ignored |

const { UBI_EMAIL: email = '', UBI_PASSWORD: password = '' } = process.env;
const r6api = new R6API({ email, password });

findByUsername

Find player by their username.

Usernames limit: 50

(platformAll, username/s) => Promise<Array>

await r6api.findByUsername('uplay', 'Daniel.Nt');
[
  {
    id: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    userId: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    idOnPlatform: '0B95544B-0228-49A7-B338-6D15CFBC3D6A',
    platform: 'uplay',
    username: 'Daniel.Nt',
    avatar: {
      '146': 'https://ubisoft-avatars.akamaized.net/0b95544b-0228-49a7-b338-6d15cfbc3d6a/default_146_146.png',
      '256': 'https://ubisoft-avatars.akamaized.net/0b95544b-0228-49a7-b338-6d15cfbc3d6a/default_256_256.png',
      '500': 'https://ubisoft-avatars.akamaized.net/0b95544b-0228-49a7-b338-6d15cfbc3d6a/default_tall.png'
    }
  }
]

findById

Find player by their id.

Ids limit: 50

(platformAll | 'all', id/s, options?) => Promise<Array>

Options

| Param | Type | Required | Default | Description | | -------- | --------- | -------- | ------- | ------------------------------- | | isUserId | boolean | false | false | Whether id is userId or not |

// search by profileId (id)
await r6api.findById('all', '91477729-b5ac-463c-9618-03ca154764f5');
// search by userId
await r6api.findById('all', '1baf5bf8-90cd-4ead-8b90-9a11cb2b8adf', { isUserId: true });
// search by idOnPlatform
await r6api.findById('xbl', '2535406338711362');
await r6api.findById('uplay', '0b95544b-0228-49a7-b338-6d15cfbc3d6a');
[
  {
    id: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    userId: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    idOnPlatform: '0B95544B-0228-49A7-B338-6D15CFBC3D6A',
    platform: 'uplay',
    username: 'Daniel.Nt',
    avatar: {
      '146': 'https://ubisoft-avatars.akamaized.net/0b95544b-0228-49a7-b338-6d15cfbc3d6a/default_146_146.png',
      '256': 'https://ubisoft-avatars.akamaized.net/0b95544b-0228-49a7-b338-6d15cfbc3d6a/default_256_256.png',
      '500': 'https://ubisoft-avatars.akamaized.net/0b95544b-0228-49a7-b338-6d15cfbc3d6a/default_tall.png'
    }
  }
]

getPlaytime

Get playtime of a player.

Ids limit: 200

(platform, id/s) => Promise<Array>

await r6api.getPlaytime('uplay', '0b95544b-0228-49a7-b338-6d15cfbc3d6a');
[
  {
    id: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    pvp: {
      general: 5984372,
      ranked: 5312097,
      casual: 614423,
      custom: 974,
      other: 56878
    },
    pve: {
      general: 292574
    }
  }
]

getProgression

Get level, xp and alpha pack drop chance of a player.

Ids limit: 200

(platform, id/s) => Promise<Array>

await r6api.getProgression('uplay', '0b95544b-0228-49a7-b338-6d15cfbc3d6a');
[
  {
    id: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    level: 297,
    xp: 73534,
    lootboxProbability: {
      raw: 820,
      percent: '8.20%'
    }
  }
]

getRanks

Get seasonal stats of a player.

Ids limit: 200

(platform, id/s, options?) => Promise<Array>

Options

| Param | Type | Required | Default | Description | | --------- | ------------------------------ | -------- | ----------------------------------------------------------- | ----------------------------------------------------------------- | | seasonIds | number \| number[] \| string | false | -1 | Numbers from 6 to 27 or -1 or 'all' | | regionIds | string \| string[] | false | ['emea', 'ncsa', 'apac'] | 'emea', 'ncsa', 'apac' or 'all' | | boardIds | string \| string[] | false | ['pvp_ranked', 'pvp_casual', 'pvp_newcomer', 'pvp_event'] | 'pvp_ranked', 'pvp_casual', 'pvp_newcomer' or 'pvp_event' |

Seasons reference

| ID | Name | ● | ID | Name | | ---- | -------------- | - | ---- | ------------- | | 6 | Health | | 17 | Void Edge | | 7 | Blood Orchid | | 18 | Steel Wave | | 8 | White Noise | | 19 | Shadow Legacy | | 9 | Chimera | | 20 | Neon Dawn | | 10 | Para Bellum | | 21 | Crimson Heist | | 11 | Grim Sky | | 22 | North Star | | 12 | Wind Bastion | | 23 | Crystal Guard | | 13 | Burnt Horizon | | 24 | High Calibre | | 14 | Phantom Sight | | 25 | Demon Veil | | 15 | Ember Rise | | 26 | Vector Glare | | 16 | Shifting Tides | | 27 | Brutal Swarm |

Note: -1 will always return current season

Regions reference

| Shorthand | Meaning | | --------- | -------------------------------- | | emea | Europe, Middle East and Africa | | ncsa | North, Central and South America | | apac | Asia Pacific |

Note: Since Steal Wave (18) all regions will return same data

Boards reference

| Minimum Season ID | Board ID | | ----------------- | -------------- | | 6 | pvp_ranked | | 12 | pvp_newcomer | | 15 | pvp_casual | | 16 | pvp_event |

Note: Returns empty array if boardId is pvp_newcomer and seasonId is 21 or above

Note: topRankPosition will always return 0 if board is not 'pvp_ranked'

Note: Ubisoft doesn't provide data for seasons before Operation Health (6) if board is pvp_ranked, Ember Rise (15) if board is pvp_casual, Wind Bastion (12) if board is pvp_event or Shifting Tides (16) if board is pvp_event

await r6api.getRanks('uplay', '0b95544b-0228-49a7-b338-6d15cfbc3d6a', { regionIds: 'emea', boardIds: 'pvp_ranked' })
[
  {
    id: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    seasons: {
      '27': {
        seasonId: 27,
        seasonName: 'Brutal Swarm',
        seasonColor: '#dac925',
        seasonImage: 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/35vqSFGr4xn1JnNVetTsyh/e9c46f34157897dc96988432991a1e52/r6s-seasons-y7s3__2_.jpg',
        seasonReleaseDate: '2022-09-06T00:00:00.000Z',
        regions: {
          emea: {
            regionId: 'emea',
            regionName: 'Europe, Middle East and Africa',
            boards: {
              pvp_ranked: {
                boardId: 'pvp_ranked',
                boardName: 'Ranked',
                skillMean: 29.9476130075,
                skillStdev: 7.6548063879,
                current: {
                  id: 0,
                  name: 'Unranked',
                  mmr: 2995,
                  icon: 'https://github.com/danielwerg/r6api.js/raw/master/assets/ranks/v3/Unranked.png'
                },
                max: {
                  id: 0,
                  name: 'Unranked',
                  mmr: 0,
                  icon: 'https://github.com/danielwerg/r6api.js/raw/master/assets/ranks/v3/Unranked.png'
                },
                lastMatch: {
                  result: 'unknown',
                  mmrChange: 0,
                  skillMeanChange: 0,
                  skillStdevChange: 0
                },
                pastSeasons: {
                  wins: 2249,
                  losses: 2104,
                  winRate: '51.67%',
                  matches: 4353,
                  abandons: 18
                },
                previousMmr: 0,
                nextMmr: 0,
                topRankPosition: 0,
                kills: 0,
                deaths: 0,
                kd: 0,
                wins: 0,
                losses: 0,
                winRate: '0.00%',
                matches: 0,
                abandons: 0,
                updateTime: '1970-01-01T00:00:00+00:00'
              }
            }
          }
        }
      }
    }
  }
]

Note: kills, deaths, kd, topRankPosition and everything under lastMatch only available for seasons including and after Phantom Sight (14) for older seasons it will return 0 or 'unknown' in case of lastMatch.result

Note: If player is unranked their max mmr (max.mmr) will always be 0 (it's always 0 for casual)

Note: Values for previousMmr, nextMmr, topRankPosition, max.id and max.mmr will always be 0, max.name will always be Unranked if boardId is pvp_casual


getStats

⚠️ API endpoint for getStats haven't been getting updates since High Calibre (see: #78).

Get summary stats of a player.

Ids limit: 200

(platform, id/s, options?) => Promise<Array>

Options

| Param | Type | Required | Default | Description | | ---------- | ---------- | -------- | ------------ | ------------------------ | | raw | boolean | false | false | Include raw API response | | categories | string[] | false | Requests all | Categories to request |

Categories reference

pvp pve

general generalpvp generalpve

operators operatorspvp operatorspve

weapons weaponspvp weaponspve

queues queuespvp queuespve modes modespvp modespve

ranked casual custom

local coop normal hard realistic normallocal hardlocal realisticlocal normalcoop hardcoop realisticcoop

bomb secureArea hostage elimination

disarmBomb protectHostage extractHostage

await r6api.getStats('uplay', '0b95544b-0228-49a7-b338-6d15cfbc3d6a');
[
  {
    id: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    pvp: {
      general: [Object],
      operators: [Object],
      weapons: [Object],
      queues: [Object],
      modes: [Object]
    },
    pve: {
      general: [Object],
      operators: [Object],
      weapons: [Object],
      queues: [Object],
      modes: [Object]
    }
  }
]

Note: Ubisoft stopped recording bulletsFired for pvp long time ago, don't rely on it

Note: distanceTravelled value might be overflowed due to Ubisoft storing it in 32-bit int

Full response


getStatus

Get Rainbow Six: Siege servers status.

() => Promise<Array>

await r6api.getStatus();
[
  {
    appId: '8956241d-236d-4dbd-9e1e-bf6ed133773a',
    name: 'Rainbow Six Siege - China - PC - LIVE',
    spaceId: '',
    mdm: '23702',
    category: 'Instance',
    platform: 'PC',
    status: 'Online',
    maintenance: null,
    impactedFeatures: []
  },
  {
    appId: 'e3d5ea9e-50bd-43b7-88bf-39794f4e3d40',
    name: 'Rainbow Six Siege - PC - LIVE',
    spaceId: '',
    mdm: '4073',
    category: 'Instance',
    platform: 'PC',
    status: 'Online',
    maintenance: null,
    impactedFeatures: []
  },
  {
    appId: 'fb4cc4c9-2063-461d-a1e8-84a7d36525fc',
    name: 'Rainbow Six Siege - PS4 - LIVE',
    spaceId: '05bfb3f7-6c21-4c42-be1f-97a33fb5cf66',
    mdm: '14922',
    category: 'Instance',
    platform: 'PS4',
    status: 'Online',
    maintenance: null,
    impactedFeatures: []
  },
  {
    appId: '6e3c99c9-6c3f-43f4-b4f6-f1a3143f2764',
    name: 'Rainbow Six Siege - PS5 - LIVE',
    spaceId: '96c1d424-057e-4ff7-860b-6b9c9222bdbf',
    mdm: '25365',
    category: 'Instance',
    platform: 'PS5',
    status: 'Online',
    maintenance: null,
    impactedFeatures: []
  },
  {
    appId: '76f580d5-7f50-47cc-bbc1-152d000bfe59',
    name: 'Rainbow Six Siege - XBOX SERIES X - LIVE',
    spaceId: '631d8095-c443-4e21-b301-4af1a0929c27',
    mdm: '25366',
    category: 'Instance',
    platform: 'XBOX SERIES X',
    status: 'Online',
    maintenance: null,
    impactedFeatures: []
  },
  {
    appId: '4008612d-3baf-49e4-957a-33066726a7bc',
    name: 'Rainbow Six Siege - XBOXONE - LIVE',
    spaceId: '98a601e5-ca91-4440-b1c5-753f601a2c90',
    mdm: '4075',
    category: 'Instance',
    platform: 'XBOXONE',
    status: 'Online',
    maintenance: null,
    impactedFeatures: []
  }
]

getUserStatus

Get status of a player.

Ids limit: 50

(id/s, options?) => Promise<Array>

Options

| Param | Type | Required | Default | Description | | ----------------- | --------- | -------- | ------- | ------------------------------------------------------------------------- | | fetchApplications | boolean | false | false | Make another API request to get additional information about applications |

Note: Takes userId instead of profileId (id) like most methods

await r6api.getUserStatus('0b95544b-0228-49a7-b338-6d15cfbc3d6a');
[
  {
    userId: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    status: 'offline',
    applications: [],
    manuallySet: null
  }
]

getProfileApplications

Get information about applications of a player.

Ids limit: 100

(id/s, options?) => Promise<Array>

Options

| Param | Type | Required | Default | Description | | ----------------- | --------- | -------- | ------- | ------------------------------------------------------------------------- | | fetchApplications | boolean | false | false | Make another API request to get additional information about applications |

await r6api.getProfileApplications('0b95544b-0228-49a7-b338-6d15cfbc3d6a');
[
  {
    id: '0b95544b-0228-49a7-b338-6d15cfbc3d6a',
    applications: [
      {
        id: '46f0b36b-b947-4d9c-b9dc-9a34b52ab59a',
        name: null,
        platform: null,
        sessionsPlayed: 10,
        daysPlayed: 7,
        lastPlayedAt: '2020-10-27T17:11:38.771Z',
        firstPlayedAt: '2019-04-19T22:05:01.850Z'
      },
      {
        id: '87843b9b-516d-4a58-824b-f658d1361ad1',
        name: null,
        platform: null,
        sessionsPlayed: 2,
        daysPlayed: 2,
        lastPlayedAt: '2016-03-21T18:28:25.434Z',
        firstPlayedAt: '2016-03-18T16:18:43.603Z'
      },
      {
        id: 'a427a342-56bb-437b-b835-fa695c75893b',
        name: 'Tom Clancy\'s Rainbow Six Siege - Test Server',
        platform: 'PC',
        sessionsPlayed: 137,
        daysPlayed: 72,
        lastPlayedAt: '2020-11-16T05:35:45.229Z',
        firstPlayedAt: '2017-06-01T20:10:13.424Z'
      },
      {
        id: 'e3d5ea9e-50bd-43b7-88bf-39794f4e3d40',
        name: 'Tom Clancy\'s Rainbow Six Siege',
        platform: 'PC',
        sessionsPlayed: 2344,
        daysPlayed: 1221,
        lastPlayedAt: '2021-02-04T12:35:13.173Z',
        firstPlayedAt: '2015-12-01T19:33:41.284Z'
      },
      {
        id: 'f68a4bb5-608a-4ff2-8123-be8ef797e0a6',
        name: null,
        platform: null,
        sessionsPlayed: 1919,
        daysPlayed: 1551,
        lastPlayedAt: '2021-08-01T08:45:05.344Z',
        firstPlayedAt: '2015-12-01T19:31:18.107Z'
      }
    ]
  }
]

getApplications

Get information about applications.

Ids limit: 50

(id/s) => Promise<Array>

await r6api.getApplications('e3d5ea9e-50bd-43b7-88bf-39794f4e3d40');
[
  {
    id: 'e3d5ea9e-50bd-43b7-88bf-39794f4e3d40',
    name: 'Tom Clancy\'s Rainbow Six Siege',
    platform: 'PC',
    spaceId: '5172a557-50b5-4665-b7db-e3f2e8c5041d'
  }
]

validateUsername

Validate username.

(username) => Promise<Object>

await r6api.validateUsername('gamerflick360');
{
  valid: false,
  validationReports: [
    {
      message: '\'flick\' matches \'flick\'',
      categories: [
        'global-username',
        'vulgarity'
      ],
      severity: 'high',
      locale: 'en-US',
      errorCode: 1013,
      suggestions: null
    }
  ]
}

getNews

Get Rainbow Six: Siege News.

(options?) => Promise<Object>

Options

| Param | Type | Required | Default | Description | | -------------- | --------- | -------- | --------- | --------------------------------------------------------------------------------- | | raw | boolean | false | false | Include raw API response | | category | string | false | 'all' | 'all', 'game-updates', 'patch-notes', 'community', 'store', 'esports' | | media | string | false | 'all' | 'all', 'news', 'videos' | | placement | string | false | '' | Ex: 'featured-news-article' | | limit | number | false | 6 | | | skip | number | false | 0 | | | startIndex | number | false | 0 | | | locale | string | false | 'en-gb' | | | fallbackLocale | string | false | 'en-us' | |

await r6api.getNews({ limit: 1 });
{
  total: 746,
  limit: 1,
  categories: 'all',
  media: 'all',
  skip: 0,
  startIndex: 0,
  placement: [],
  tags: [
    'BR-rainbow-six GA-siege'
  ],
  items: [
    {
      id: '3487NcAXKzJKRZPnFxzUxT',
      title: 'New Rainbow Six Siege Streamer Charms for Y7S3!',
      abstract: 'Announcing the next Y7S3 Streamer Charms!',
      thumbnail: {
        url: 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/33y0EfDYEFXvwpYwHxCstg/ccc5877c39f67d8ae6d952a6f05c2fea/Y7S3.StreamerCharms1.Header.png',
        description: ''
      },
      content: '## Announcing the next Streamer Charms!\n\nEach season will bring the release of new charms, as well as a return of the streamer’s charms from previous seasons!\n\n# New\n\n![[R6S] News Article - Y7S2 Streamer Charms 06062022](//staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/33y0EfDYEFXvwpYwHxCstg/774713452fd967ac228e66f8adac7c9f/Y7S3.StreamerCharms1.Header.png)\n\n[FoxA](https://www.twitch.tv/foxa_r6)\n\n[Nerdengenheiro](https://www.twitch.tv/nerdengenheiro)\n\n[Rainbow6itacom](https://www.twitch.tv/rainbow6itacom)\n\n[Minimichegga](https://www.twitch.tv/minimichegga)\n\n## Returning\n\n![[R6S][News] New Rainbow Six Siege Streamer Charms For Y7S2 2 - August 2022](//staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7ulCfEF4hIixzp6M6gGVD0/c8b65a32aab94a569d7fc02ec49f96be/Y7S3.StreamerCharms2.png)     \n![[R6S][News] New Rainbow Six Siege Streamer Charms For Y7S2 - Streamer Charms 3 updated](//staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/7qhtatztRolj1nvlXeOFoQ/133149e6bf44b3ad79e62c9c9b31214e/Y7S3.StreamerCharms3_Updated.png)      \n![[R6S][News] New Rainbow Six Siege Streamer Charms For Y7S2 4 - August 2022](//staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/2ZvGGaoBDvhtVhMExoobdC/d326148508e58577eb24097fb137616e/Y7S3.StreamerCharms4.png)\n\n[Ad9m](https://www.twitch.tv/ad9m)\n[Alfredoplays](https://www.twitch.tv/alfredoplays)\n[AnneMunition](https://www.twitch.tv/annemunition)\n[Beaulo](https://www.twitch.tv/beaulo)\n[Bighead](https://www.twitch.tv/bighead033)\n[BikiniBodhi](https://www.twitch.tv/bikinibodhi)\n[Bnans](https://www.twitch.tv/bnans)\n[Braction](https://www.twitch.tv/bractionfps)\n[CCSesports](https://www.twitch.tv/ccsesports)\n[Drid](https://www.twitch.tv/dridgg) \n[FastAnne](https://www.twitch.tv/fastanne)\n[Gabbo](https://www.twitch.tv/JustGabbo)\n[Galadriex](https://www.twitch.tv/galadriex)\n[Get_Flanked](https://www.twitch.tv/GetFlanked)\n[Heideltraut](https://www.twitch.tv/heideltraut)\n[Interro](https://www.twitch.tv/interro)\n[JerichoFive](https://www.twitch.tv/jerichofive)\n[JessGOAT](https://www.twitch.tv/jessgoat)\n[Jynxzi](https://www.twitch.tv/jynxzi)\n[Just9n](https://www.twitch.tv/just9n)\n[Kalera](https://www.twitch.tv/Kalera)\n[KingGeorge](https://www.twitch.tv/KingGeorge)\n[KittyR6](https://www.twitch.tv/kitty_r6)\n[LagonisR6](https://www.twitch.tv/lagonis)\n[Lil_Lexi](https://www.twitch.tv/lil_lexi)\n[Lt Custard](https://www.twitch.tv/lt_custard)\n[Lusorkoeffizient](https://www.twitch.tv/lusorkoeffizient)\n[MacieJay](https://www.twitch.tv/MacieJay)\n[Mag6](https://www.twitch.tv/mag6)\n[M3RYLAND](https://www.twitch.tv/M3RYLAND)\n[Matimi0](https://www.twitch.tv/matimi0)\n[MrBboy45](https://www.twitch.tv/mrbboy45)\n[Narcoleptic Nugget](https://www.twitch.tv/narcolepticnugget)\n[Nesk](https://www.twitch.tv/neskwga)\n[PaladinAmber](https://www.twitch.tv/paladinamber)\n[Patife](https://www.twitch.tv/patife)\n[Pengu](https://www.twitch.tv/pengu)\n[Punjistick](https://www.twitch.tv/punjistick)\n[RazaH](https://www.twitch.tv/razah)\n[REMGURI / 렘쨩](https://www.twitch.tv/remguri)\n[Rubsarb](https://www.twitch.tv/Rubsarb/)\n[SexyCake](https://www.twitch.tv/smexycake)\n[Sha77e](https://www.twitch.tv/sha77etv)\n[Shorty](https://www.twitch.tv/shortyyguy)\n[shroud](https://www.twitch.tv/shroud)\n[SilphTV](https://www.twitch.tv/silphtv)\n[Sixquatre](https://www.twitch.tv/sixquatre)\n[TangyD](https://www.twitch.tv/tangyd)\n[Tatted](https://www.twitch.tv/tatted)\n[Thaqil](https://www.twitch.tv/thaqil)\n[Tranth](https://www.twitch.tv/tranth)\n[Varsity](https://www.twitch.tv/varsitygaming)\n[WhiteShark67](https://www.twitch.tv/whiteshark67)\n[yo_boy_roy](https://www.twitch.tv/yo_boy_roy)\n[z1ronic](https://www.twitch.tv/zironicdk)\n[Zander](https://www.twitch.tv/zander)\n[ziGueira](https://www.twitch.tv/zigueira)\n[GarfieldIsDoc](https://www.twitch.tv/garfield)\n[Supr](https://www.twitch.tv/supr)\n[RyyFyy](https://www.twitch.tv/ryyfyy)\n[GCGamerOficial](https://www.twitch.tv/gcgameroficial)\n\n## How to acquire charms\n\nThese charms are only available by subscribing to the respective streamer’s Twitch channel with a linked Ubisoft account. For more information on how to link your Ubisoft and Twitch account, as well as opt in for Twitch Drops, please refer to [this FAQ](https://support.ubi.com/Faqs/000035432/Get-your-Twitch-Streamer-s-charm).\n\n## How to get involved\n\nWe are always on the lookout for additional content creators to add to the program. If your goal is to see your charm in game, we use the following criteria to begin the selection process for potential candidates:\n\nThis is an evolving program so to reflect this, the following requirements have been adjusted.\n\n__Requirements to be considered__\n-	Approximately 150+ concurrent viewers.\n-	Average of 10 Rainbow Six streams per month.\n-	Average of 20 hours of Rainbow Six streamed per month.\n-	Positive standing with Ubisoft/Rainbow Six Siege.\n-	High quality level of content.\n-	Twitch Partnered.\n-	Rainbow Six Siege reserves the right for final decision.\n\n__Consideration for Removal__\n-	Less than 10 Rainbow Six Siege main streams over 3 months.\n-	Level of quality dropping below an acceptable level.\n- 	Standing with Rainbow Six Siege/Ubisoft compromised.\n-	Any actions that may negatively affect the R6S/Ubisoft brand.\n-	Loss of Twitch Partnership.\n-	Rainbow Six Siege reserves the right for removal of any charms.',
      description: undefined,
      categories: [
        'news',
        'game-updates',
        'rainbow-six',
        'rainbow-six-siege'
      ],
      tag: 'BR-rainbow-six GA-siege',
      placement: [
        'featured-news-article'
      ],
      type: 'news',
      readTime: 2,
      url: 'https://www.ubisoft.com/en-gb/game/rainbow-six/siege/news-updates/3487NcAXKzJKRZPnFxzUxT/new-rainbow-six-siege-streamer-charms-for-y7s3',
      date: 'Fri Sep 02 2022 16:45:00 GMT+0000 (Coordinated Universal Time)'
    }
  ]
}

getNewsById

Get Rainbow Six: Siege News by ID.

(id: string, options?) => Promise<Object>

Options

| Param | Type | Required | Default | Description | | -------------- | --------- | -------- | --------- | ------------------------ | | raw | boolean | false | false | Include raw API response | | locale | string | false | 'en-gb' | | | fallbackLocale | string | false | 'en-us' | |

await r6api.getNewsById('4QAhnXnPk7Ffse8scw3k0Z');
{
  total: 3,
  tags: [
    'BR-rainbow-six GA-siege'
  ],
  item: [
    {
      id: '4QAhnXnPk7Ffse8scw3k0Z',
      title: 'Y5S1.2 Patch Notes',
      abstract: 'The Y5S1.2 Patch will deploy to PC and Console in the week of April 20th. ',
      thumbnail: {
        url: 'https://staticctf.akamaized.net/J3yJr34U2pZ2Ieem48Dwy9uqj5PNUQTn/Gqlz4Wt00TfhvaSH4d8LZ/bdb41b4552ebfda9acf293ece6f50084/y5s1_2_pn-min.png',
        description: ''
      },
      content: 'The Y5S1.2 Patch will deploy to PC and Console in the week of April 20th. Please see our [Designer\'s Notes](https://rainbow6.com/dn_y5s12) for more insight on the balancing changes coming with the update.\n\n# UPDATE\nUpdate - the quick match map pool will remain the same throughout Y5S1 and will rotate again in Y5S2.\n\n# BALANCING\n### BUCK \n*With you til the end of the line.*\n\n- Frag Grenades replaced with Claymores.\n- Increased Skeleton Key Magazine Capacity: \n  - Skeleton Key magazine capacity increased to 5 + 1\n  - Skeleton Key max ammo count is now 25+1\n\n### GOYO\n*Less is more.*\n\n- Reduced number of Volcán shields to 2 (down from 3).\n\n### JÄGER\n*Less of a pain-in-the-schnitzel.*\n\n- Now a 2-speed/2-armor operator.\n\n### MOZZIE\n*Still a shortie.*\n\n- Removed Super Shorty secondary.\n\n### YING\n*Lights, Camera, Action!*\n\n- Increased number of Candelas to 4 (up from 3).\n- Replaced Claymores with Smoke Grenades.\n- Increased T-95 LSW damage to 46 (up from 43).\n\n### M12 (Caveira)\n- Added a Razor Holographic Sight option to her M12.\n\n### TCSG12 (Kaid, Goyo)\n- Added an additional magazine to the TCSG12.\n- Reduced TCSG12 damage to 57 (down from 84).\n\n# BUG FIXES\n- FIXED – Barricade replication issues where the barricade is not destroyed for all players in game except the shooter.\n- FIXED – The Dynamic Play button does not update properly when last match was on an Event/Discovery playlist.\n- FIXED – Players can clip inside the excavator in EXT Construction Site of Oregon.\n- FIXED – Game boots with DX11 when players manually select the Vulkan executable in the steam installation folder.\n- FIXED – Minor menu/shop visual and cosmetic fixes.\n- FIXED – Lighting issue on Consulate map (hotfixed on PC on [March 30](https://twitter.com/rainbow6game/status/1244581743254024192?lang=en)).',
      description: undefined,
      categories: [
        'news',
        'rainbow-six',
        'rainbow-six-siege',
        'patch-notes'
      ],
      tag: 'BR-rainbow-six GA-siege',
      placement: [
        'featured-news-article'
      ],
      type: 'news',
      readTime: 2,
      url: 'https://www.ubisoft.com/en-gb/game/rainbow-six/siege/news-updates/4QAhnXnPk7Ffse8scw3k0Z/y5s12-patch-notes',
      date: 'Mon Apr 20 2020 21:00:00 GMT+0000 (Coordinated Universal Time)'
    }
  ]
}

custom

Useful if you're familiar with Rainbow Six Siege's API; this method will make a request to a custom URL you would provide with the token in the header.

(url: string, params: any) => Promise<T>

await r6api.custom(
  utils.URLS.STATS(
    'uplay', ['0b95544b-0228-49a7-b338-6d15cfbc3d6a'],
    'operatorpvp_clash_sloweddown'
  )
);
{
  results: {
    '0b95544b-0228-49a7-b338-6d15cfbc3d6a': {
      'operatorpvp_clash_sloweddown:3:10:infinite': 2
    }
  }
}

TypeScript integrations

This package is developed in TypeScript, and the typings are shipped along with the built package: that means that your editor should automatically detect them and give you the static type info. For a full list of supporting IDEs, please see here.

If you're coding in TypeScript you can also import the typings and use the type-checking functions provided in the utils.

import R6API, { utils, typings, constants } from 'r6api.js'

const yourVar = 'r4-c'; // any

if (utils.isWeaponName(yourVar)) {
  // Now your var has the WeaponName type
}

const platform = constants.PLATFORMS as typings.Platform[];

Credit

Operator Icons from r6operators.marcopixel.eu