Skip to content

A thin Call of Duty API wrapper written in TypeScript

License

Notifications You must be signed in to change notification settings

jakejrichards/cod-api

Repository files navigation

cod-api

A thin Call of Duty API wrapper written in TypeScript

Not licensed by or affiliated with Activision or Call of Duty

  • Full Black Ops 4 Support - blackout, mp, zombies
  • Get profile information - prestige, rank, xp, and more...
  • Get recent matches and stats - map, mode, win/loss, kills, deaths, SPM, K/D Ratio, and more...
  • Get leaderboard information - weekly, monthly, alltime, for all game modes

Installing

You can install via the npm package manager

npm i cod-api

Or clone the repository and install dependencies

git clone https://github.com/jakejrichards/cod-api.git

Black Ops 4

import { BO4 } from 'cod-api'

const username = 'Consisttt'; // username
const platform = 'psn'; // psn | xbl | battle

// Retrieve Raw Responses

BO4.getRawMultiplayerStats(username, platform)
    .then(multiplayerStats => {
        
    });

BO4.getRawBlackoutStats(username, platform)
    .then(blackoutStats => {
    
    });

BO4.getRawZombiesStats(username, platform)
    .then(zombiesStats => {
       
    });

const start = new Date(/*start time*/);
const end = new Date(/*end time*/);

BO4.getRawMultiplayerMatchesStats({ username, platform, start, end })
    .then(matchesStats => {
        
    });

BO4.getRawZombiesMatchesStats({ username, platform, start, end })
    .then(matchesStats => {
        
    });

BO4.getRawBlackoutMatchesStats({ username, platform, start, end })
    .then(matchesStats => {
        
    });

// Specific Methods

BO4.getLifetimeMultiplayerStats(username, platform)
    .then(lifetime => {
        const totalKills = data.all.kills;
    });

BO4.getWeeklyMultiplayerStats(username, platform)
    .then(weekly => {
        const weeklyWins = data.all.wins;
    });

BO4.getOverallZombiesStats(username, platform)
    .then(data => {
        const totalKills = data.kills;
    });

BO4.getOverallBlackoutStats(username, platform)
    .then(data => {
        const blackoutWins = data.wins;
    });

BO4.getMultiplayerMatchesStats({ username, platform, start, end })
    .then(matches => {
        const [ match ] = matches;
    })

BO4.getBlackoutMatchesStats({ username, platform, start, end })
    .then(matches => {
        const [ match ] = matches;
    })

BO4.getZombiesMatchesStats({ username, platform, start, end })
    .then(matches => {
        const [ match ] = matches;
    })

These endpoints are not yet populated with data on the official call of duty api:

  • getSoloBlackoutStats
  • getDuoBlackoutStats
  • getQuadBlackoutStats

Legacy COD Titles

Methods for titles released before Black Ops 4

Get Profile

import { LegacyCOD } from 'cod-api';

LegacyCOD.getProfile({ title, platform, username })
    .then(response => {
        // Do something...
        console.log(response);
    })
    .catch(err => {
        // Do something with this error
        console.log(err);
    });

Sample Output:

{ title: 'wwii',
platform: 'psn',
username: 'Consisttt',
mp: 
{ lifetime: { all: [Object], mode: [Object] },
    weekly: { all: [Object], mode: [Object] },
    level: 42,
    maxLevel: 0,
    levelXpRemainder: 26990,
    levelXpGained: 13010,
    prestige: 5,
    prestigeId: 0,
    maxPrestige: 0 },
zombies: 
{ lifetime: { all: {}, mode: {} },
    weekly: { all: {}, mode: {} } },
engagement: null }

Get Recent Matches

import { LegacyCOD } from 'cod-api';

LegacyCOD.getRecentMatches({ title, platform, username, days })
    .then(response => {
        // Do something...
        console.log(response);
    })
    .catch(err => {
        // Do something with this error
        console.log(err);
    });

Sample Output:

[ { utcStartSeconds: 1518474308,
    utcEndSeconds: 1518474994,
    duration: 685,
    map: 'mp_france_village',
    mode: 'hp',
    result: 'none',
    winningTeam: 'allies',
    privateMatch: false,
    gameBattle: false,
    playlistName: null,
    player: 
    { awards: [Object],
    team: 'axis',
    rank: 41,
    prestige: 5,
    loadouts: [Object]
    },
    playerStats: 
    { kills: 0,
    shotsMissed: 634,
    kdRatio: 0,
    distanceTravelled: 90335.734375,
    divisionXpMountain: 0,
    accuracy: 0.25323910482921086,
    divisionXpExpeditionary: 0,
    divisionXpInfantry: 0,
    divisionXpArmored: 0,
    shotsLanded: 215,
    divisionXpAirborne: 0,
    avgSpeed: 174.0572967529297,
    avgKillDistance: 465.7652587890625,
    score: 6900,
    totalXp: 4000,
    timePlayed: 685.9,
    headshots: 0,
    divisionXpNone: 0,
    assists: 10,
    divisionXpResistance: 0,
    shotsFired: 849,
    deaths: 0
    }
}
]

Get Summary

import { LegacyCOD } from 'cod-api';

LegacyCOD.getRecentSummary({ title, platform, username, days })
    .then(response => {
        // Do something...
        console.log(response);
    })
    .catch(err => {
        // Do something with this error
        console.log(err);
    });

Sample Output:

{ all: 
{ kills: 88,
    distanceTravelled: 529676.67578125,
    divisionXpMountain: 0,
    accuracy: 0.255205688166582,
    divisionXpExpeditionary: 0,
    losses: 1,
    shotsLanded: 1005,
    score: 30885,
    totalXp: 85200,
    headshots: 5,
    assists: 52,
    divisionXpResistance: 4275,
    scorePerMinute: 194.1486157311611,
    deaths: 50,
    wins: 4,
    shotsMissed: 2933,
    kdRatio: 1.76,
    divisionXpInfantry: 0,
    divisionXpArmored: 0,
    divisionXpAirborne: 0,
    avgSpeed: 1541.1485290527344,
    avgKillDistance: 4201.184417724609,
    timePlayed: 9544.75,
    matchesPlayed: 12,
    divisionXpNone: 0,
    shotsFired: 3938
}
}

Get Leaderboards

import { LegacyCOD } from 'cod-api';

LegacyCOD.getLeaderboards({ title, platform, time, type, mode, username })
    .then(response => {
        // Do something...
        console.log(response);
    })
    .catch(err => {
        // Do something with this error
        console.log(err);
    });

Sample Output:

{ title: 'wwii',
platform: 'psn',
leaderboardType: 'core',
gameMode: 'war',
page: 3969,
resultsRequested: 20,
totalPages: 288978,
sort: null,
columns: 
[ 'prestige',
    'totalXp',
    'kills',
    'deaths',
    'assists',
    'score',
    'timePlayed' ],
entries: 
[ { rank: 79361,
    username: 'itsESPALDINHO79',
    updateTime: 294760,
    rating: 5972,
    values: [Object] },
    { rank: 79380,
    username: 'Consisttt',
    updateTime: 7900,
    rating: 5972,
    values: [Object] } ] }

License

This project is licensed under the MIT License