diff --git a/docs/openapi.md b/docs/openapi.md
new file mode 100644
index 0000000..7bc6ab0
--- /dev/null
+++ b/docs/openapi.md
@@ -0,0 +1,1857 @@
+---
+title: OpenAPI v1.0
+language_tabs:
+ - javascript: JavaScript
+language_clients:
+ - javascript: request.
+toc_footers: []
+includes: []
+search: true
+highlight_theme: darkula
+headingLevel: 2
+
+---
+
+
+
+
OpenAPI v1.0
+
+> Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
+
+Base URLs:
+
+* https://tone.sleepycat.date/v1
+
+# Authentication
+
+- HTTP Authentication, scheme: basic
+
+Default
+
+## post-servers-register
+
+
+
+> Code samples
+
+```javascript
+const inputBody = '{
+ "name": "string",
+ "description": "string",
+ "auth_port": 8081
+}';
+const headers = {
+ 'Content-Type':'application/json',
+ 'Accept':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/servers/register',
+{
+ method: 'POST',
+ body: inputBody,
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`POST /servers/register`
+
+Register a server on Tone API.
+The server needs to be online on masterserver and reacheable by Tone.
+
+> Body parameter
+
+```json
+{
+ "name": "string",
+ "description": "string",
+ "auth_port": 8081
+}
+```
+
+Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|object|false|none|
+|» name|body|string|true|The name of your server as it appears on Northstar|
+|» description|body|string|true|The description of your server as it appears on Northstar|
+|» auth_port|body|integer(uri)|true|In most cases, this is the IP address of your server with the TCP port you forwarded|
+
+> Example responses
+
+> 201 Response
+
+```json
+{
+ "id": 0,
+ "token": "string"
+}
+```
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|201|[Created](https://tools.ietf.org/html/rfc7231#section-6.3.2)|Created|Inline|
+|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
+
+Response Schema
+
+Status Code **201**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» id|integer|false|none|none|
+|» token|string|false|none|none|
+
+
+This operation does not require authentication
+
+
+server
+
+Everything about servers
+
+## post-servers-serverId
+
+
+
+> Code samples
+
+```javascript
+
+fetch('https://tone.sleepycat.date/v1/servers/{serverId}',
+{
+ method: 'POST'
+
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`POST /servers/{serverId}`
+
+Used to test auth
+
+Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|serverId|path|string|true|none|
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|None|
+|403|[Forbidden](https://tools.ietf.org/html/rfc7231#section-6.5.3)|Forbidden|None|
+
+
+To perform this operation, you must be authenticated by means of one of the following methods:
+Auth_Token
+
+
+## post-kills
+
+
+
+> Code samples
+
+```javascript
+const inputBody = '{
+ "tone_version": "string",
+ "match_id": "string",
+ "game_mode": "string",
+ "map": "string",
+ "game_time": "14:15:22Z",
+ "player_count": 0,
+ "attacker_name": "string",
+ "attacker_id": 0,
+ "attacker_current_weapon": "string",
+ "attacker_current_weapon_mods": 0,
+ "attacker_weapon_1": "string",
+ "attacker_weapon_1_mods": 0,
+ "attacker_weapon_2": "string",
+ "attacker_weapon_2_mods": 0,
+ "attacker_weapon_3": "string",
+ "attacker_weapon_3_mods": 0,
+ "attacker_offhand_weapon_1": 0,
+ "attacker_offhand_weapon_2": 0,
+ "victim_name": "string",
+ "victim_id": 0,
+ "victim_current_weapon": "string",
+ "victim_current_weapon_mods": 0,
+ "victim_weapon_1": "string",
+ "victim_weapon_1_mods": 0,
+ "victim_weapon_2": "string",
+ "victim_weapon_2_mods": 0,
+ "victim_weapon_3": "string",
+ "victim_weapon_3_mods": 0,
+ "victim_offhand_weapon_1": 0,
+ "victim_offhand_weapon_2": 0,
+ "cause_of_death": "string",
+ "distance": 0
+}';
+const headers = {
+ 'Content-Type':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/servers/{serverId}/kills',
+{
+ method: 'POST',
+ body: inputBody,
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`POST /servers/{serverId}/kills`
+
+*Post kills*
+
+Allows a Northstar server to record kills on the database
+
+> Body parameter
+
+```json
+{
+ "tone_version": "string",
+ "match_id": "string",
+ "game_mode": "string",
+ "map": "string",
+ "game_time": "14:15:22Z",
+ "player_count": 0,
+ "attacker_name": "string",
+ "attacker_id": 0,
+ "attacker_current_weapon": "string",
+ "attacker_current_weapon_mods": 0,
+ "attacker_weapon_1": "string",
+ "attacker_weapon_1_mods": 0,
+ "attacker_weapon_2": "string",
+ "attacker_weapon_2_mods": 0,
+ "attacker_weapon_3": "string",
+ "attacker_weapon_3_mods": 0,
+ "attacker_offhand_weapon_1": 0,
+ "attacker_offhand_weapon_2": 0,
+ "victim_name": "string",
+ "victim_id": 0,
+ "victim_current_weapon": "string",
+ "victim_current_weapon_mods": 0,
+ "victim_weapon_1": "string",
+ "victim_weapon_1_mods": 0,
+ "victim_weapon_2": "string",
+ "victim_weapon_2_mods": 0,
+ "victim_weapon_3": "string",
+ "victim_weapon_3_mods": 0,
+ "victim_offhand_weapon_1": 0,
+ "victim_offhand_weapon_2": 0,
+ "cause_of_death": "string",
+ "distance": 0
+}
+```
+
+Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|body|body|[Kill](#schemakill)|false|none|
+|serverId|path|string|true|none|
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|201|[Created](https://tools.ietf.org/html/rfc7231#section-6.3.2)|Created|None|
+|400|[Bad Request](https://tools.ietf.org/html/rfc7231#section-6.5.1)|Bad Request|None|
+|401|[Unauthorized](https://tools.ietf.org/html/rfc7235#section-3.1)|Unauthorized|None|
+
+
+To perform this operation, you must be authenticated by means of one of the following methods:
+Auth_Token
+
+
+weapon
+
+Everything about weapons
+
+## get-weapon-list
+
+
+
+> Code samples
+
+```javascript
+
+const headers = {
+ 'Accept':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/weapons/',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`GET /weapons/`
+
+*List Weapons*
+
+> Example responses
+
+> 200 Response
+
+```json
+[
+ {
+ "id": "string",
+ "name": "Kraber",
+ "description": "string",
+ "image": "https://static.wikia.nocookie.net/titanfall_gamepedia/images/8/8b/Icon_kraber.png"
+ }
+]
+```
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
+
+Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|[[Weapon](#schemaweapon)]|false|none|none|
+|» Weapon|[Weapon](#schemaweapon)|false|none|none|
+|»» id|[WeaponID](#schemaweaponid)|true|none|none|
+|»» name|string|false|none|none|
+|»» description|string|false|none|none|
+|»» image|string(uri)|false|none|none|
+
+
+This operation does not require authentication
+
+
+map
+
+Everything about maps
+
+## get-map-list
+
+
+
+> Code samples
+
+```javascript
+
+const headers = {
+ 'Accept':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/maps/',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`GET /maps/`
+
+*List Maps*
+
+> Example responses
+
+> 200 Response
+
+```json
+[
+ {
+ "id": "string",
+ "name": "Angel City",
+ "description": "string",
+ "image": "https://media.contentapi.ea.com/content/dam/eacom/en-us/common/articles-tf2-welcome-header.jpg.adapt.320w.jpg"
+ }
+]
+```
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
+
+Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|[[Map](#schemamap)]|false|none|none|
+|» Map|[Map](#schemamap)|false|none|none|
+|»» id|[MapID](#schemamapid)|true|none|none|
+|»» name|string|false|none|none|
+|»» description|string|false|none|none|
+|»» image|string(uri)|false|none|none|
+
+
+This operation does not require authentication
+
+
+client
+
+## get-server-list
+
+
+
+> Code samples
+
+```javascript
+
+const headers = {
+ 'Accept':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/client/servers/',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`GET /client/servers/`
+
+*Get Server list*
+
+> Example responses
+
+> 200 Response
+
+```json
+[
+ {
+ "id": 1,
+ "name": "fvnknoots 7v7"
+ }
+]
+```
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
+
+Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|*anonymous*|[[Server](#schemaserver)]|false|none|none|
+|» Server|[Server](#schemaserver)|false|none|none|
+|»» id|integer|false|none|none|
+|»» name|string|false|none|none|
+
+
+This operation does not require authentication
+
+
+## get-player-list-for-server
+
+
+
+> Code samples
+
+```javascript
+
+const headers = {
+ 'Accept':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/client/servers/{serverId}/players',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`GET /client/servers/{serverId}/players`
+
+*List Players for Server*
+
+Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|serverId|path|string|true|none|
+
+> Example responses
+
+> OK
+
+```json
+{
+ "2250487322": {
+ "kills": "16",
+ "deaths": "3"
+ },
+ "2264540539": {
+ "kills": "0",
+ "deaths": "3"
+ },
+ "2275398718": {
+ "kills": "28",
+ "deaths": "36"
+ },
+ "2279483655": {
+ "kills": "124",
+ "deaths": "80"
+ },
+ "2293751643": {
+ "kills": "88",
+ "deaths": "122"
+ },
+ "2317053736": {
+ "kills": "3",
+ "deaths": "6"
+ },
+ "2365696799": {
+ "kills": "69",
+ "deaths": "64"
+ },
+ "2369053412": {
+ "kills": "1",
+ "deaths": "4"
+ },
+ "2372259449": {
+ "kills": "2",
+ "deaths": "8"
+ },
+ "2383354003": {
+ "kills": "8",
+ "deaths": "8"
+ },
+ "2394254742": {
+ "kills": "31",
+ "deaths": "19"
+ },
+ "2420152141": {
+ "kills": "52",
+ "deaths": "34"
+ },
+ "2434511212": {
+ "kills": "2",
+ "deaths": "9"
+ },
+ "2459505766": {
+ "kills": "31",
+ "deaths": "17"
+ },
+ "2480498234": {
+ "kills": "60",
+ "deaths": "26"
+ },
+ "2547349226": {
+ "kills": "2",
+ "deaths": "1"
+ },
+ "2651468854": {
+ "kills": "37",
+ "deaths": "27"
+ },
+ "2789001756": {
+ "kills": "1",
+ "deaths": "3"
+ },
+ "2793671940": {
+ "kills": "1",
+ "deaths": "10"
+ },
+ "2808303632": {
+ "kills": "9",
+ "deaths": "14"
+ },
+ "1004339478890": {
+ "kills": "209",
+ "deaths": "75"
+ },
+ "1009631167271": {
+ "kills": "152",
+ "deaths": "79"
+ },
+ "1010859553275": {
+ "kills": "152",
+ "deaths": "95"
+ },
+ "1013394101159": {
+ "kills": "146",
+ "deaths": "157"
+ },
+ "1008532828425": {
+ "kills": "120",
+ "deaths": "160"
+ },
+ "1005930844007": {
+ "kills": "116",
+ "deaths": "71"
+ },
+ "1008777336129": {
+ "kills": "113",
+ "deaths": "62"
+ },
+ "1006452683408": {
+ "kills": "89",
+ "deaths": "118"
+ },
+ "1009306948106": {
+ "kills": "79",
+ "deaths": "77"
+ },
+ "1001539583158": {
+ "kills": "77",
+ "deaths": "54"
+ },
+ "1008553404453": {
+ "kills": "74",
+ "deaths": "41"
+ },
+ "1000785195758": {
+ "kills": "71",
+ "deaths": "97"
+ },
+ "1012146561597": {
+ "kills": "70",
+ "deaths": "67"
+ },
+ "1008048039568": {
+ "kills": "69",
+ "deaths": "43"
+ },
+ "1006792160784": {
+ "kills": "64",
+ "deaths": "84"
+ },
+ "1000243552229": {
+ "kills": "64",
+ "deaths": "82"
+ },
+ "1002847919723": {
+ "kills": "63",
+ "deaths": "42"
+ },
+ "1006547511738": {
+ "kills": "59",
+ "deaths": "29"
+ },
+ "1008296544768": {
+ "kills": "56",
+ "deaths": "63"
+ },
+ "1010475004425": {
+ "kills": "53",
+ "deaths": "28"
+ },
+ "1009683708233": {
+ "kills": "53",
+ "deaths": "127"
+ },
+ "1007916824452": {
+ "kills": "52",
+ "deaths": "38"
+ },
+ "1005789878582": {
+ "kills": "50",
+ "deaths": "41"
+ },
+ "1000208553932": {
+ "kills": "48",
+ "deaths": "40"
+ },
+ "1011886375716": {
+ "kills": "47",
+ "deaths": "27"
+ },
+ "1010766135749": {
+ "kills": "45",
+ "deaths": "56"
+ },
+ "1009353300588": {
+ "kills": "44",
+ "deaths": "18"
+ },
+ "1000563596599": {
+ "kills": "44",
+ "deaths": "47"
+ },
+ "1008076070452": {
+ "kills": "42",
+ "deaths": "33"
+ },
+ "1000170397365": {
+ "kills": "41",
+ "deaths": "33"
+ },
+ "1007384912695": {
+ "kills": "41",
+ "deaths": "55"
+ },
+ "1009289344839": {
+ "kills": "40",
+ "deaths": "91"
+ },
+ "1002547370637": {
+ "kills": "40",
+ "deaths": "21"
+ },
+ "1008848730302": {
+ "kills": "40",
+ "deaths": "78"
+ },
+ "1002965199684": {
+ "kills": "39",
+ "deaths": "40"
+ },
+ "1008704914497": {
+ "kills": "38",
+ "deaths": "21"
+ },
+ "1000680732650": {
+ "kills": "38",
+ "deaths": "21"
+ },
+ "1009020277340": {
+ "kills": "37",
+ "deaths": "43"
+ },
+ "1009001081875": {
+ "kills": "37",
+ "deaths": "57"
+ },
+ "1002862920668": {
+ "kills": "34",
+ "deaths": "26"
+ },
+ "1007927614255": {
+ "kills": "34",
+ "deaths": "61"
+ },
+ "1007344081350": {
+ "kills": "32",
+ "deaths": "54"
+ },
+ "1000689836348": {
+ "kills": "30",
+ "deaths": "24"
+ },
+ "1002365588355": {
+ "kills": "28",
+ "deaths": "32"
+ },
+ "1000599975674": {
+ "kills": "28",
+ "deaths": "18"
+ },
+ "1009981913274": {
+ "kills": "26",
+ "deaths": "16"
+ },
+ "1003950824662": {
+ "kills": "26",
+ "deaths": "13"
+ },
+ "1000474582791": {
+ "kills": "26",
+ "deaths": "32"
+ },
+ "1007213425353": {
+ "kills": "26",
+ "deaths": "44"
+ },
+ "1009295548275": {
+ "kills": "25",
+ "deaths": "41"
+ },
+ "1007246486495": {
+ "kills": "23",
+ "deaths": "26"
+ },
+ "1012332759108": {
+ "kills": "22",
+ "deaths": "21"
+ },
+ "1004355057125": {
+ "kills": "21",
+ "deaths": "54"
+ },
+ "1010246320749": {
+ "kills": "21",
+ "deaths": "23"
+ },
+ "1009763674601": {
+ "kills": "19",
+ "deaths": "21"
+ },
+ "1000991748686": {
+ "kills": "19",
+ "deaths": "14"
+ },
+ "1003495333189": {
+ "kills": "19",
+ "deaths": "32"
+ },
+ "1012863344924": {
+ "kills": "19",
+ "deaths": "28"
+ },
+ "1005030069502": {
+ "kills": "18",
+ "deaths": "24"
+ },
+ "1011188414213": {
+ "kills": "17",
+ "deaths": "13"
+ },
+ "1006943687079": {
+ "kills": "17",
+ "deaths": "28"
+ },
+ "1000314539111": {
+ "kills": "17",
+ "deaths": "13"
+ },
+ "1007803613856": {
+ "kills": "12",
+ "deaths": "19"
+ },
+ "1006068335533": {
+ "kills": "12",
+ "deaths": "16"
+ },
+ "1009495187105": {
+ "kills": "10",
+ "deaths": "6"
+ },
+ "1009388895366": {
+ "kills": "9",
+ "deaths": "41"
+ },
+ "1007511112791": {
+ "kills": "8",
+ "deaths": "11"
+ },
+ "1004230608953": {
+ "kills": "7",
+ "deaths": "6"
+ },
+ "1009058558981": {
+ "kills": "7",
+ "deaths": "8"
+ },
+ "1009752496386": {
+ "kills": "7",
+ "deaths": "35"
+ },
+ "1007983554545": {
+ "kills": "7",
+ "deaths": "4"
+ },
+ "1012165044680": {
+ "kills": "6",
+ "deaths": "4"
+ },
+ "1011679847131": {
+ "kills": "6",
+ "deaths": "11"
+ },
+ "1009810188385": {
+ "kills": "6",
+ "deaths": "6"
+ },
+ "1003340724325": {
+ "kills": "5",
+ "deaths": "2"
+ },
+ "1000250176837": {
+ "kills": "4",
+ "deaths": "4"
+ },
+ "1006902817643": {
+ "kills": "4",
+ "deaths": "8"
+ },
+ "1000436348239": {
+ "kills": "4",
+ "deaths": "3"
+ },
+ "1011584031432": {
+ "kills": "4",
+ "deaths": "6"
+ },
+ "1013302746779": {
+ "kills": "4",
+ "deaths": "10"
+ },
+ "1002319733641": {
+ "kills": "3",
+ "deaths": "8"
+ },
+ "1008766563524": {
+ "kills": "3",
+ "deaths": "5"
+ },
+ "1010590824824": {
+ "kills": "3",
+ "deaths": "6"
+ },
+ "1014450712715": {
+ "kills": "3",
+ "deaths": "15"
+ },
+ "1011819105616": {
+ "kills": "3",
+ "deaths": "11"
+ },
+ "1013339742185": {
+ "kills": "3",
+ "deaths": "11"
+ },
+ "1007720444069": {
+ "kills": "3",
+ "deaths": "6"
+ },
+ "1010050271094": {
+ "kills": "3",
+ "deaths": "9"
+ },
+ "1008220179508": {
+ "kills": "3",
+ "deaths": "17"
+ },
+ "1008335546916": {
+ "kills": "3",
+ "deaths": "7"
+ },
+ "1008176168711": {
+ "kills": "3",
+ "deaths": "10"
+ },
+ "1007793002161": {
+ "kills": "3",
+ "deaths": "14"
+ },
+ "1009137965834": {
+ "kills": "2",
+ "deaths": "9"
+ },
+ "1012089978411": {
+ "kills": "2",
+ "deaths": "10"
+ },
+ "1003566577430": {
+ "kills": "2",
+ "deaths": "9"
+ },
+ "1006446444857": {
+ "kills": "2",
+ "deaths": "1"
+ },
+ "1009129948330": {
+ "kills": "2",
+ "deaths": "2"
+ },
+ "1009320303734": {
+ "kills": "2",
+ "deaths": "4"
+ },
+ "1011425349538": {
+ "kills": "2",
+ "deaths": "7"
+ },
+ "1000082780513": {
+ "kills": "2",
+ "deaths": "28"
+ },
+ "1009059593350": {
+ "kills": "2",
+ "deaths": "12"
+ },
+ "1008930859124": {
+ "kills": "2",
+ "deaths": "3"
+ },
+ "1011062416507": {
+ "kills": "2",
+ "deaths": "15"
+ },
+ "1008322047749": {
+ "kills": "1",
+ "deaths": "5"
+ },
+ "1010909176351": {
+ "kills": "1",
+ "deaths": "3"
+ },
+ "1009015699732": {
+ "kills": "1",
+ "deaths": "9"
+ },
+ "1010938099750": {
+ "kills": "1",
+ "deaths": "10"
+ },
+ "1009920857596": {
+ "kills": "1",
+ "deaths": "3"
+ },
+ "1001248580325": {
+ "kills": "1",
+ "deaths": "2"
+ },
+ "1003395331672": {
+ "kills": "1",
+ "deaths": "0"
+ },
+ "1008850794164": {
+ "kills": "1",
+ "deaths": "1"
+ },
+ "1002970526901": {
+ "kills": "1",
+ "deaths": "10"
+ },
+ "1009585427210": {
+ "kills": "0",
+ "deaths": "7"
+ },
+ "1010044829720": {
+ "kills": "0",
+ "deaths": "2"
+ },
+ "1010302326976": {
+ "kills": "0",
+ "deaths": "2"
+ },
+ "1011336094869": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1010890839674": {
+ "kills": "0",
+ "deaths": "2"
+ },
+ "1003009344333": {
+ "kills": "0",
+ "deaths": "2"
+ },
+ "1010690831586": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1012016676172": {
+ "kills": "0",
+ "deaths": "3"
+ },
+ "1010958615370": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1010804831845": {
+ "kills": "0",
+ "deaths": "4"
+ },
+ "1014036958511": {
+ "kills": "0",
+ "deaths": "5"
+ },
+ "1013377950364": {
+ "kills": "0",
+ "deaths": "3"
+ },
+ "1003516913859": {
+ "kills": "0",
+ "deaths": "2"
+ },
+ "1005317405570": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1010373048502": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1000319933061": {
+ "kills": "0",
+ "deaths": "2"
+ },
+ "1013284789566": {
+ "kills": "0",
+ "deaths": "4"
+ },
+ "1000180555075": {
+ "kills": "0",
+ "deaths": "5"
+ },
+ "1004519819956": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1008082281599": {
+ "kills": "0",
+ "deaths": "2"
+ },
+ "1009413737635": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1003853474628": {
+ "kills": "0",
+ "deaths": "4"
+ },
+ "1013146253403": {
+ "kills": "0",
+ "deaths": "5"
+ },
+ "1010845289697": {
+ "kills": "0",
+ "deaths": "4"
+ },
+ "1007170712677": {
+ "kills": "0",
+ "deaths": "3"
+ },
+ "1011747811565": {
+ "kills": "0",
+ "deaths": "3"
+ },
+ "1008770977823": {
+ "kills": "0",
+ "deaths": "1"
+ },
+ "1006338144987": {
+ "kills": "0",
+ "deaths": "1"
+ }
+}
+```
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
+
+Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» [id]|object|false|none|none|
+|»» kills|integer|false|none|none|
+|»» deaths|integer|false|none|none|
+|»» last_seen|string(date-time)|false|none|none|
+|»» first_seen|string(date-time)|false|none|none|
+|»» max_kill_distance|number|false|none|none|
+|»» avg_kill_distance|number|false|none|none|
+
+
+This operation does not require authentication
+
+
+## get-weapons-report-for-server
+
+
+
+> Code samples
+
+```javascript
+
+const headers = {
+ 'Accept':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/client/servers/{serverId}/weapons',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`GET /client/servers/{serverId}/weapons`
+
+*Get Weapon report for server*
+
+Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|serverId|path|string|true|none|
+
+> Example responses
+
+> OK
+
+```json
+{
+ "sniper": {
+ "kills": "1180",
+ "avg_kill_distance": "806",
+ "max_kill_distance": "3454"
+ },
+ "wingman_n": {
+ "kills": "831",
+ "avg_kill_distance": "608",
+ "max_kill_distance": "2834"
+ },
+ "mastiff": {
+ "kills": "425",
+ "avg_kill_distance": "318",
+ "max_kill_distance": "1570"
+ },
+ "epg": {
+ "kills": "386",
+ "avg_kill_distance": "468",
+ "max_kill_distance": "3023"
+ },
+ "semipistol": {
+ "kills": "196",
+ "avg_kill_distance": "370",
+ "max_kill_distance": "1104"
+ },
+ "thermite_grenade": {
+ "kills": "142",
+ "avg_kill_distance": "469",
+ "max_kill_distance": "1472"
+ },
+ "softball": {
+ "kills": "139",
+ "avg_kill_distance": "435",
+ "max_kill_distance": "1303"
+ },
+ "doubletake": {
+ "kills": "136",
+ "avg_kill_distance": "852",
+ "max_kill_distance": "2618"
+ },
+ "shotgun_pistol": {
+ "kills": "135",
+ "avg_kill_distance": "439",
+ "max_kill_distance": "1419"
+ },
+ "wingman": {
+ "kills": "98",
+ "avg_kill_distance": "473",
+ "max_kill_distance": "1854"
+ },
+ "shotgun": {
+ "kills": "87",
+ "avg_kill_distance": "311",
+ "max_kill_distance": "745"
+ },
+ "pilot_emptyhanded": {
+ "kills": "65",
+ "avg_kill_distance": "44",
+ "max_kill_distance": "115"
+ },
+ "defender": {
+ "kills": "62",
+ "avg_kill_distance": "1070",
+ "max_kill_distance": "3835"
+ },
+ "satchel": {
+ "kills": "54",
+ "avg_kill_distance": "503",
+ "max_kill_distance": "1047"
+ },
+ "grenade_sonar": {
+ "kills": "43",
+ "avg_kill_distance": "491",
+ "max_kill_distance": "1205"
+ },
+ "smr": {
+ "kills": "27",
+ "avg_kill_distance": "490",
+ "max_kill_distance": "1405"
+ },
+ "grenade_electric_smoke": {
+ "kills": "8",
+ "avg_kill_distance": "527",
+ "max_kill_distance": "987"
+ },
+ "human_execution": {
+ "kills": "4",
+ "avg_kill_distance": "45",
+ "max_kill_distance": "71"
+ },
+ "fall": {
+ "kills": "1",
+ "avg_kill_distance": "876",
+ "max_kill_distance": "876"
+ },
+ "arc_launcher": {
+ "kills": "1",
+ "avg_kill_distance": "454",
+ "max_kill_distance": "454"
+ }
+}
+```
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
+
+Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» [weaponID]|object|false|none|none|
+|»» kills|integer|false|none|none|
+|»» avg_kill_distance|number|false|none|none|
+|»» max_kill_distance|number|false|none|none|
+
+
+This operation does not require authentication
+
+
+## get-player-on-server
+
+
+
+> Code samples
+
+```javascript
+
+const headers = {
+ 'Accept':'application/json'
+};
+
+fetch('https://tone.sleepycat.date/v1/client/servers/{serverId}/players/{playerId}',
+{
+ method: 'GET',
+
+ headers: headers
+})
+.then(function(res) {
+ return res.json();
+}).then(function(body) {
+ console.log(body);
+});
+
+```
+
+`GET /client/servers/{serverId}/players/{playerId}`
+
+*Get Player report for Server*
+
+Parameters
+
+|Name|In|Type|Required|Description|
+|---|---|---|---|---|
+|playerId|path|integer|true|none|
+|serverId|path|integer|true|none|
+
+> Example responses
+
+> OK
+
+```json
+{
+ "last_seen": "Mon Mar 13 2023 13:42:15 GMT+0100 (heure normale d’Europe centrale)",
+ "max_kill_distance": "1160",
+ "avg_kill_distance": "400.5000000000000000",
+ "first_seen": "Mon Mar 13 2023 13:30:13 GMT+0100 (heure normale d’Europe centrale)",
+ "deaths": "21",
+ "kills": "22",
+ "weapons": {
+ "epg": {
+ "kills": "21",
+ "deaths": "8",
+ "avg_kill_distance": "395",
+ "max_kill_distance": "1160"
+ },
+ "thermite_grenade": {
+ "kills": "1",
+ "deaths": "0",
+ "avg_kill_distance": "505",
+ "max_kill_distance": "505"
+ },
+ "mastiff": {
+ "kills": "0",
+ "deaths": "5",
+ "avg_kill_distance": "0",
+ "max_kill_distance": "0"
+ },
+ "wingman_n": {
+ "kills": "0",
+ "deaths": "8",
+ "avg_kill_distance": "0",
+ "max_kill_distance": "0"
+ }
+ }
+}
+```
+
+Responses
+
+|Status|Meaning|Description|Schema|
+|---|---|---|---|
+|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|OK|Inline|
+|404|[Not Found](https://tools.ietf.org/html/rfc7231#section-6.5.4)|Not Found|None|
+
+Response Schema
+
+Status Code **200**
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|» kills|integer|false|none|Number of kills of the user in this server|
+|» deaths|integer|false|none|Number of deaths of the user in this server|
+|» first_time_seen|string(date-time)|false|none|none|
+|» last_time_seen|string(date-time)|false|none|none|
+|» max_kill_distance|number|false|none|none|
+|» avg_kill_distance|number|false|none|none|
+|» weapons|object|false|none|none|
+|»» [weaponId]|[PrefferedWeapon](#schemaprefferedweapon)|false|none|none|
+|»»» kills|integer|false|none|none|
+|»»» deaths|integer|false|none|none|
+|»»» max_kill_distance|integer|false|none|none|
+|»»» avg_kill_distance|integer|false|none|none|
+
+
+This operation does not require authentication
+
+
+# Schemas
+
+Player
+
+
+
+
+
+
+```json
+{
+ "id": 0,
+ "name": "Legonzaur",
+ "opt-out": false,
+ "hide_TOS": false
+}
+
+```
+
+Player
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|[PlayerID](#schemaplayerid)|true|none|none|
+|name|string|false|none|none|
+|opt-out|boolean|false|none|If set to true, kills and deaths about this user won't be sent to the database|
+|hide_TOS|boolean|false|none|If set to true, TOS will be hidden when player joins a server|
+
+Weapon
+
+
+
+
+
+
+```json
+{
+ "id": "string",
+ "name": "Kraber",
+ "description": "string",
+ "image": "https://static.wikia.nocookie.net/titanfall_gamepedia/images/8/8b/Icon_kraber.png"
+}
+
+```
+
+Weapon
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|[WeaponID](#schemaweaponid)|true|none|none|
+|name|string|false|none|none|
+|description|string|false|none|none|
+|image|string(uri)|false|none|none|
+
+Map
+
+
+
+
+
+
+```json
+{
+ "id": "string",
+ "name": "Angel City",
+ "description": "string",
+ "image": "https://media.contentapi.ea.com/content/dam/eacom/en-us/common/articles-tf2-welcome-header.jpg.adapt.320w.jpg"
+}
+
+```
+
+Map
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|[MapID](#schemamapid)|true|none|none|
+|name|string|false|none|none|
+|description|string|false|none|none|
+|image|string(uri)|false|none|none|
+
+Server
+
+
+
+
+
+
+```json
+{
+ "id": 1,
+ "name": "fvnknoots 7v7"
+}
+
+```
+
+Server
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|false|none|none|
+|name|string|false|none|none|
+
+Kill
+
+
+
+
+
+
+```json
+{
+ "id": 0,
+ "server": "string",
+ "tone_version": "string",
+ "match_id": "string",
+ "game_mode": "string",
+ "map": "string",
+ "game_time": "14:15:22Z",
+ "player_count": 0,
+ "attacker_name": "string",
+ "attacker_id": 0,
+ "attacker_current_weapon": "string",
+ "attacker_current_weapon_mods": 0,
+ "attacker_weapon_1": "string",
+ "attacker_weapon_1_mods": 0,
+ "attacker_weapon_2": "string",
+ "attacker_weapon_2_mods": 0,
+ "attacker_weapon_3": "string",
+ "attacker_weapon_3_mods": 0,
+ "attacker_offhand_weapon_1": 0,
+ "attacker_offhand_weapon_2": 0,
+ "victim_name": "string",
+ "victim_id": 0,
+ "victim_current_weapon": "string",
+ "victim_current_weapon_mods": 0,
+ "victim_weapon_1": "string",
+ "victim_weapon_1_mods": 0,
+ "victim_weapon_2": "string",
+ "victim_weapon_2_mods": 0,
+ "victim_weapon_3": "string",
+ "victim_weapon_3_mods": 0,
+ "victim_offhand_weapon_1": 0,
+ "victim_offhand_weapon_2": 0,
+ "cause_of_death": "string",
+ "distance": 0
+}
+
+```
+
+Kill
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|id|integer|false|read-only|none|
+|server|string|false|read-only|none|
+|tone_version|string|false|none|none|
+|match_id|string|false|none|none|
+|game_mode|string|false|none|none|
+|map|string|false|none|none|
+|game_time|string(time)|false|none|none|
+|player_count|integer|false|none|none|
+|attacker_name|string|false|none|none|
+|attacker_id|integer|false|none|none|
+|attacker_current_weapon|string|false|none|none|
+|attacker_current_weapon_mods|integer|false|none|none|
+|attacker_weapon_1|string|false|none|none|
+|attacker_weapon_1_mods|integer|false|none|none|
+|attacker_weapon_2|string|false|none|none|
+|attacker_weapon_2_mods|integer|false|none|none|
+|attacker_weapon_3|string|false|none|none|
+|attacker_weapon_3_mods|integer|false|none|none|
+|attacker_offhand_weapon_1|integer|false|none|none|
+|attacker_offhand_weapon_2|integer|false|none|none|
+|victim_name|string|false|none|none|
+|victim_id|integer|false|none|none|
+|victim_current_weapon|string|false|none|none|
+|victim_current_weapon_mods|integer|false|none|none|
+|victim_weapon_1|string|false|none|none|
+|victim_weapon_1_mods|integer|false|none|none|
+|victim_weapon_2|string|false|none|none|
+|victim_weapon_2_mods|integer|false|none|none|
+|victim_weapon_3|string|false|none|none|
+|victim_weapon_3_mods|integer|false|none|none|
+|victim_offhand_weapon_1|integer|false|none|none|
+|victim_offhand_weapon_2|integer|false|none|none|
+|cause_of_death|string|true|none|none|
+|distance|number|false|none|none|
+
+PlayerID
+
+
+
+
+
+
+```json
+0
+
+```
+
+PlayerId
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|PlayerId|integer|false|none|none|
+
+WeaponID
+
+
+
+
+
+
+```json
+"string"
+
+```
+
+WeaponID
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|WeaponID|string|false|none|none|
+
+MapID
+
+
+
+
+
+
+```json
+"string"
+
+```
+
+MapID
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|MapID|string|false|none|none|
+
+PrefferredServer
+
+
+
+
+
+
+```json
+{
+ "server": {
+ "id": 1,
+ "name": "fvnknoots 7v7"
+ },
+ "killCount": 4988,
+ "deathCount": 4671
+}
+
+```
+
+PrefferredServer
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|server|[Server](#schemaserver)|false|none|none|
+|killCount|integer|false|none|none|
+|deathCount|integer|false|none|none|
+
+PrefferedWeapon
+
+
+
+
+
+
+```json
+{
+ "kills": 0,
+ "deaths": 0,
+ "max_kill_distance": 0,
+ "avg_kill_distance": 0
+}
+
+```
+
+PrefferedWeapon
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|kills|integer|false|none|none|
+|deaths|integer|false|none|none|
+|max_kill_distance|integer|false|none|none|
+|avg_kill_distance|integer|false|none|none|
+
+PrefferedMap
+
+
+
+
+
+
+```json
+{
+ "map": {
+ "id": "string",
+ "name": "Angel City",
+ "description": "string",
+ "image": "https://media.contentapi.ea.com/content/dam/eacom/en-us/common/articles-tf2-welcome-header.jpg.adapt.320w.jpg"
+ },
+ "killCount": 0,
+ "deathCount": 0
+}
+
+```
+
+PrefferedMap
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|map|[Map](#schemamap)|false|none|none|
+|killCount|integer|false|none|none|
+|deathCount|integer|false|none|none|
+
+TopPlayers
+
+
+
+
+
+
+```json
+{
+ "player": {
+ "id": 0,
+ "name": "Legonzaur",
+ "opt-out": false,
+ "hide_TOS": false
+ },
+ "kill_count": 0,
+ "death_count": 0
+}
+
+```
+
+TopPlayers
+
+### Properties
+
+|Name|Type|Required|Restrictions|Description|
+|---|---|---|---|---|
+|player|[Player](#schemaplayer)|false|none|none|
+|kill_count|integer|false|none|none|
+|death_count|integer|false|none|none|
+
diff --git a/package.json b/package.json
index a4d5009..5b7cbe5 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
"build": "npx tsc",
"startServer": "node out/serverMain.js",
"startClient": "node out/clientMain.js",
- "documentation": "widdershins reference/OpenAPI.yml -o reference/openapi.md --language_tabs javascript:JavaScript:request.",
+ "documentation": "widdershins reference/OpenAPI.yml -o docs/openapi.md --language_tabs javascript:JavaScript:request.",
"test": "jest"
}
}
\ No newline at end of file