warframe-drop-data
Warframe drop data in an easier to parse format.
NOTE: This data is parsed from Digital Extremes official drop data website, no data mining was involved.
Web UI & URL
There is an experimental searchable web ui available at http://drops.warframestat.us
"API Endpoints"
You can access the data via normal HTTP requests, which makes it usable like an API without really being one.
/data/all.json
All data from the website in one single file.
Data structure:
{
"blueprintLocations": [ { ... } ],
"cetusBountyRewards": [ { ... } ],
"enemyBlueprintTables": [ { ... } ],
"enemyModTables": [ { ... } ],
"keyRewards": [ { ... } ],
"missionRewards": { "Earth": { ... } },
"modLocations": [ { ... } ],
"relics": [ { ... } ],
"sortieRewards": [ { ... } ],
"transientRewards": [ { ... } ],
"solarisBountyRewards" : [ { ... } ],
"zarimanRewards": [ { ... } ],
"syndicates": [ { ... }],
}
/data/info.json
The metadata of the current build. Updates when Digital Extremes' website is updated.
Legend:
- Hash: An MD5 hash generated from the drop data page.
- Timestamp: The timestamp at which the build was generated by us.
- Modified: The timestamp at which the drop data page was last modified by DE.
Data structure:
{
"hash": "d47a826e5c3a8dc7a37fe6f468f41a57",
"timestamp": 1524933993968,
"modified": 1524690737000
}
/data/missionRewards.json
All mission rewards, like what drops where and in which rotation. (Source)
Data structure:
"missionRewards": {
"Sedna": {
"Hydron": {
"gameMode": "Defense",
"isEvent": false,
"rewards": {
"A": [
{
"_id": "c0400ac7082c2f3d811e47ca9b7a8ae8",
"itemName": "Vitality",
"chance": 11.11,
"rarity": "Uncommon"
},
{ ... }
],
"B": [ ... ]
}
},
"Bere": { ... }
},
"Earth": { ... }
}
/data/missionRewards/$PLANET_NAME/$PLACE.json
Drop data for a specific location. Example: /data/missionRewards/Eris/Xini.json
.
Data structure:
"Hydron": {
"gameMode": "Defense",
"isEvent": false,
"rewards": {
"A": [
{
"_id": "c0400ac7082c2f3d811e47ca9b7a8ae8",
"itemName": "Vitality",
"chance": 11.11,
"rarity": "Uncommon"
},
{ ... }
],
"B": [ ... ]
}
}
/data/relics.json
All relics, what they contain, rarity etc. (Source)
Data structure:
"relics": [
{
"_id": "4e4d817f8c2d887316c6d8add253403e",
"tier": "Axi",
"relicName": "A1",
"state": "Intact",
"rewards": [
{
"_id": "6733cc5298452209aa29dd72027c7df1",
"itemName": "Akstiletto Prime Barrel",
"chance": 11,
"rarity": "Uncommon"
},
{ ... }
]
},
{ ... }
]
/data/relics/$TIER/$RELIC_NAME.json
Data for a specific relic. Example: /data/relics/Axi/R1.json
.
Data structure:
{
"_id": "4e4d817f8c2d887316c6d8add253403e",
"tier": "Axi",
"relicName": "A1",
"state": "Intact",
"rewards": {
"Intact": [
{
"_id": "6733cc5298452209aa29dd72027c7df1",
"itemName": "Akstiletto Prime Barrel",
"chance": 11,
"rarity": "Uncommon"
},
{ ... }
],
"Exceptional": [ ... ]
}
}
/data/transientRewards.json
Rewards not tied to a specific location, like mods dropped by Nightmare Mode missions. (Source)
Data structure:
"transientRewards": [
{
"_id": "b3c734177040ffb494609a27d87d4841",
"objectiveName": "Derelict Vault",
"rewards": [
{
"_id": "24a4a903a7846a300d6b04e914e52e1b",
"itemName": "Anemic Agility",
"chance": 4.17,
"rarity": "Rare"
},
{ ... }
]
},
{ ... }
]
/data/sortieRewards.json
Sortie rewards. (Source)
Data structure:
"sortieRewards": [
{
"_id": "b3c734177040ffb494609a27d87d4841",
"itemName": "4000 Endo",
"chance": 12.1,
"rarity": "Uncommon"
},
{ ... }
]
/data/modLocations.json
Mod drops sorted by mod. (Source)
Data structure:
"modLocations": [
{
"_id": "b3c734177040ffb494609a27d87d4841",
"modName": "Accelerated Deflection",
"enemies": [
{
"_id": "68cfde6d20b38ba62b412b48c440a7a0",
"enemyName": "Arcane Boiler",
"enemyModDropChance": 3,
"chance": 7.37,
"rarity": "Rare"
},
{ ... }
]
},
{ ... }
]
/data/enemyModTables.json
Mod drops sorted by enemy. (Source)
Data structure:
"modLocations": [
{
"_id": "2757006e018c952e40a6e3cf74048420",
"enemyName": "002-Er",
"enemyModDropChance": "10.00",
"mods": [
{
"_id": "74ab77f66f97e146b6cef713a370e105",
"modName": "Flux Overdrive",
"chance": 12.5,
"rarity": "Uncommon"
},
{ ... }
]
},
{ ... }
]
/data/enemyBlueprintTables.json
Blueprints and part drops sorted by enemy. (Source)
Data structure:
"enemyBlueprintTables": [
{
"_id": "6ba71181fe67be210250c59fdf06ecb8",
"enemyName": "Arid Heavy Gunner",
"enemyItemDropChance": "1.00",
"items": [
{
"_id": "9568cc883b465bc94c14e0d206506b2d",
"itemName": "Gorgon Blueprint",
"chance": 100,
"rarity": "Common"
},
{ ... }
]
},
{ ... }
]
/data/blueprintLocations.json
Blueprints and part drops sorted by item. (Source)
Data structure:
"blueprintLocations": [
{
"_id": "2d200b684ad2bac2184a5edc3a9655cb",
"itemName": "Ash Chassis Blueprint",
"enemies": [
{
"_id": "02ca12683663224f017f209954cb876a",
"enemyName": "Grineer Manic",
"enemyItemDropChance": 33,
"chance": 38.72,
"rarity": "Common"
},
{ ... }
]
},
{ ... }
]
/data/cetusBountyRewards.json
Drop data for Cetus bounty missions. (Source)
Data structure:
"cetusBountyRewards": [
{
"_id": "0b9c958b277561c57f47390f5db201ef",
"bountyLevel": "Level 10 - 30 Bounty",
"rewards": {
"A": [
{
"_id": "2d220168d8505314316354e586fe4c7e",
"stage": "Stage 1",
"itemName": "100 Endo",
"chance": 25,
"rarity": "Uncommon"
},
{ ... }
],
"B": [ ... ]
}
},
{ ... }
]
/data/zarimanRewards.json
Drop data for Zariman bounty missions. (Source)
Data structure:
"zarimanRewards": [
{
"_id": "255771097c27769a3a76bfa38c9fba49",
"bountyLevel": "Level 50 - 55 Zariman Bounty",
"rewards": {
{ ... }
"C": [
{
"_id": "d5ccc328b76d91df416cc361d2209c1f",
"itemName": "15,000 Credits",
"rarity": "Uncommon",
"chance": 17.39,
"stage": "Final stage"
},
{ ... }
],
}
},
{ ... }
]
/data/syndicates.json
Drop data for syndicate vendors. Generated by data from the Warframe Wikia.
Data structure:
{
"syndicates": {
"Steel Meridian": [
{
"_id": "d765637f1f1ae09add1b5265f5d29ea1",
"item": "Steel Meridian Sigil",
"chance": 100,
"rarity": "Common",
"place": "Steel Meridian, Brave",
"standing": 1000
},
{ ... }
],
{ ... }
},
}
/data/miscItems.json
Miscellanous enemy item drops. (Source)
Data structure:
"miscItems": [
{
"_id": "abce816f002a752c88308d5f6658427c",
"enemyName": "Akkalak Turret",
"enemyItemDropChance": "70.00",
"items": [
{
"_id": "a3ab4147ff1f344ae81bc8fd301a4ba5",
"itemName": "Circuits",
"chance": 68.02,
"rarity": "Common"
},
{ ... }
]
},
{ ... }
]
/data/builds/builds.json
A list of available builds and their timestamps.
Data structure:
[
{
"hash": "d47a826e5c3a8dc7a37fe6f468f41a57",
"timestamp": 1524933993968,
"modified": 1524690737000
},
{ ... }
]
{hash}
.json
/data/builds/The all.json
file of the given hash. Other files, such as missionRewards.json
are not available for previous builds.
Data structure:
{
"blueprintLocations": [ { ... } ],
"cetusBountyRewards": [ { ... } ],
"enemyBlueprintTables": [ { ... } ],
"enemyModTables": [ { ... } ],
"keyRewards": [ { ... } ],
"miscItems": [ { ... } ],
"missionRewards": { "Earth": { ... } },
"modLocations": [ { ... } ],
"relics": [ { ... } ],
"sortieRewards": [ { ... } ],
"transientRewards": [ { ... } ]
}
For Developers
Dependencies
Usage
You can run the build script with npm run build
.
Once built, serve the Web UI with npm run serve:dev
.
Syndicate drop data
Syndicate drop data is scraped from the wiki and not from the drops site as the rest of the data.
The syndicate data needs to be scraped from different pages, one for each syndicate which could also contain
multiple sections containing the drop data.
To make this possible a declarative configuration has been created within lib/syndicates.js
where you can define all of this in the following format:
/**
* @typedef {Object} SyndicateMapperResult
* @property {_id} _id Unique hash of the item
* @property {string} item The name of the item
* @property {number} chance The dropchance of the item
* @property {string} rarity The rarity of the item
* @property {string} place The location where the item drops
*/
/**
* @typedef {function} SyndicateMapper
* @param {module:cheerio/CheerioAPI} $ cheerio interface
* @param {string} element Current element
* @param {string} syndicate Name of the Syndicate
* @param {string} [section] Section title - potentially empty
* @returns {SyndicateMapperResult}
*/
/**
* @typedef {Object} SyndicateSection
* @property {string} [title] Indicates the name of the specific vendor
* @property {string} selector jQuery selector used to find the elements you want to map
* @property {SyndicateMapper} [mapper] Used to map these elements. If not provided, a default mapped is used
*/
/**
* @typedef {Object} SyndicateConfig
* @property {string} name Name of the Syndicate (should match the wiki)
* @property {string} url The wiki url of the syndicate
* @property {SyndicateSection[]} sections These will be parsed and mapped into json data
*/
/** @type {Array<SyndicateConfig>} */
const SYNDICATES = [
{
name: 'Steel Meridian',
url: 'https://warframe.fandom.com/wiki/Steel_Meridian',
sections: [
{ selector: '#mw-customcollapsible-SteelMeridian > div > div' },
],
},
{
name: 'Entrati',
url: 'https://warframe.fandom.com/wiki/Entrati',
sections: [
{ title: 'Father', selector: '#mw-customcollapsible-Father > div > div' },
{ title: 'Daughter', selector: '#mw-customcollapsible-Daughter > div > div' },
{ title: 'Son', selector: '#mw-customcollapsible-Son > div > div' },
{ title: 'Otak', selector: '.flex-container:eq(3) > div' },
{ title: 'Grandmother', selector: '#mw-customcollapsible-Grandmother #gallery-1 > div', mapper: galleryMapper },
],
},
{ ... }
];
Mappers
A mapper is a function that maps a singular element (found by the selector
) to a json object.
The mapper receives the following arguments: the cheerio
object, the current element, name of the syndicate, section title (can be empty).
The return type should at least contain the following information:
/**
* @typedef {Object} SyndicateMapperResult
* @property {_id} _id Unique hash of the item
* @property {string} item The name of the item
* @property {number} chance The dropchance of the item
* @property {string} rarity The rarity of the item
* @property {string} place The location where the item drops
*/
Any additional properties will be added into the final result but won't show up in the slim json file.
Disclaimer
This list represents data and drops from the PC version of the Free-to-play game Warframe. That's right - Warframe is free! Which means our drop system is designed to maintain a balance. Our free players can earn the game's content, and our paying players who support us (and keep the game running) usually get first dibs on the content by using Platinum (which can be traded to free players)! As far as we can tell... we are the first developers to openly post something quite like this. Let's hope it works out for us and we set a trend.
This is automatically generated from our internal data but this data comes with no guarantees -- do not expect it to be comprehensive for how complex the game is. This list will be maintained by an automated process which will be published with Updates (not all Hotfixes). We update often and new game systems may or may not be covered here. This list can be discussed here. Know a free-to-play game that provides official drop rates in a different way? We'd love to know.
License
MIT