Red Hammer Studios REST API v 2.4.5.0

The following is the description of the Red Hammer Studios web API. It can be used to retrieve information that is stored in the database. This information can be used by custom tools, such as downloaders, to always have consistent and up-to-date information straight from the most reliable source.

The calls to the routes shout be all made through the GET method unless otherwise specified.

Calls to collection routes such as

/Activity
also support the following query parameters:

Parameter Type Description
page positive integer Specifies the page of results to get. Minimum value is 1. This parameter is required to enable pagination. Other pagination parameters are ignored if this is not present and all records are returned.
limit positive integer The maximum number of records to return in one page if pagination is enabled. If not specified the value is 10.
order string The parameter by which the results are ordered. The value can be any parameter from the Entity's Returned Parameters table. If not specified the value is the primary key of the Entity.

Sample valid queries: /Activity?page=1 returns the first 10 records, /Activity?limit=30&page=2 returns the second set of 30 records, /Activity?limit=30&page=2&order=action returns the second set of 30 records ordered by "action" property.

The responses are structured using the JSend specification as outlined in OmniTI Labs JSend Whitepaper. JSend focuses on application-level (as opposed to protocol- or transport-level) messaging which makes it ideal for use in REST-style applications and APIs. A sample successfull JSend response:

{"status":"success","data":{"categories":[{"name":"Updaters","id":5},{"name":"Missions","id":6}]}}

or, in case of a single object:

{"status":"success","data":{"category":{"name":"Updaters","id":5}}}

JSend responses can have 3 statuses: "success", "fail" - There was a problem with the data submitted, or some pre-condition of the API call wasn't satisfied or "error" when an error occurred in processing the request, i.e. an exception was thrown. The HTTP Status Code in the response header is also used to indicate the nature of the "fail" result (see possible codes under each concept). The "data" object in a "fail" response contains information about the point of failure:

{"status":"fail","data":{"type":"The requested type Categoryz does not exist."}}

An "error" response does not contain a "data" object but rather a "message" which is of type String and contains information on the error, comprising of the raised Exception and the message of the Exception. This response can only be expected if there was a database failure.

Article #

Description

The Article represents a Blog article.

Routes

Route Method Description
/Article GET Gets the full listing of this entity.
/Article/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "article": {
      "userId": 10,
      "title": "Behind RHS Armor",
      "summary": "Many players who are using the RHS mod for ARMA may wonder how our custom vehicle armor and ammunition systems work and what it takes to create them. Some may even confuse mechanics with game bugs. The following blog posts will cover both the research and implementation of the gathered data into the game.\r\n\r\n%%I111%%",
      "full": "Many players who are using the RHS mod for ARMA may wonder how our custom vehicle armor and ammunition systems work and what it takes to create them. Some may even confuse mechanics with game bugs.The following blog posts will cover both the research and implementation of the gathered data into the game.\r\n\r\n%%I111%%\r\n\r\n##Part 1: Research Phase##\r\n\r\nIn order to achieve an authentic depiction, we have to dig deep with our research. Sometimes this phase ends up being more difficult and complex than initially anticipated. Most of the research time goes towards the protection systems of the modern combat vehicles, as well as their performance, their ammunition systems, and connected components that influence their field behavior.\r\n\r\nOur primary and most efficient source of information is still literature, and for this very reason we try to get access to the most comprehensive books available on the subject. When it comes to United States Forces vehicles, we look for information in _Richard P. Hunnicutt’s_ series which are dedicated to the western/nato vehicles. The author’s work is absolutely fantastic as he provides a broad and detailed insight on the subject of current fielded military vehicles. For the Armed Forces of the Russian Federation, we look for _Mikhail Baryatinsky_ books such as _Основной танк Т-72_._ Уральская броня против НАТО_. The information available here is one of the most accurate from the existing russian literature \r\n\r\n%%I112%%\r\n\r\nBesides books, there are other sources we can approach. Contrary to popular belief, the internet is the second best resource out there depending if one knows where to find the accurate and credible people and places for to discuss these matters. Some of the better sources are these forums: [Tanknet](http://www.tank-net.com/forums/index.php?act=idx) and [СИЛА РОССИИ](http://otvaga2004.mybb.ru/) .  Furthermore, certain specific details can also be found in public archives such as [Defense Technical Information Center](http://www.dtic.mil/dtic/).\r\n\r\nThe third resource available is photographs and videos that are either privately or publicly available. These can, at the very least, provide a general idea how a specific assembly works in reality and together with factual data gathered from the other two sources, form a pretty accurate and reliable overall picture of the combat capability, protection available, and expected battlefield performance.\r\n\r\nIf we were to take US _M1A1_ and _M1A2_ MBTs as examples, the first fact that is of interest to us is the thickness of their armor. A starting point is to look for the public data available regarding their composite armor and its disposition (it protects front \r\nand sides of turret as well as the hulls front area). While we cannot be 100% certain without measuring the real thing (which would be pretty difficult without stripping it down to individual parts), we can narrow it down by knowing where the armor module starts and where it ends. Due to the way the armor system is designed (modular approach, based on inserts that are installed into cavities of the turret and hull) this can be achieved by visually searching for the weld lines, providing the overall dimensions and position of the mentioned cavity. However, this information is only partly accurate because it doesn’t provide hard data regarding thickness of the backplate\r\n\r\n%%I117%%\r\n\r\nThe photo above shows M1 tanks being shipped from _Anniston Army Depot_ to _Joint System Manufacturing Center_, where the tanks are due for upgrades. There are visible weld lines on the top of the turret that provide insight to where the special armor inserts begin.\r\n\r\n%%I118%%\r\n\r\nTo estimate their ending part and determine the cavity shape and size, inside images such as the above without any other equipment installed helps out quite a bit, being able to tell end of the armor inserts. By comparing the exterior weld lines with the interior ones we can determine the actual thickness of the inserts.\r\n\r\nThe real data is classified by _OPSEC_, but based on public data available and declassified information (weight, dimensions, combat armor performance) together with the above workflow, we can determine pretty accurately most of the the missing parts and paint the overall image of any particular vehicle.\r\n\r\n%%I119%%\r\n\r\nThe above is an estimate based on the research work done on the M1, and while it might not be 100% correct, it should be as close as is possible to the real data.\r\n\r\nto be continued...",
      "isPublished": true,
      "id": 5,
      "createdOn": "2016-02-06T22:21:27",
      "modifiedOn": "2017-01-19T19:02:30"
    }
  }
}

Returned Parameters

Parameter Type Description
userId Int32 The id of the User that wrote this Article.
title String The title of the Article.
summary String The summary text of the Article. In Markdown.
full String The full text of the Article. In Markdown.
isPublished Boolean Indicates whether the Article is published and visible to the public.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Category #

Description

The Category allows for sorting of Files for download. Logical grouping allows for better arrangement of the downloads page, filtered listings and and any other listed representation of File.

Routes

Route Method Description
/Category GET Gets the full listing of this entity.
/Category/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

Returned Parameters

Parameter Type Description
name String The name of the Category.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

ClassDocumentationClass #

The call to the collective route /ClassDocumentationClass/ will result in a very large and pretty useless response. Use instead the call to ClassDocumentationHeader to figure out the top level classes and query them one by one with ClassDocumentationClass/{id}

Description

The Class Documentation Class represents a class node of the class documentation.

Routes

Route Method Description
/ClassDocumentationClass GET Gets the full listing of this entity.
/ClassDocumentationClass/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

No sample response is available for this entity.

Returned Parameters

Parameter Type Description
headerId Guid The id of the ClassDocumentationHeader that this class belongs to.
inherits String The literal name of the ClassDocumentationClass that this class inherits from.
containmentParentId Guid The id of the ClassDocumentationClass that contains this class.
contained List`1 The ClassDocumentationClasses directly contained by this class.
inheritanceClasstIid Guid The id of the ClassDocumentationClass that this class inherits from.
inherited List`1 Gets the list of classes that inherit this class.
remark String Any comment that comes with this class.
properties List`1 The list of properties of this class.
name String The Name of the class.
id Guid The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

ClassDocumentationHeader #

Description

The Class Documentation Header represents a root node of the class documentation of a specific pack or a mod.

Routes

Route Method Description
/ClassDocumentationHeader GET Gets the full listing of this entity.
/ClassDocumentationHeader/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

No sample response is available for this entity.

Returned Parameters

Parameter Type Description
name String The Name of the Header. Usually represents the name of the mod.
version String The Version of the Header. Usually represents the version of the mod.
description String The description.
topLevelFilters String The list of top level filters. Represents alll classes which were included in the docs.
bottomLevelFilters String The list of bottom level filters. Represents the names of nested classes which were removed.
propertyFilters String The list of property filters. The names of properties that were included in the documentation.
topLevelClassIds List`1 The list of ids that represent the top level classes.
id Guid The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

ClassDocumentationProperty #

The call to the collective route /ClassDocumentationProperty/ will result in a very large and pretty useless response. Use instead the call to ClassDocumentationClass/{id} which will already return all the needed ClassDocumentationProperties.

Description

The Class Documentation Property represents a property node of the class documentation.

Routes

Route Method Description
/ClassDocumentationProperty GET Gets the full listing of this entity.
/ClassDocumentationProperty/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

No sample response is available for this entity.

Returned Parameters

Parameter Type Description
name String The name.
value String The value assigned to this property.
parentId Guid The id of the parent ClassDocumentationClass.
remark String Any comment that comes with this property.
id Guid The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

DummyEntity #

Description

The DummyEntuty allows for categorization of User">DummyUsers.

Routes

Route Method Description
/DummyEntity GET Gets the full listing of this entity.
/DummyEntity/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "dummyEntity": {
      "name": "Babies",
      "id": 6,
      "createdOn": "2015-06-14T21:16:11",
      "modifiedOn": "2015-06-14T21:16:11"
    }
  }
}

Returned Parameters

Parameter Type Description
name String The name.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

DummyUser #

Description

The User">DummyUser represents a user that is listed on the Team page but is not part of Blacksmith.

Routes

Route Method Description
/DummyUser GET Gets the full listing of this entity.
/DummyUser/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "dummyUser": {
      "username": "badger",
      "entityId": 3,
      "usergroupId": 1,
      "id": 5,
      "createdOn": "2015-06-13T18:47:31",
      "modifiedOn": "2015-06-13T18:47:31"
    }
  }
}

Returned Parameters

Parameter Type Description
username String The username of the dummy user.
entityId Int32 The id of the DummyEntity that this user is categorized in.
usergroupId Int32 The id of the Usergroup assigned to this user.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

FAQEntry #

Description

A Frequently Asked Question entry. Eases the pain of having to constantly write the same answer to questions that have been already asked. Has a question and an answer.

Routes

Route Method Description
/FAQEntry GET Gets the full listing of this entity.
/FAQEntry/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "faqEntry": {
      "question": "Will you make XXX?",
      "answer": "No idea. We have a huge list of things we want to make, but absolutely no idea if we will get a chance to make them all.",
      "id": 1,
      "createdOn": "2015-03-22T16:21:37",
      "modifiedOn": "2018-03-17T11:29:58"
    }
  }
}

Returned Parameters

Parameter Type Description
question String A Markdown flavored question.
answer String A Markdown flavored answer.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

File #

Description

A downloadable, categorized File. On the website it represents a downloadable entity that is not tied to any perticular Mod or Version. This could be mission packs, wallpapers, software etc.

Routes

Route Method Description
/File GET Gets the full listing of this entity.
/File/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

Returned Parameters

Parameter Type Description
text String The short,descriptive name of the file. Also the usually the contextual representative string when the file is turned into a link or a button.
description String The Markdown flavored description of the file. Short, descriptive paragraph detailing what the File contains.
path String The path to the File. This represents where the file can be downloaded from. Files have external FTP paths.
dependencies String The dependencies of the File, represented by a list of addons that the File requires in order to run.
categoryId Int32 The Category that this file is sorted under.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Image #

Description

An image entity. Provides the image file name and the relative path to the image.

Routes

Route Method Description
/Image GET Gets the full listing of this entity.
/Image/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "image": {
      "filename": "62104e5f51beb6f5f41ccd99a5bb812b.png",
      "url": "/Content/Images/62104e5f51beb6f5f41ccd99a5bb812b.png",
      "id": 97,
      "createdOn": "2015-11-21T21:40:29",
      "modifiedOn": "2015-11-21T21:40:29"
    }
  }
}

Returned Parameters

Parameter Type Description
filename String The filename of the Image.
url String The relative path to the Image.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Key #

Description

A Key represents an ingame bikey file connected to a certain Version of a Mod. A Key is used to protect servers against untrusted addons. The Key entity in this instance presents a way to download it.

Routes

Route Method Description
/Key GET Gets the full listing of this entity.
/Key/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "key": {
      "path": "ftp://ftp.rhsmods.org/beta/keys/rhsafrf.0.3.8.bikey",
      "id": 5,
      "createdOn": "2015-06-11T20:35:23",
      "modifiedOn": "2015-06-11T20:35:23"
    }
  }
}

Returned Parameters

Parameter Type Description
path String The path to the Key. This represents where the Key can be downloaded from. Keys have external FTP paths.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Mirror #

Description

An alternative download link connected to a Version. The link represents an external path.

Routes

Route Method Description
/Mirror GET Gets the full listing of this entity.
/Mirror/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

Returned Parameters

Parameter Type Description
text String The text description of the Mirror. Usually the name of the resource that provides the path.
path String The path to the Mirror. This is an external url.
versionId Int32 The unique id of the Version that this mirror is for.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Mod #

Description

The Mod entity, encompasses all information about a mod. This information is not subject to change usually, and only the list of Versions grows.

Routes

Route Method Description
/Mod GET Gets the full listing of this entity.
/Mod/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "mod": {
      "name": "RHS: Armed Forces of the Russian Federation",
      "shortname": "RHS: AFRF",
      "description": "# Introduction\r\nRussian Federation armed forces brought to Arma 3 in full glory! Dozens of vehicles of every variety, units and weapons, all modeled and textured to the finest details and packed with features.\r\n\r\n# Content\r\nThe mod contains a a large array of content representing almost all branches of the Russian military. When you download the pack this is what you can expect to find inside:\r\n\r\n## Units\r\n- Several scratch built, accurate uniforms in various camo patterns.\r\n- Bulletproof and loadout vests like the 6B13, 6B23 and 9Sh92.\r\n-  Headgear, such as the 6B27 and ZSh-7A.\r\n- New custom backpacks.\r\n\r\n## Vehicles\r\n- The whole line of BTR APC's.\r\n- Infantry Fighting Vehicles such as the BMP and BMD series.\r\n- Russian T series tanks as well as the more exotic 2S25 Sprut-SD.\r\n- Artillery, conventional as well as rocket. Also some nukes.   \r\n- Choppers and planes, transport and attack versions.\r\n- Soft bodied cars and trucks.\r\n\r\n## Weapons\r\n- AK rifles with a large selection of attachments.\r\n- Sniper rifles.\r\n- Various RPG models.\r\n\r\n## Statics\r\n- Radars and supporting vehicles\r\n\r\n# Features\r\nThe mod doesn't just come with content. This is after all a total modification! Expect to see the following things:\r\n- Carefully crafted and fully functional Fire Control Systems for vehicles.\r\n- Fire From Vehicles added where appropriate.\r\n- Conformity to the newest features present in Arma 3 (bipods, slingloading etc.)\r\n- Interaction with weapons and vehicles.\r\n- New, realistic effects.\r\n- Custom and random decals in the form of emblems and vehicle numbers.\r\n- And many many more...\r\n\r\n# Media\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
", "isVisible": true, "trailer": "1lmI_5iwE-A", "trailer2": "5xY-mthdOfc", "game": "Arma 3 v1.50+", "gameshort": "Arma 3", "changelog": "ftp://ftp.rhsmods.org/beta/changelogs/afrf/CHANGELOG.txt", "readme": "ftp://ftp.rhsmods.org/beta/changelogs/afrf/README.md", "mapRotationX": -105, "mapRotationY": 0, "mapCenterX": -10, "mapCenterY": 65, "imageId": 55, "id": 1, "createdOn": "2015-09-13T23:02:59", "modifiedOn": "2017-01-17T07:25:25" } } }

Returned Parameters

Parameter Type Description
name String The proper, full, name of the Mod.
shortname String The shortname of the Mod. Can be used in the website routs to resolve the mod that is queried.
description String The full description of the mod.
isVisible Boolean A value indicating whether the mod is visible to the public.
trailer String The YouTube code to the trailer.
trailer2 String The YouTube code to the trailer.
game String The full name of the game that the mod is for. Includes the minimum required version of the game.
gameshort String The short name of the game that the mod is for. Includes the minimum required version of the game.
changelog String The path to the changelog. This represents an external FTP path located in the main release folder. Does not need to change for every release.
readme String The path to the readme. This represents an external FTP path located in the main release folder. Does not need to change for every release.
mapRotationX Int32 The map rotation X value for JS3D.
mapRotationY Int32 The map rotation Y value for JS3D.
mapCenterX Int32 The map center X value for JS3D.
mapCenterY Int32 The map center Y value for JS3D.
imageId Int32 The id of the Image used for the logo of this Mod.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Modfile #

Description

A specific type of File that is explicitely connected to a Mod Version. A Modfile can only be found on specific Mod pages and never by themselves.

Routes

Route Method Description
/Modfile GET Gets the full listing of this entity.
/Modfile/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

Returned Parameters

Parameter Type Description
text String The short and concise name of the Modfile. Used in link text and headers.
path String The path to the Modfile. This represents where the file can be downloaded from. Modfiles have external FTP paths.
description String The short paragraph description of the Modfile. Used in tooltips in download links.
versionId Int32 The Mod Version id that this Modfile is linked to.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Page #

Description

The Page. Could contain any kind of static content.

Routes

Route Method Description
/Page GET Gets the full listing of this entity.
/Page/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

No sample response is available for this entity.

Returned Parameters

Parameter Type Description
stub String The unique short stub identifier. A mirror property for the id.
link String The link to the page.
isPrivate Boolean Indicates whether this page is private or not.
isPublished Boolean Indicates whether this page is private or not.
title String The ititle of the Page.
content String The markdown flavored content.
id String The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

User #

Description

The User represents a physical person or a bot that is registered on Blacksmith.

Routes

Route Method Description
/User GET Gets the full listing of this entity.
/User/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "user": {
      "username": "Janus",
      "usergroupId": 3,
      "description": "",
      "location": "",
      "yearJoined": 2014,
      "imageId": null,
      "latitude": null,
      "longitude": null,
      "id": 5,
      "createdOn": "2014-11-03T02:19:53",
      "modifiedOn": "2014-11-24T21:15:16"
    }
  }
}

Returned Parameters

Parameter Type Description
username String The username.
usergroupId Int32 The id of the Usergroup that this User has assigned.
description String The short description of the user.
location String The location.
yearJoined Int32 The year of joining the RHS.
imageId Nullable`1 The id of the Image that is used as the Avatar of this User. Nullable. If `null` then an avatar is generated.
latitude Nullable`1 The location Latitude for map representation. Nullable.
longitude Nullable`1 The location longitude for map representation. Nullable.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Usergroup #

Description

The Usergroup allows to categorize Users.

Routes

Route Method Description
/Usergroup GET Gets the full listing of this entity.
/Usergroup/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "usergroup": {
      "name": "Developer",
      "id": 5,
      "createdOn": "2014-11-03T00:33:37",
      "modifiedOn": "2014-11-03T00:33:37"
    }
  }
}

Returned Parameters

Parameter Type Description
name String The name of the Usergroup.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

Version #

Description

A Version is a release entity of a Mod. All mods are always released on the same day and have the same version number for ease of tracking bugs. A Version is uniquelly identified by its number.

Routes

Route Method Description
/Version GET Gets the full listing of this entity.
/Version/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "version": {
      "number": "0.3.6",
      "modId": 1,
      "isObsolete": true,
      "isCurrent": false,
      "keyId": 2,
      "releaseDate": "2015-02-27T00:00:00",
      "id": 1,
      "createdOn": "2015-02-27T00:57:20",
      "modifiedOn": "2015-04-19T22:36:43"
    }
  }
}

Returned Parameters

Parameter Type Description
number String The Version number. This numbering follows the following pattern: major.minor.patch.hotfix Every release usually increments the Patch number from 1 to 9 at which point the minor number is increased. If a hotfix is released between new versions, the hotfix number is appended and incremented if needed. If the patch does not have a hotfix, the hotfix number is omitted.
modId Int32 The id of the Mod that this Version is linked to and represents a release for.
isObsolete Boolean The boolean indicating whether this version is obsolete or not. When a new Version is released, that version becomes the Current and all the rest become Obsolete. An obsolete version cannot be Current and vice versa.
isCurrent Boolean The boolean indicating whether this Version is current or not. When a new Version is released, that version becomes the Current and all the rest become Obsolete. An obsolete version cannot be Current and vice versa.
keyId Int32 The unique id of the Key that this Version requires to play on public servers.
releaseDate DateTime The release date of this Version.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

WikiCategory #

Description

The WikiCategory allows for sorting of WikiPages. Logical grouping allows for better arrangement of the wiki.

Routes

Route Method Description
/WikiCategory GET Gets the full listing of this entity.
/WikiCategory/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "wikiCategory": {
      "parentId": null,
      "stub": "usaf",
      "title": "United States Armed Forces",
      "id": 8,
      "createdOn": "2015-05-24T13:18:55",
      "modifiedOn": "2015-06-09T23:37:20"
    }
  }
}

Returned Parameters

Parameter Type Description
parentId Nullable`1 The id of the parent WikiCategory. Nullable. If `null`, then this is a root WikiCategory.
stub String The stub. A shortname representation of the WikiCategory. Must be unique.
title String The title.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top

WikiPage #

Description

The WikiPage

Routes

Route Method Description
/WikiPage GET Gets the full listing of this entity.
/WikiPage/{id} GET Gets one instance of this entity based on the id.

Sample Request

GET

Sample Response

{
  "status": "success",
  "data": {
    "wikiPage": {
      "categoryId": 14,
      "stub": "bmp1",
      "title": "BMP-1",
      "content": "# Description\r\n\r\nThe **BMP-1** is the driving force behind the development of tactics and equipment in the post-Great Patriotic War period was the theory of Deep Battle. In this conceptualization of warfare, large manouevre units such as brigades, divisions and corps would operate within the enemy's operational depth, striking at tactical and operational reserves, artillery, logistics assets, headquarters and even strategic centers of gravity. The keystone of this concept was high mobility, resulting in an emphasis on the protected, mobile firepower of the tank and on the use of aircraft and airborne forces. Because Deep Battle had been pioneered in the period 1920-1938, the concept did not include new post-war technologies such as the helicopter or missiles. \r\n\r\n%%I30%%\r\n\r\n# Fire Control System\r\n\r\n## 1PN22M2\r\n\r\nThe BMP-1 has a simple \"FCS\" (optic system) with a scale that can be used to measure distances comparing it with a human height. On left \r\n\r\nBmp1fcs1.jpg\r\n\r\nThe key + switch to night vision (use - to return to standard sight).\r\n\r\nBmp1fcs2.jpg\r\n\r\n> NOTE: While using the night vision mode you are unable to change the elevation, nor have more reference than the simple crosshair.\r\n\r\n## 9K11 Maljutka\r\n\r\nAfter launch, missile is fully controlled with mouse. To avoid unwanted movement, damage will be temporarily applied to turret. If you need to do turret adjustment midflight then press Left Shift to temporarily enable turret again.\r\n\r\nMissile control is dependent on wind force & currently MCLOS is scripted only for players, meaning AI will achieve much higher accuracy. \r\n\r\nAfter shot is done, manual reload is necessary which will block turret for around 30 seconds.\r\n\r\n# Key spreadsheet\r\n\r\n| Action            | Key         | Description                         |\r\n|-------------------|-------------|-------------------------------------|\r\n| Next optic        | + on numpad | Switch to next optic mode           |\r\n| Previous optic    | - on numpad | Switch to previous optic mode       |\r\n| Turret Adjustment | Left Shift  | Unlock turret during MCLOS guidance |\r\n\r\n\r\n# External Stowage\r\n\r\nAll Russian BMP’s have random stowage by default. This consists of 3 hanging ammo boxes on the left, 3 on the right, a log on the back or on the left or no log at all. Placing the following line in the init field in the editor:\r\n\r\nTo remove all stowage:\r\n\r\n```\r\nhabarScr = [this,0] execVM “\\rhsafrf\\addons\\rhs_c_bmd\\scripts\\bgr_bmd_habar.sqf”;\r\n```\r\nTo enable all stowage:\r\n\r\n```\r\nhabarScr = [this,1] execVM “\\rhsafrf\\addons\\rhs_c_bmd\\scripts\\bgr_bmd_habar.sqf”;\r\n```\r\nTo enable random stowage:\r\n\r\n```\r\nhabarScr = [this,2] execVM “\\rhsafrf\\addons\\rhs_c_bmd\\scripts\\bgr_bmd_habar.sqf”;\r\n```\r\nTo fully customize the stowage:\r\n\r\n```\r\nhabarScr = [this,3,[0,1,0,1,1,0,”left”]] execVM “\\rhsafrf\\addons\\rhs_c_bmd\\scripts\\bgr_bmd_habar.sqf”;\r\n```\r\nwhere the array `[0,1,0,1,1,0,”left”]` describes:\r\n\r\n- The first three digits - the three left ammo crates, starting with the front. 0 - disabled, 1 - enabled.\r\n\r\n- The second set of three digits - the three right ammo crates.\r\n\r\n- The last string concerns the wooden log and can be:\r\n\r\n“none” - no log\r\n\r\n“back” - back log is displayed\r\n\r\n# Snorkel\r\n\r\nYou might want to animate the snorkel. This may be done with the following animation command:\r\n\r\n```\r\n_bmp animate [\"RHS_BMP1_Snorkel\",X]; _bmp animate [\"RHS_BMP1_HT_lemez\",X];\r\n``` \r\n```\r\n_bmp animate [\"RHS_BMP1_HT_lemez_B\",X]; _bmp animate [\"RHS_BMP1_HT_lemez_A\",X]\r\n```\r\nwhere `X` should be either 1 (extend) or 0 (retract).",
      "author": "Szabó \"archbishop lazarus\" Gergő",
      "isListed": true,
      "id": 5,
      "createdOn": "2015-05-24T23:33:14",
      "modifiedOn": "2018-08-14T19:54:12"
    }
  }
}

Returned Parameters

Parameter Type Description
categoryId Int32 The id of the parent WikiCategory.
stub String The unique short stub identifier.
title String The ititle of the WikiPage.
content String The markdown flavored content.
author String The author of the addon listed on the page.
isListed Boolean A value indicating whether the WikiPage is listed for public view.
id Int32 The unique identifier of the entity. This identifier is used through out this API to query the instances.
createdOn DateTime The date this Entity was created on.
modifiedOn DateTime The date this Entity was modified on.

Possible Errors

Code Type Description
400 BadRequest The requested id can not be parsed.
404 NotFound The requested id can not be found.
501 NotImplemented The requested entity is not implement in the API.
^ Back to Top