Important Changes: 2017ish - userid depreciated and removed from most APIs. Use userToken instead. May 13th 2019 - ?generator= will force itself to Elite Insights regardless of option. API docs will be updated in the future to reflect this. May 13th 2019 - ?rotation_weap1 currently does nothing, Elite Insights has the toggle built into its output now Sep 5th 2020 - 'userid' completed removed from uploadContent, use userToken instead! 'identifier' removed from all JSON outputs, as it was never used. Removed documentation about 'rotation_weap1' Mar 28th 2021 - Added 'anonymous' and 'detailedwvw' params to uploadContent. Apr 4th 2021 - Added 'anonymous' and 'detailed' to 'report' to the metadata json object. [This documentation will be updated to be clearer later..] Dec 12th 2022 - Rate limiter has been changed, please make sure your uploaders are aware and respect this limit. JSON error was added for this. Mar 1st 2023 - uniqueId is currently non-functional. Hi this is the 'api' docs for dps.report == General Info == This API was designed to be entirely HTTP and JSON, so should be usable in any modern programming language without too much hassle. Params may be passed only through HTTP request query strings and are case sensitive unless otherwise noted. -> If you just want to make a simple uploading tool, please scroll down to the File Upload example below. <- == User Token == dps.report does not currently support logins. However, upon accessing the site, variable userToken will be generated and stored via cookies. This value is also used in the api and returned as "userToken" in JSON, and can be submitted via cookie or via userData= in a call. You can use this value to fetch previous uploads and access other features that will be added later. PROTECT YOUR USERTOKEN! Treat it like a password. Anyone with access to this value can look up any logs uploaded with it. See /getUserToken == CORS == For Cross-Site requests, permissive CORS limits are set on most json-enabled endpoints. However: - Allow-Credentials is turned off, a user's userToken will not be sent or accepted via cookies. - You can supply your own userToken if you'd like in requests. == Service Domains == There are THREE service domains available for the API and general site use. PLEASE ensure your application supports switching between these, as they use different networks and have different performance depending on you or your users region. https://dps.report/ - Cloudflare. Supports HTTPS. We've found this to be Generally Unreliable in Eastern European and Asian countries. http://a.dps.report/ - Imperva. Supports HTTP ONLY. Fairly reliable, use as last resort. https://b.dps.report/ - Sucuri. Supports HTTP and HTTPS. Preferred alternate service domain that supports HTTPS. == Rate Limiter == Currently a rate limit is enforced on the /uploadContent endpoint. No other endpoints have a hard limit, but please be respectful of server resources! /uploadContent - 25 requests per 60 seconds A HTTP 429 error will occur with a JSON message if you hit this limit. Example: {"error":"Rate limit exceeded. Try again in 60 seconds. Current Limit: 25 requests per 60 seconds. Contact Micca if you have a use case that needs more.","rateLimited":true,"ratePerMinute":25} This rate limit can change without prior notice during heavy load. The returned JSON will indicate what the current limits are. Please ask in our discord [ https://discord.gg/fyEynB2 ] or e-mail hi@dps.report if you need more for your particular use case. == File Uploads - /uploadContent == Endpoint URL: https://dps.report/uploadContent Params supported: [May be in query string or POST formdata] json=1 - Return only a JSON object, as defined below. [Recommend, not default] generator=ei - What log generating tool to use. [Currently only supports 'ei' for Elite Insights] userToken=% - Optional userToken to store previous uploads and future features. See User Token docs above. anonymous=false - Set to 'true' to enable anonymized reports. detailedwvw=false - Set to 'true' to enabled detailed WvW reports. This may break and return a 500 error with particularly long logs. file - File object [formdata only] Returns: - A single JSON object 'error' upon failure to generate a report; JSON object regardless of json=1 being set or not. - Embed text if json=1 is not set. - Otherwise: JSON Object: "id" = Internal dps.report ID "permalink" = Generated report URL "identifier" = Future Update "uploadTime" = Upload date, unix time format "encounterTime" = Encounter date from evtc, unix time format "generator" = Report generator tool used "generatorId" = Internal report generator id. "generatorVersion" = Internal. Report generator version. "language" = Language id from evtc. Can be en, fr, de, es, or zh. "languageId" = Internal language ID, numeric. "userToken" = Your userToken. See userToken documentation above. "error" = Error messages upon uploading, set to null if none are encountered. Report may still be generated even with this set. "encounter" = JSON Object, encounter statistics - "uniqueId" = CURRENTLY NON-FUNCTIONAL. Encounter 'unique identifier', computed from instance ids. This attempts to uniquely identify raid attempts/encounters across users. This -WILL- be set to null if an identifier cannot be uniquely generated! - "success" = If encounter was successful [boss kill] or not. - "duration" = Time in seconds of encounter. This may not be accurate with server delays and evtc logging issues. - "compDps" = Computed overall DPS of the group. - "numberOfPlayers" = Number of players in the encounter - "numberOfGroups" = Number of party/squad groups in the encounter - "bossId" = Boss ID of encounter. See https://dps.report/docs/bossIds.txt - "boss" = Boss name. - "isCm" = Is encounter Challenge Mode enabled. - "gw2Build" = GW2 client build - "jsonAvailable" = Is extra encounter data available at the /getJson endpoint "evtc" = evtc metadata object - "type" = Should always return 'evtc' - "version" = Version of ARCDPS evtc file was generated in - "bossId" = Boss ID of encounter. Same as encounter->bossId - See https://dps.report/docs/bossIds.txt "players" = Player objects, array. This may be empty on older arc versions. - "display_name" = Login name of the player. - "character_name" = Character name. - "profession" = Profession ID. See https://api.guildwars2.com/v2/professions?ids=all - "elite_spec" = Elite spec traitline ID. See https://api.guildwars2.com/v2/specializations?ids=all "report" - "anonymous" = true/false - If report was generated with anonimized fake players. - "detailed" = true/false - If report was generated with detailed players. Example: Submit - https://dps.report/uploadContent?json=1&generator=ei - file: 20200903-190501.zevtc Return - { "id": "erhi-20200903-190501", "permalink": "https://dps.report/erhi-20200903-190501_arkk", "uploadTime": 1599308575, "encounterTime": 1599174067, "generator": "Elite Insights", "generatorId": 1, "generatorVersion": 2, "language": "en", "languageId": 0, "evtc": { "type": "EVTC", "version": "20200815", "bossId": 17759 }, "players": { "Micca Feralchain": { "display_name": "Mickathia.8701", "character_name": "Micca Feralchain", "profession": 3, "elite_spec": 57 }, "Aestia Honorheart": { "display_name": "Bloosh.9745", "character_name": "Aestia Honorheart", "profession": 1, "elite_spec": 62 }, "Reigna Adeptpaws": { "display_name": "Jun.9371", "character_name": "Reigna Adeptpaws", "profession": 5, "elite_spec": 7 }, "Serella Novasight": { "display_name": "Nysha.7021", "character_name": "Serella Novasight", "profession": 9, "elite_spec": 63 }, "Jarett Dragonheart": { "display_name": "Drgn Gold.4835", "character_name": "Jarett Dragonheart", "profession": 4, "elite_spec": 55 } }, "encounter": { "uniqueId": "f7pO5gl9mUV58RjWFxf2+g", "success": true, "duration": 234, "compDps": 47339, "numberOfPlayers": 5, "numberOfGroups": 1, "bossId": 17759, "boss": "Arkk", "isCm": true, "gw2Build": 105843, "jsonAvailable": true }, "error": null, "userToken": "" //Intentionally left blank in this example } Notes: Background the upload process. dps.report will stall http threads until a permalink can be generated. This can take seconds to several minutes. During exceptionally heavy loads processing can take up to 15 minutes [our internal timeout]. Make sure your application will allow a call to wait at least that long. == Previous Uploads - /getUploads == Endpoint URL: https://dps.report/getUploads Fetch previous uploads for a given user's userToken. Params: page=1 - This call only returns a set number of results per 'page'. Increase this parameter by 1 to get the next set. perPage=25 - How many results per 'page'. Max of 1000. userToken=% - User Token. See above. Required for this call to be of any use, but can be passed via cookie. since=1 - Limit reports to only those uploaded after a set time. Takes a unix timestamp sinceEncounter= - Limit reports by encounter time, after a set time. Takes a unix timestamp untilEncounter= - Limit reports by encounter time, up to a set time. Takes a unix timestamp unique=1 - Filter out non-unique uploads. IE duplicate uploads are removed and only fetch the latest. Note there is currently a bug which counts other users uploading the same file as your duplicate. This will be fixed in a later update. Returns: A JSON object of basic information and upload objects. Generally sorted by uploadTime descending. JSON Object: "pages" = number of pages total, use with page= "currentTime" = Server local time as a unix timestamp. "foundUploads" = Number of uploads that match your parameters. "totalUploads" = Total uploads of the set userToken. "userToken" = User Token, as described in User Token docs above. "uploads" = Upload Objects Array JSON Upload Object: JSON Object: "id" = Internal dps.report ID "permalink" = Generated report URL "identifier" = Future Update "uploadTime" = Upload date, unix time format "encounterTime" = Encounter date from evtc, unix time format "generator" = Report generator tool used "generatorId" = Internal report generator id. "generatorVersion" = Internal. Report generator version. "language" = Language id from evtc. Can be en, fr, de, es, or zh. "languageId" = Internal language ID, numeric. "userToken" = Your userToken. See userToken documentation above. "error" = Error messages upon uploading, set to null if none are encountered. Report may still be generated even with this set. "encounter" = JSON Object, encounter statistics - "uniqueId" = CURRENTLY NON-FUNCTIONAL. Encounter 'unique identifier', computed from instance ids. This attempts to uniquely identify raid attempts/encounters across users. This -WILL- be set to null if an identifier cannot be uniquely generated! - "success" = If encounter was successful [boss kill] or not. - "duration" = Time in seconds of encounter. This may not be accurate with server delays and evtc logging issues. - "compDps" = Computed overall DPS of the group. - "numberOfPlayers" = Number of players in the encounter - "numberOfGroups" = Number of party/squad groups in the encounter - "bossId" = Boss ID of encounter. See https://dps.report/docs/bossIds.txt - "gw2Build" = GW2 client build - "jsonAvailable" = Is extra encounter data available at the /getJson endpoint "evtc" = evtc metadata object - "type" = Should always return 'evtc' - "version" = Version of ARCDPS evtc file was generated in - "bossId" = Boss ID of encounter. Same as encounter->bossId - See https://dps.report/docs/bossIds.txt "players" = Player objects, array. This may be empty on older arc versions. - "display_name" = Login name of the player. - "character_name" = Character name. - "profession" = Profession ID. See https://api.guildwars2.com/v2/professions?ids=all - "elite_spec" = Elite spec traitline ID. See https://api.guildwars2.com/v2/specializations?ids=all "report" - "anonymous" = true/false - If report was generated with anonimized fake players. - "detailed" = true/false - If report was generated with detailed players. "tempApiId" = Internal sorting ID given to upload. Will change with new uploads on this user. Provided on the offchance it may be useful to GUI devs. == User Token - /getUserToken == Endpoint URL: https://dps.report/getUserToken Gets current or generates a new userToken for use in uploads. This is generated automatically if an api call is made without a token, but is provided for convinence. Params: userToken=% - Not required. Generates a new token if none passed or is invalid. Returns: JSON Object "userToken" = User token. See User Token docs above. == Report Metadata - /getUploadMetadata == Gets metadata about a previous upload, by id OR permalink. This endpoint is still under development and some return parameters may change in the future. Endpoint URL: https://dps.report/getUploadMetadata Params: id=% - Gets report by ID. permalink=% - Gets report by permalink/url. Returns: JSON Object: "id" = Internal dps.report ID "permalink" = Generated report URL "identifier" = Future Update "uploadTime" = Upload date, unix time format "encounterTime" = Encounter date from evtc, unix time format "generator" = Report generator tool used "generatorId" = Internal report generator id. "generatorVersion" = Internal. Report generator version. "language" = Language id from evtc. Can be en, fr, de, es, or zh. "languageId" = Internal language ID, numeric. "userToken" = Your userToken. See userToken documentation above. "error" = Error messages upon uploading, set to null if none are encountered. Report may still be generated even with this set. "encounter" = JSON Object, encounter statistics - "uniqueId" = Encounter 'unique identifier', computed from instance ids. This attempts to uniquely identify raid attempts/encounters across users. This -WILL- be set to null if an identifier cannot be uniquely generated! - "success" = If encounter was successful [boss kill] or not. - "duration" = Time in seconds of encounter. This may not be accurate with server delays and evtc logging issues. - "compDps" = Computed overall DPS of the group. - "numberOfPlayers" = Number of players in the encounter - "numberOfGroups" = Number of party/squad groups in the encounter - "bossId" = Boss ID of encounter. See https://dps.report/docs/bossIds.txt - "gw2Build" = GW2 client build - "jsonAvailable" = Is extra encounter data available at the /getJson endpoint "evtc" = evtc metadata object - "type" = Should always return 'evtc' - "version" = Version of ARCDPS evtc file was generated in - "bossId" = Boss ID of encounter. Same as encounter->bossId - See https://dps.report/docs/bossIds.txt "players" = Player objects, array. This may be empty on older arc versions. - "display_name" = Login name of the player. - "character_name" = Character name. - "profession" = Profession ID. See https://api.guildwars2.com/v2/professions?ids=all - "elite_spec" = Elite spec traitline ID. See https://api.guildwars2.com/v2/specializations?ids=all "report" - "anonymous" = true/false - If report was generated with anonimized fake players. - "detailed" = true/false - If report was generated with detailed players. == Encounter Data JSON - /getJson == Gets extra JSON-encoded encounter data about a report, if available. This is Elite Insights' JSON output. See https://github.com/baaron4/GW2-Elite-Insights-Parser Endpoint URL: https://dps.report/getJson Params: id=% - Gets report by ID. permalink=% - Gets report by permalink/url. Returns: JSON Object See https://github.com/baaron4/GW2-Elite-Insights-Parser